Skip to content

Latest commit

ย 

History

History

Folders and files

NameName
Last commit message
Last commit date

parent directory

..
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 

README.md

๐Ÿ“Œ Cloud Native ์™€ MicroService

๐Ÿง Software Architecture: Antifragile ์˜ ํ•ต์‹ฌ(Cloud Native)

  • Auto Scaling: ์ตœ์†Œํ•œ์˜ ์ธ์Šคํ„ด์Šค ~ ํ•„์š”์— ๋”ฐ๋ผ ์Šค์ผ€์ผ ์•„์›ƒํ•˜์—ฌ ์‚ฌ์šฉ๋Ÿ‰์— ๋งž์ถฐ ์‚ฌ์šฉ์ด ๊ฐ€๋Šฅํ•˜๋‹ค.
  • Microservices: Cloud Native Application์˜ ํ•ต์‹ฌ์œผ๋กœ ์„œ๋น„์Šค๋ฅผ ์ˆ˜ ๋งŽ์€ ๋…๋ฆฝ์ ์ธ ๋ชจ๋“ˆ๋กœ ์„ธ๋ถ„ํ™” ํ•œ๋‹ค.
  • Chaos Engineering: ์‹œ์Šคํ…œ์ด ์˜ˆ์ธกํ•˜์ง€ ๋ชปํ•œ ์ƒํ™ฉ์—๋„ ๊ฒฌ๋”œ ์ˆ˜ ์žˆ๋„๋ก ์„ค๊ณ„ํ•˜๋Š” ๋ฐฉ๋ฒ•, ๊ทœ์น™.
  • Continuous Deployment : ์ง€์†์ ์ธ ๋ฐฐํฌ.

๐Ÿง Cloud Native Architecture ์˜ ํŠน์ง•

ํด๋ผ์šฐ๋“œ ํ™˜๊ฒฝ์—์„œ ํ•„์š”์— ์˜ํ•ด ํ™•์žฅ ๊ฐ€๋Šฅํ•˜๊ธฐ ๋–„๋ฌธ์— ์•„ํ‚คํ…์ฒ˜๋กœ ์‹œ์Šคํ…œ์˜ ์ˆ˜ํ‰์  ํ™•์žฅ(์Šค์ผ€์ผ ์•„์›ƒ)์— ์œ ์—ฐํ•˜๋‹ค. ์‚ฌ์šฉ๋Ÿ‰์— ๋งž์ถฐ ๋ฆฌ์†Œ์Šค๋ฅผ ์กฐ์ ˆํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒƒ์€ ๊ณง ๋น„์šฉ์˜ ์ ˆ์•ฝ์„ ๊ฐ€์ ธ์˜จ๋‹ค.
์„œ๋น„์Šค ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ํŒจํ‚ค์ง€ ๋‹จ์œ„๋กœ ์ž‘๊ฒŒ ์ชผ๊ฐœ์–ด ์šด์˜ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ปจํ…Œ์ด๋„ˆ ๊ธฐ๋ฐ˜์˜ ์šด์˜์—๋„ ์ ํ•ฉํ•˜๋‹ค.

๋ถ„ํ• ๋œ ์„œ๋น„์Šค๋“ค์„ ๋…๋ฆฝ์ ์œผ๋กœ ์šด์˜ํ•˜๊ธฐ ์œ„ํ•ด ํ•˜๊ธฐ์œ„ํ•ด ๋ฌด์ƒํƒœ ํ†ต์‹  ํ”„๋กœํ† ์ฝœ์„ ์‚ฌ์šฉํ•˜์—ฌ ์ข…์†์„ฑ์„ ์ตœ์†Œํ™”ํ•œ๋‹ค.
๋˜ํ•œ, ์„œ๋น„์Šค๋“ค์ด ๋ถ„ํ• ๋˜์–ด ์žˆ๊ธฐ ๋–„๋ฌธ์— ํŠน์ • ์„œ๋น„์Šค์— ์žฅ์• ๊ฐ€ ๋ฐœ์ƒํ•˜์—ฌ๋„ ๋‹ค๋ฅธ ์„œ๋น„์Šค์— ์˜ํ–ฅ์„ ์ฃผ์ง€ ์•Š๊ณ , ํ•ด๋‹น ์„œ๋น„์Šค๋งŒ ๋””๋ฒ„๊น… ํ•˜์—ฌ ๋‹ค์‹œ ๋ฐฐํฌํ•˜๋ฉด ๋œ๋‹ค.

Cloud Native Applicationd์€ ๋‹ค์Œ์„ ๋”ฐ๋ฅธ๋‹ค

  • Microservice
  • CI / CD : ์นด๋‚˜๋ฆฌ ๋ฐฐํฌ ์‚ฌ์šฉ(์ด ํŠธ๋ž˜ํ”ฝ์˜ 5~10%๋งŒ์„ ๋ฐ›์Œ)
  • DevOps: Plan - Create - Verify - Package - Release - Configure - Monitor ์˜ ๊ณผ์ •์„ ์ˆœํ™˜ ๋ฐ˜๋ณตํ•œ๋‹ค.

    ์กฐ๊ธˆ ๋” ์งง์€ ์ฃผ๊ธฐ์˜ ํ…Œ์ŠคํŠธ, ๋ฐฐํฌ

  • Container ๊ฐ€์ƒํ™”: ๊ณตํ†ต์ ์ธ ๋ฆฌ์†Œ์Šค๋Š” ๊ณต์œ ํ•˜๊ณ , ํ•„์š”ํ•œ ๋ฆฌ์†Œ์Šค๋งŒ์„ ๋…๋ฆฝ์ ์œผ๋กœ ์šด์˜. ๋” ๊ฐ€๋ณ๊ณ  ๋น ๋ฅด๋‹ค.

๐Ÿง Cluoud Native Application ์„ ๊ตฌํ˜„ํ•  ๋•Œ ๊ณ ๋ คํ•  15๊ฐ€์ง€

  • https://12factor.net/
  • PaaS ํ˜•ํƒœ์˜ ์„œ๋น„์Šค๋ฅผ ์ œ๊ณตํ•˜๋Š” Heroku์—์„œ ์ •๋ฆฌํ•œ ๊ฐ€์ด๋“œ ๋ผ์ธ.

1. Base Code

  • ์ฝ”๋“œ์˜ ํ†ต์ผ์ ์ธ ๊ด€๋ฆฌ

2. Dependency Isolation

  • ๊ฐ ๋งˆ์ดํฌ๋กœ ์„œ๋น„์Šค๋Š” ์ข…์†์„ฑ์„ ๊ฐ€์ง€๊ณ  ํŒจํ‚ค์ง•๋˜์–ด ์žˆ์–ด ๋ชจ๋“ˆ์˜ ๋ณ€๊ฒฝ์ด ์ „์ฒด ์‹œ์Šคํ…œ์— ์˜ํ–ฅ์„ ์ฃผ์ง€ ์•Š๊ฒŒ ์„ค๊ณ„๋˜์–ด์•ผ ํ•œ๋‹ค.

3. Configurations

  • ์ฝ”๋“œ ์™ธ๋ถ€์—์„œ ๊ตฌ์„ฑ ๊ด€๋ฆฌ ๋„๊ตฌ๋ฅผ ํ†ตํ•ด ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค์— ํ•„์š”ํ•œ ์ž‘์—…์„ ์ œ์–ดํ•˜์—ฌ ๋™์ผํ•œ ๋ฐฐํฌ๊ฐ€ ์˜ฌ๋ฐ”๋ฅธ ๊ตฌ์„ฑ์ด ์ ์šฉ๋œ ํ™˜๊ฒฝ์—์„œ ์ „ํŒŒ๋˜์–ด์•ผ ํ•œ๋‹ค.

4. Linkable Blacking Services

  • DB, Cache ๋“ฑ ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค๊ฐ€ ๊ฐ€์ ธ์•ผํ•  ๊ธฐ๋Šฅ์„ ์ถ”๊ฐ€๋กœ ์ง€์›ํ•  ์ˆ˜ ์žˆ๋‹ค.

5. Stages Of Creation

  • ๋นŒ๋“œ, ๋ฆด๋ฆฌ์ฆˆ, ์‹คํ–‰ ํ™˜๊ฒฝ์„ ๋ถ„๋ฆฌํ•ด์•ผ ํ•œ๋‹ค.
  • ๊ณ ์œ ํ•œ ํƒœ๊ทธ, ๋กค๋ฐฑ, CI/CD๋ฅผ ์ด์šฉํ•œ ์ž๋™ํ™”๋œ ์‹œ์Šคํ…œ ๊ตฌ์ถ•

6. Stateless Processes

  • ํ•˜๋‚˜์˜ ์„œ๋น„์Šค๋Š” ๋…๋ฆฝ์ ์œผ๋กœ ์šด์˜๋  ์ˆ˜ ์žˆ์–ด์•ผ ํ•œ๋‹ค. ํ•„์š”ํ•˜๋‹ค๋ฉด ์บ์‹œ, ๋ฐ์ดํ„ฐ ์ €์žฅ์†Œ๋ฅผ ์ด์šฉํ•˜์—ฌ ๋ฐ์ดํ„ฐ๋ฅผ ๊ตํ™˜.

7. Port Binding

  • ๊ฐ๊ฐ์˜ ์„œ๋น„์Šค๋Š” ์ž์ฒด ํฌํŠธ์—์„œ ๋…ธ์ถœ๋˜๋Š” ์ธํ„ฐํŽ˜์ด์Šค์™€ ์ž์ฒด ๊ธฐ๋Šฅ์ด ์žˆ์–ด์•ผ ํ•œ๋‹ค.

8. Concurrency

  • ์—ฌ๋Ÿฌ ์ธ์Šคํ„ด์Šค๊ฐ€ ๋™์‹œ์— ์‹คํ–‰๋  ์ˆ˜ ์žˆ์–ด์•ผ ํ•œ๋‹ค.

9. Disposability

  • ์„œ๋น„์Šค ์ธ์Šคํ„ด์Šค๊ฐ€ ์‚ญ์ œ๊ฐ€ ๊ฐ€๋Šฅํ•˜๊ณ , ์ •์ƒ์ ์ธ ์ข…๋ฃŒ๋ฅผ ํ•  ์ˆ˜ ์žˆ์–ด์•ผ ํ•œ๋‹ค.

10. Development & Production Parity

  • ๊ฐœ๋ฐœ, ํ”„๋กœ๋•์…˜ ๋‹จ๊ณ„๊ฐ€ ๊ตฌ๋ถ„๋˜์–ด์•ผ ํ•œ๋‹ค.

11. Logs

  • ๋กœ๊น… ์‹œ์Šคํ…œ, ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋กœ์ง๊ณผ ๋ถ„๋ฆฌ๋˜์–ด ์„œ๋น„์Šค์— ์˜ํ•ด ์ƒ์„ฑ๋œ ๋กœ๊ทธ๋ฅผ ์ด๋ฒคํŠธ ํ•ธ๋“ค๋ง ๋ฐฉ์‹์œผ๋กœ ์ฒ˜๋ฆฌ.

12. Admin Processes for Eventual Processes

  • ์šด์˜๋˜๊ณ  ์žˆ๋Š” ์„œ๋น„์Šค๋“ค์ด ์–ด๋–ค ํ˜•ํƒœ๋กœ ์‚ฌ์šฉ๋˜๋Š”์ง€, ๋ฆฌ์†Œ์Šค๊ฐ€ ์–ด๋–ป๊ฒŒ ์‚ฌ์šฉ๋˜๋Š”์ง€ ๋“ฑ์„ ํŒŒ์•…ํ•  ์ˆ˜ ์žˆ๋Š” ๊ด€๋ฆฌ๋„๊ตฌ๊ฐ€ ์žˆ์–ด์•ผ ํ•œ๋‹ค.

13. API First

  • ๋ชจ๋“  ์„œ๋น„์Šค๋Š” API ํ˜•ํƒœ๋กœ ์ œ๊ณต๋˜๊ณ , ์‚ฌ์šฉ์ž๊ฐ€ ์–ด๋–ป๊ฒŒ ์‚ฌ์šฉํ• ์ง€๋ฅผ ๊ณ ๋ฏผํ•˜์—ฌ ๊ตฌํ˜„ํ•œ๋‹ค.

14. Telemetry

  • ๋ชจ๋“  ์ง€ํ‘œ๋Š” ์‹œ๊ฐํ™”๋˜์–ด ๊ด€๋ฆฌ๋˜์–ด์•ผ ํ•˜๋‚Ÿ.

15. Authentication and Authorization

  • ์ ์ ˆํ•œ ์ธ์ฆ, ๊ถŒํ•œ ์ •๋ณด๋ฅผ ์š”๊ตฌํ•ด์•ผ ํ•œ๋‹ค.

๐Ÿค” MicroService ๋ž€?

img.png

์ด์ „ Monolithic Architecture ์—์„œ๋Š” ๋ชจ๋“  ๋กœ์ง์ด ํ•˜๋‚˜์˜ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์— ๋ชจ์—ฌ์žˆ๊ธฐ ๋–„๋ฌธ์— ํ•˜๋‚˜์˜ ๊ธฐ๋Šฅ์„ ์ˆ˜์ •ํ•˜๋ฉด ๋ชจ๋“  ๊ธฐ๋Šฅ์„ ๋‹ค์‹œ ๋นŒ๋“œํ•ด์•ผ ํ–ˆ๋‹ค.
๊ทธ๋Ÿฌ๋‚˜, MicroService๋Š” ๋‹ค๋ฅธ ์„œ๋น„์Šค์™€ ํ•จ๊ป˜ ์ž‘๋™ํ•˜๋Š” ์ž‘์€ ์„œ๋น„์Šค๋กœ ์ •์˜๋œ๋‹ค. ์ด๋Ÿฌํ•œ ์ž˜๊ฒŒ ์ชผ๊ฐœ์ง„ ๋ชจ๋“ˆ๋“ค์ด ๋ชจ์—ฌ ํ•˜๋‚˜์˜ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์ด๋ฃฌ๋‹ค.

์„œ๋น„์Šค๋“ค์€ ๋…๋ฆฝ์ ์ด๊ธฐ ๋–„๋ฌธ์— ์„œ๋น„์Šค์—์„œ ์ˆ˜ํ–‰ํ•˜๋Š” ๊ธฐ๋Šฅ์— ๋”ฐ๋ผ ๋งž์ถฐ ์–ธ์–ด๋‚˜ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ๋‹ค๋ฅด๊ฒŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.
๊ฐ ์„œ๋น„์Šค๋“ค์ด ์ชผ๊ฐœ์ ธ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์—…๋ฌด์˜ ๋ถ„ํ• ์ด ์‰ฝ๊ณ , ์œ ์ง€ ๋ณด์ˆ˜๊ฐ€ ๋” ์‰ฌ์›Œ์ง„๋‹ค, ์ž‘์€ ๋‹จ์œ„์ด๊ธฐ ๋•Œ๋ฌธ์— ๋นŒ๋“œ, ๋ฐฐํฌ, ์žฅ์• ์˜ ๋Œ€์ฒ˜์— ์žˆ์–ด์„œ๋„ ์ด์ ์„ ๊ฐ€์ง„๋‹ค.

๋งŽ์€ ์žฅ์ ์„ ๊ฐ€์ง€๊ณ  ์žˆ์ง€๋งŒ ๋‹จ์ ์ด ์—†๋Š” ๊ฒƒ์€ ์•„๋‹ˆ๋‹ค.
๋ชจ๋“ˆ์„ ์ž˜๊ฐœ ์ชผ๊ฐ ๋‹ค๋Š” ๊ฒƒ์€ ํ•˜๋‚˜์˜ ๋™์ž‘ํ•˜๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์œ„ํ•ด์„œ๋Š” ์ด์— ํ•„์š”ํ•œ ์„œ๋น„์Šค๋ฅผ ๋ชจ๋‘ ๋™์ž‘์‹œ์ผœ์•ผ ํ•œ๋‹ค๋Š” ๋ณต์žก์„ฑ์„ ์•ผ๊ธฐํ•œ๋‹ค.
๊ทธ๋ฆฌ๊ณ , ๊ฐ ์„œ๋น„์Šค๋“ค์ด ํ†ต์‹ ํ•ด์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ํ†ต์‹  ๊ด€๋ จํ•œ ์˜ค๋ฅ˜๊ฐ€ ์ถ”๊ฐ€์ ์œผ๋กœ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋‹ค.

๋งˆ์ดํฌ๋กœ ์„œ๋น„์Šค์˜ ํŠน์ง•์€ ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

  • ์„œ๋น„์Šค์˜ ๊ฒฝ๊ณ„๊ฐ€ ๊ตฌ๋ถ„๋˜๋Š” ์ž‘์€ ๋ชจ๋“ˆ.
  • RESTful
  • ํ™˜๊ฒฝ์„ค์ • ์ •๋ณด๋Š” ์™ธ๋ถ€์˜ ์‹œ์Šคํ…œ์— ์˜ํ•ด ๊ด€๋ฆฌ.(๋ฐฐํฌ์— ํฌํ•จ๋˜์ง€ ์•Š๋„๋ก)
  • ํด๋ผ์šฐ๋“œ ๋„ค์ดํ‹ฐ๋ธŒ ๊ธฐ์ˆ  ํ™œ์šฉ
  • ๋™์ ์ธ ์Šค์ผ€์ผ ์—…, ์Šค์ผ€์ผ ๋‹ค์šด
  • CI/CD
  • ์„œ๋น„์Šค์˜ ์‹œ๊ฐํ™”.

๐Ÿง MSA์˜ ํ‘œ์ค€ ๊ตฌ์„ฑ

img_5.png

ํด๋ผ์ด์–ธํŠธ์—๊ฒŒ์„œ ์š”์ฒญ์ด ๋“ค์–ด์˜ค๋ฉด API Gateway๋ผ๋Š” ์ง„์ž…์ ์„ ํ†ตํ•ด ํ•„์š”ํ•œ ์„œ๋น„์Šค์— ์š”์ฒญ์„ ํ•˜๊ฒŒ๋œ๋‹ค.
API Gateway์— ์ˆ˜์ง‘๋œ ์š”์ฒญ๋“ค์€ Sevice Router์— ์˜ํ•ด ์–ด๋””๋กœ ๊ฐ€์•ผํ•˜๋Š”์ง€ ๊ฒฐ์ •๋˜๊ฒŒ ๋˜๋Š”๋ฐ,
์ด ๋•Œ Service Discovery์˜ ๋“ฑ๋ก ๋ฆฌ์ŠคํŠธ์—์„œ ํ•ด๋‹น ์„œ๋น„์Šค์˜ ์œ„์น˜๋ฅผ ๊ฒ€์ƒ‰ํ•˜๊ฒŒ ๋œ๋‹ค.

์œ„์น˜๋ฅผ ์•Œ์•„๋ƒˆ๋‹ค๋ฉด ์„œ๋น„์Šค๋กœ ์ด๋™ํ•˜๊ฒŒ ๋˜๋Š”๋ฐ, ๊ตฌ์„ฑ์ด ์—ฌ๋Ÿฌ๊ฐœ๋กœ ๋ถ„์‚ฐ๋œ ํ˜•ํƒœ๋กœ ๋˜์–ด์žˆ๋‹ค๋ฉด Load Balancer ์— ์˜ํ•ด ์ด๋™ํ•  ์„œ๋น„์Šค๊ฐ€ ๊ฒฐ์ •๋œ๋‹ค.
๋ณดํ†ต ์ด๋Ÿฌํ•œ ์„œ๋น„์Šค๋“ค์€ ์ปจํ…Œ์ด๋„ˆ ๊ฐ€์ƒํ™” ๊ธฐ์ˆ ์„ ํ†ตํ•ด์„œ ๊ตฌ์„ฑ์ด ๋˜์–ด์žˆ๋‹ค. ๋‹ค๋ฅธ ์„œ๋น„์Šค๋“ค๊ณผ์˜ ์—ฐ๊ฒฐ์€ MOM(Message Oriented Middleware) ๊ณผ ์ €์žฅ์†Œ์™€ ๊ฐ™์€ Backing Service๋“ค์„ ์ด์šฉํ•˜์—ฌ ์ด๋ฃจ์–ด์ง„๋‹ค.

ํ™˜๊ฒฝ ์„ค์ • ์ •๋ณด๋Š” Config Store์™€ ๊ฐ™์ด ์„œ๋น„์Šค์˜ ์™ธ๋ถ€์—์„œ ํ•ด๋‹น ์ •๋ณด๋ฅผ ์ €์žฅํ•˜๊ณ  ์žˆ๊ฒŒ ๋˜๊ณ , ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ๋ฐฐํฌ๋ฅผ ์œ„ํ•ด CI/CD ๊ด€๋ จ ๋„๊ตฌ๋“ค์„ ์‚ฌ์šฉํ•˜๊ฒŒ ๋œ๋‹ค.
์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ๋ฐฐํฌ๋œ ์ดํ›„์—๋Š” ๋ชจ๋‹ˆํ„ฐ๋ง ๊ธฐ๋Šฅ์ด๋‚˜ ์ง„๋‹จ ๊ธฐ๋Šฅ์„ ์—ฐ๊ฒฐํ•˜์—ฌ ์‚ฌ์šฉํ•œ๋‹ค.

  • ๐Ÿ‘† Service Mesh

    • Service Discovery, Config Store, Service Router, Load Balancer, ์•”ํ˜ธํ™”, ์ธ์ฆ/์ธ๊ฐ€ ๋“ฑ์˜ ๋‚ด๋ถ€ ํ†ต์‹ .
    • ์ถ”์ƒํ™”, ์•ˆ์ „์„ฑ, ์‹ ๋ขฐ์„ฑ, ๋ณด์•ˆ์„ฑ, ๊ฐ€์‹œ์„ฑ์„ ๋ณด์žฅํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•ด์ค€๋‹ค.

๐Ÿง MSA๋ฅผ ๊ด€๋ฆฌํ•˜๊ธฐ ์œ„ํ•œ ๊ธฐ์ˆ 

img_1.png

  • Zuul: ์•ˆ์ „์„ฑ๊ณผ ํด๋ผ์ด์–ธํŠธ ๋ณ„ ์œ ์—ฐํ•œ ๋Œ€์ฒ˜๋ฅผ ์œ„ํ•œ API Gateway (์—ฐ๊ฒฐํ•œ ๋ฐฑ์—”๋“œ ์„œ๋น„์Šค์˜ id๋ฅผ ๋ฏธ๋ฆฌ ์ •์˜๋œ config ํŒŒ์ผ์—์„œ ์ฝ๋Š”๋‹ค.)

    • ์ธ์ฆ / ์ธ๊ฐ€์˜ ์—ญํ• , ๋ถ€์ ์ ˆํ•œ ์š”์ฒญ์„ ์ฐจ๋‹จํ•œ๋‹ค. - (pre filter)
    • ํด๋ผ์ด์–ธํŠธ์˜ ์š”์ฒญ์— ๋”ฐ๋ผ ์ ์ ˆํ•œ ์„œ๋น„์Šค๋กœ ๋กœ๋“œ๋ฐธ๋Ÿฐ์‹ฑํ•˜๊ณ , ๋ผ์šฐํŒ…(zuul core library) - (routing filter)
    • ํŠธ๋ž˜ํ”ฝ ๋กœ๊น… - (post filter)
    • Circuit Break - (routing filter)

      img_2.png

      • Pre Filter: ๋กœ๊น…, ์ธ์ฆ ๋“ฑ์˜ ์ฒ˜๋ฆฌ๊ฐ€ ์ด๋ฃจ์–ด์ง„๋‹ค.
      • Routing Filter: ๋™์  ๋ผ์šฐํŒ…์„ ๋‹ค๋ฃจ๋Š” ํ•„ํ„ฐ.
      • Post Filter: ์‘๋‹ต์— ํ—ค๋”๋ฅผ ์ถ”๊ฐ€ํ•˜๊ฑฐ๋‚˜, ์‘๋‹ต์˜ ๋ฉ”ํƒ€ ์ •๋ณด๋“ค์„ ์ˆ˜์ง‘, ํ†ต๊ณ„(์‘๋‹ต ์†๋„, ์ƒํƒœ์ฝ”๋“œ ๋“ฑ)
      • Error Filter: ์—๋Ÿฌ ๋ฐœ์ƒ์‹œ ์‹คํ–‰๋œ๋‹ค.
      • ํ•„ํ„ฐ๋Š” Request -> pre -> routing -> post์˜ ์ˆœ์„œ๋กœ ์‹คํ–‰๋œ๋‹ค.(ํ•„ํ„ฐ๋ผ๋ฆฌ ํ†ต์‹ ํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๊ณ  ์ˆœ์„œ๋Œ€๋กœ๋งŒ ์‹คํ–‰๋œ๋‹ค.)
  • Ribbon Library: ๋ถ€ํ•˜๋ฅผ ์ ์ ˆํ•˜๊ฒŒ ๋ถ„์‚ฐํ•˜๋Š” ๋กœ๋“œ ๋ฒจ๋Ÿฐ์„œ.

  • Hysterix Library: ์žฅ์• ๋ฅผ ๊ฐ์ง€ํ•˜๊ณ , ๋Œ€์ฒ˜ํ•˜๋Š” Circuit Breaker

  • Eureka: ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค(Eureka Client)์˜ ๋“ฑ๋ก(Registry)๊ณผ ํ•ด์ง€, ์—ฐ๊ฒฐ ์ •๋ณด ํƒ์ƒ‰(Discovery)์„ ๋‹ด๋‹นํ•˜๋Š” Naming Server

    • 30์ดˆ ๋งˆ๋‹ค ์œ ๋ ˆ์นด ์„œ๋ฒ„๋กœ ๋ถ€ํ„ฐ ๋‹ค๋ฅธ ์œ ๋ ˆ์นด ํด๋ผ์ด์–ธํŠธ๋“ค์˜ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ๊ฐฑ์‹ . ์œ ๋ ˆ์นด ํด๋ผ์ด์–ธํŠธ๋“ค์€ 30์ดˆ๋งˆ๋‹ค ping์„ ์œ ๋ ˆ์นด ์„œ๋ฒ„๋กœ ์ „์†ก ping์ด ์˜ค์ง€ ์•Š์œผ๋ฉด
      ์œ ๋ ˆ์นด ์„œ๋ฒ„๋Š” ํ•ด๋‹น ํด๋ผ์ด์–ธํ‹€๋ฅผ ๋ ˆ์ง€์ŠคํŠธ๋ฆฌ์—์„œ ์ œ๊ฑฐํ•œ๋‹ค.
  • Kafka: ๋ฉ”์‹œ์ง• ํ ์„œ๋น„์Šค, ๋ฐ์ดํ„ฐ ๋™๊ธฐํ™”๋ฅผ ์œ„ํ•ด ์‚ฌ์šฉํ•œ๋‹ค.
    ๋ฐ์ดํ„ฐ์˜ ๋ณ€๊ฒฝ์ด ์ผ์–ด๋‚˜๋ฉด ๋ฐ์ดํ„ฐ๋ฅผ ์นดํ”„์นด์— ์ „๋‹ฌํ•˜๊ณ , ์นดํ”„์นด๋Š” ํ•ด๋‹น ๋ฐ์ดํ„ฐ๋ฅผ ๊ตฌ๋…ํ•œ ์„œ๋น„์Šค์—๊ฒŒ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ์ „๋‹ฌํ•ด์ค€๋‹ค.

  • Zipkin, ELK: ๋ชจ๋‹ˆํ„ฐ, ๋กœ๊ทธ ์ถ”์ 

๋” ์ž์„ธํ•œ ๊ฒƒ์€ ๋’ค์—์„œ ๋‹ค์‹œ ์•Œ์•„๋ณธ๋‹ค.

๐Ÿค” SOA ์™€ MSA ๋Š” ์–ด๋–ป๊ฒŒ ๋‹ค๋ฅผ๊นŒ?

  • SOA: Service Oriented Architecture
  • MSA: :Micro Service Architecture

SOA๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ ์žฌ์ƒ์š”์„ ํ†ตํ•œ ๋น„์šฉ์˜ ์ ˆ๊ฐ์— ๋ชฉ์ ์ด ์žˆ๊ณ , MSA๋Š” ์„œ๋น„์Šค ๊ฐ„์˜ ๊ฒฐํ•ฉ๋„๋ฅผ ๋‚ฎ์ถ”์–ด ๋ณ€ํ™”์— ๋Šฅ๋™์ ์œผ๋กœ ๋Œ€์‘ํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•˜๋Š” ๊ฒƒ์— ๋ชฉ์ ์ด ์žˆ๋‹ค.
๋–„๋ฌธ์— SOA๋Š” ์„œ๋น„์Šค์˜ ๊ณต์œ ๋ฅผ ์ตœ๋Œ€ํ™”ํ•˜์—ฌ ๋น„์šฉ์„ ์ ˆ๊ฐํ•˜๊ณ , MSA๋Š” ๋ฐ˜๋Œ€๋กœ ์„œ๋น„์Šค๊ฐ„์˜ ๊ณต์œ ๋ฅผ ์ตœ์†Œํ™” ํ•˜์—ฌ ๊ฐ ์„œ๋น„์Šค๊ฐ€ ๋…๋ฆฝ์ ์ผ ์ˆ˜ ์žˆ๋„๋ก ํ•œ๋‹ค.

SOA ๋ฐฉ์‹์—์„œ๋Š” ๊ณตํ†ต์˜ ์„œ๋น„์Šค๋ฅผ ๋ฒ„์Šค(ESB)๋ฅผ ํ†ตํ•ด ํ•œ๊ณณ์— ๋ชจ์€ ํ›„ ํ•˜๋‚˜์˜ ์„œ๋น„์Šค๋กœ ์‚ฌ์šฉํ•˜๊ณ , MSA๋Š” ๊ฐ ๋…๋ฆฝ๋œ ์„œ๋น„์Šค๊ฐ€ REST API ๋ฐฉ์‹์œผ๋กœ ํ†ต์‹ ํ•œ๋‹ค.

๐Ÿ“Œ Spring Cloud Netfilx Eureka

๐Ÿง Eureka Server

ํ”„๋กœ์ ํŠธ ์ƒ์„ฑ์‹œ ์˜์กด์„ฑ Eureka Server ์ถ”๊ฐ€.

  • @EnableEurekaServer

    @SpringBootApplication
    @EnableEurekaServer // #1
    public class SpringcloudApplication {
    
        public static void main(String[] args) {
            SpringApplication.run(SpringcloudApplication.class, args);
        }
    
    }
    • (#1): ์œ ๋ ˆ์นด ์„œ๋ฒ„๋กœ ๋“ฑ๋กํ•˜๋Š” ์• ๋…ธํ…Œ์ด์…˜, Service Discovery ๋กœ์„œ ํ”„๋กœ์ ํŠธ๋ฅผ ์‹คํ–‰์‹œํ‚จ๋‹ค.
  • ๊ธฐ๋ณธ ์„ค์ •

    server:
      port: 8761
    
    #1
    spring:
      application:
        name: discoveryservice
    
    # 2
    eureka:
      client:
        register-with-eureka: false  
        fetch-registry: false
    • (#1): ๋งˆ์ดํฌ๋กœ ์„œ๋น„์Šค์—์„œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์‹๋ณ„ํ•˜๊ธฐ ์œ„ํ•œ ๊ณ ์œ ํ•œ ID ๋ถ€์—ฌ
    • (#2): ์œ ๋ ˆ์นด ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•˜๊ฒŒ ๋˜๋ฉด ๊ธฐ๋ณธ์ ์œผ๋กœ ์œ ๋ ˆ์นด ํด๋ผ์ด์–ธํŠธ๋กœ ๋“ฑ๋กํ•˜๋ ค๊ณ  ์‹œ๋„ํ•˜๊ฒŒ ๋˜๋Š”๋ฐ, ํ˜„์žฌ ํ”„๋กœ์ ํŠธ๋Š” ์œ ๋ ˆ์นด ์„œ๋ฒ„๋กœ ์‚ฌ์šฉํ•  ๊ฒƒ์ด๊ธฐ ๋Œ€๋ฌธ์— false๋กœ ์ง€์ •.
  • ์œ ๋ ˆ์นด ๋Œ€์‹œ๋ณด๋“œ

    img_7.png

๐Ÿง Eureka Client

Eureka-client ์˜์กด์„ฑ ์ถ”๊ฐ€.

  • @EnableEurekaClient, @EnableDiscoveryClient

    @EnableDiscoveryClient
    @SpringBootApplication
    public class UserServiceApplication {
    
        public static void main(String[] args) {
            SpringApplication.run(UserServiceApplication.class, args);
        }
    
    }
    • DiscoveryClient ๋ฅผ ์กฐ๊ธˆ ๋” ๊ตฌํ˜„ํ•ด ๋†“์€ ๊ฒƒ์ด EurekaClient
  • ๊ธฐ๋ณธ ์„ค์ •

    server:
      port: 9001
    
    spring:
      application:
        name: user-service
    
    eureka:
      client:
        register-with-eureka: true
        fetch-registry: true #1
        service-url:
          defaultZone: http://127.0.0.1:8761/eureka #2
    • (#1): ์œ ๋ ˆ์นด ์„œ๋ฒ„๋กœ๋ถ€ํ„ฐ ์ธ์Šคํ„ด์Šค๋“ค์˜ ์ •๋ณด๋ฅผ ์ฃผ๊ธฐ์ ์œผ๋กœ ๊ฐ€์ ธ์˜ฌ ๊ฒƒ์ธ์ง€ ์„ค์ •ํ•˜๋Š” ์†์„ฑ.
    • (#2): ๋“ฑ๋กํ•  ์„œ๋ฒ„์˜ ์œ„์น˜, ์ด์ „์— ์ƒ์„ฑํ•œ ์œ ๋ ˆ์นด ์„œ๋ฒ„์˜ ํ˜ธ์ŠคํŠธ ์ฃผ์†Œ๋ฅผ ์ ๊ณ , ์—”๋“œํฌ์ธํŠธ๋ฅผ ๋ช…์‹œํ•ด ์ฃผ์—ˆ๋‹ค.

    img_6.png

    ์ด์ „์— ์‚ดํŽด๋ณด์•˜๋˜ ์œ ๋ ˆ์นด ์„œ๋ฒ„์˜ ๋Œ€์‹œ๋ณด๋“œ๋กœ ๋Œ์•„๊ฐ€๋ณด๋ฉด ๋ฐฉ๊ธˆ ์‹คํ–‰์‹œํ‚จ user-service๊ฐ€ ์‹คํ–‰๋˜๊ณ  ์žˆ๋Š” ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.

๐Ÿ’ก ์„œ๋น„์Šค์˜ ์‹คํ–‰ ๋ฐฉ๋ฒ•

1. Application Run
  - ์—ฌ๋Ÿฌ๊ฐœ์˜ Application ์ธ์Šคํ„ด์Šค๋ฅผ ์ƒ์„ฑ(Edit configurations)ํ›„ -Dserver.port ์˜ต์…˜์„ ๋‹ค๋ฅด๊ฒŒ ์„ค์ •ํ•ด ์ฃผ์–ด ์—ฌ๋Ÿฌ๊ฐœ์˜ ์ธ์Šคํ„ด์Šค๋ฅผ ๋„์šธ ์ˆ˜ ์žˆ๋‹ค.
2. ๋นŒ๋“œ ๋„๊ตฌ๋ฅผ ์ด์šฉํ•˜์—ฌ ์‹คํ–‰
  - ๋นŒ๋“œ ๋„๊ตฌ๋ฅผ ์ด์šฉํ•˜์—ฌ build and run
  - gradle์˜ ๊ฒฝ์šฐ ./gradlew build ํ›„ ./gradlew bootRun --args='--server.port=9003'
3. java -jar ๋กœ ์‹คํ–‰
  - ๋นŒ๋“œ
  - java -jar -Dserver.port=9004 ./build/libs/user-service-0.0.1-SNAPSHOT.jar
  • ๋žœ๋คํฌํŠธ๋ฅผ ์ด์šฉํ•œ ๊ฐ„๋‹จํ•œ ๋กœ๋“œ๋ฐธ๋Ÿฐ์‹ฑ

    • server.port: 0 ์œผ๋กœ ์„ค์ •.
    • ์œ ๋ ˆ์นด ์„œ๋ฒ„์—์„œ ๋™์ผ ํ˜ธ์ŠคํŠธ, ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ด๋ฆ„, port=0 ๋ฅผ ๊ฐ€์ง€๊ธฐ ๋•Œ๋ฌธ์— ํ•˜๋‚˜๋ฐ–์— ๋“ฑ๋ก์ด ๋˜์ง€ ์•Š์Œ.
    • ์‹๋ณ„ ์•„์ด๋””๋ฅผ ๋ณ€๊ฒฝ
      eureka:
       instance:
         instance-id: ${spring.cloud.client.hostname}:${spring.application.instance_id:${random.value}}
      



๐Ÿ”‘ ์ฐธ๊ณ