Server๐Ÿงค/SpringCloud

[MSA] MicroService์™€ SpringCloud์˜ ์†Œ๊ฐœ

yujindonut 2023. 9. 13. 17:01
728x90

ํŠน์ง•

ํ™•์žฅ ๊ฐ€๋Šฅํ•œ ์•„ํ‚คํ…์ฒ˜

  • ์‹œ์Šคํ…œ์˜ ์ˆ˜ํ‰์  ํ™•์ •์— ์œ ์—ฐ
  • ํ™•์žฅ๋œ ์„œ๋ฒ„๋กœ ์‹œ์Šคํ…œ์˜ ๋ถ€ํ•˜ ๋ถ„์‚ฐ, ๊ฐ€์šฉ์„ฑ ๋ณด์žฅ
  • ์‹œ์Šคํ…œ ๋˜๋Š”, ์„œ๋น„์Šค ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋‹จ์œ„์˜ ํŒจํ‚ค์ง€(์ปจํ…Œ์ด๋„ˆ ๊ธฐ๋ฐ˜ ํŒจํ‚ค์ง€)

ํƒ„๋ ฅ์  ์•„ํ‚คํ…์ฒ˜

  • ์„œ๋น„์Šค ์ƒ์„ฑ - ํ†ตํ•ฉ - ๋ฐฐํฌ, ๋น„์ฆˆ๋‹ˆ์Šค ํ™˜๊ฒฝ ๋ณ€ํ™”์— ๋Œ€์‘ ์‹œ๊ฐ„ ๋‹จ์ถ•
  • ๋ถ„ํ• ๋œ ์„œ๋น„์Šค ๊ตฌ์กฐ 
  • ๋ฌด์ƒํƒœ ํ†ต์‹  ํ”„๋กœํ† ์ฝœ

์žฅ์•  ๊ฒฉ๋ฆฌ

  • ํŠน์ • ์„œ๋น„์Šค์— ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•ด๋„ ๋‹ค๋ฅธ ์„œ๋น„์Šค์— ์˜ํ–ฅ์„ ์ฃผ์ง€ ์•Š์Œ

CI/CD

  • ์ง€์†์ ์ธ ํ†ตํ•ฉ CI
    • ํ†ตํ•ฉ ์„œ๋ฒ„, ์†Œ์Šค ๊ด€๋ฆฌ, ๋นŒ๋“œ ๋„๊ตฌ, ํ…Œ์ŠคํŠธ ๋„๊ตฌ
  • ์ง€์†์  ๋ฐฐํฌ
    • Continuous Delivery
    • Continuous Deployment
    • Pipe line

DEVOPS

๋ฐฐํฌ ์šด์˜ QA์˜ ๊ต์ง‘ํ•ฉ

์ง€์†์ ์œผ๋กœ ๋Š์ž„์—†์ด ์ง€์†๋ฐฐํฌ์šด์˜ํ•ด๋‚˜๊ฐ€๋Š” ๊ฒƒ!

 

์„œ๋น„์Šค ๋‹จ์œ„๋ฅผ ์ž‘์€ ๋‹จ์œ„๋กœ ๋‚˜๋ˆ”์œผ๋กœ์จ, ๋” ์ž์ฃผ ๋ฐฐํฌ ํ…Œ์ŠคํŠธ ํ•  ์ˆ˜ ์žˆ๊ฒŒ๋จ


Container ๊ฐ€์ƒํ™”

๊ธฐ์กด์˜ ํ•˜๋“œ์›จ์–ด ๊ฐ€์ƒํ™”์— ๋น„ํ•ด์„œ ์ ์€ ๋ฆฌ์†Œ์Šค๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์„œ๋น„์Šค๋ฅผ ๊ตฌ์ถ•ํ•  ์ˆ˜ ์žˆ๋‹ค

 

๊ธฐ์กด ๋ฐฉ์‹ -> ๊ฐ€์ƒํ™” ๋ฐฐํฌ -> ์ปจํ…Œ์ด๋„ˆ ๋ฐฐํฌ


12 Factors

1. CodeBase

์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ 1๊ฐœ์˜ ์ฝ”๋“œ ๋ฒ ์ด์Šค(Git, SVN)๋ฅผ ํ†ตํ•ด ๊ด€๋ฆฌ๋˜์–ด์•ผ ํ•˜๋ฉฐ, ๋™์ผํ•œ ์ฝ”๋“œ๋กœ ์šด์˜/๊ฐœ๋ฐœ์— ๋ฐฐํฌํ•˜์—ฌ์•ผ ํ•œ๋‹ค.

  • ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์€ 1๊ฐœ์˜ ์ฝ”๋“œ ๋ฒ ์ด์Šค๋ฅผ ๊ฐ€์ง„๋‹ค
  • ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์€ 1๊ฐœ์˜ ์ฝ”๋“œ ๋ฒ ์ด์Šค๋ฅผ ํ†ตํ•ด ์šด์˜/๊ฐœ๋ฐœ์šฉ์œผ๋กœ ๋ฐฐํฌํ•œ๋‹ค
  • CodeBase ํ•ญ๋ชฉ์€ ์ด์–ด์ง€๋Š” ํƒ€ ํ•ญ๋ชฉ์„ ์ค€์ˆ˜๊ธฐ ์œ„ํ•ด ๊ธฐ๋ณธ์ ์œผ๋กœ ์ค€์ˆ˜ํ•ด์•ผ ํ•˜๋Š” ํ•ญ๋ชฉ์ด๋‹ค
  • CodeBase ํ•ญ๋ชฉ์€ SVN, Git๊ณผ ๊ฐ™์€ ์ฝ”๋“œ ๊ด€๋ฆฌ ์‹œ์Šคํ…œ ์‚ฌ์šฉ์œผ๋กœ ์ค€์ˆ˜ํ•  ์ˆ˜ ์žˆ๋‹ค

2. Dependencies

์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ๋ชจ๋“  ์ข…์†์„ฑ์„ ๋ช…์‹œ์ ์œผ๋กœ ์„ ์–ธํ•˜์—ฌ ์‚ฌ์šฉํ•œ๋‹ค. ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ํ•„์š”๋กœ ํ•˜๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ dependency manifest ํŒŒ์ผ์— (Gemfile, POM ๋“ฑ) ๋ช…์‹œ์ ์œผ๋กœ ์„ ์–ธํ•˜์—ฌ ์‚ฌ์šฉํ•œ๋‹ค. SaaS๋Š” ์ƒํ™ฉ์— ๋”ฐ๋ผ ๋‹ค์–‘ํ•œ ํ™˜๊ฒฝ(window, mac, linux)์— ๋ฐฐํฌ๋  ์ˆ˜ ์žˆ๋‹ค. Gemfile, pom ๋“ฑ์„ ์‚ฌ์šฉํ•˜์—ฌ ๋‹ค์–‘ํ•œ ํ™˜๊ฒฝ์—์„œ๋„ SaaS๊ฐ€ ์ •์ƒ ๋™์ž‘ํ•  ์ˆ˜ ์žˆ์Œ์„ ๋ณด์žฅํ•  ์ˆ˜ ์žˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด curl ๋“ฑ์„ ์‚ฌ์šฉํ•˜์—ฌ lib๋ฅผ ์‚ฌ์šฉํ•  ๊ฒฝ์šฐ os์— ๋”ฐ๋ผ ์˜ค๋™์ž‘ ํ•  ์ˆ˜ ์žˆ๋‹ค.

 

3. Config

๋ชจ๋“  ์„ค์ • ์ •๋ณด๋Š” ์ฝ”๋“œ๋กœ๋ถ€ํ„ฐ ๋ถ„๋ฆฌ๋œ ๊ณต๊ฐ„์— ์ €์žฅ๋˜์–ด์•ผ ํ•˜๊ณ , ๋Ÿฐํƒ€์ž„์—์„œ ์ฝ”๋“œ์— ์˜ํ•ด ์ฝํ˜€์•ผ ํ•œ๋‹ค. SaaS๋Š” ๋™์ผํ•œ ์ฝ”๋“œ๋ฅผ ์—ฌ๋Ÿฌ ํ™˜๊ฒฝ(์šด์˜/๊ฐœ๋ฐœ)์— ๋ฐฐํฌํ•œ๋‹ค. ์ด๋ฅผ ์œ„ํ•ด ํ™˜๊ฒฝ๋งˆ๋‹ค ๋‹ฌ๋ฆฌ ์‚ฌ์šฉ๋˜์–ด์•ผ ํ•˜๋Š” ์ •๋ณด๋ฅผ ๋ถ„๋ฆฌํ•œ๋‹ค.

๋ถ„๋ฆฌ๋˜์–ด์•ผ ํ•  ์ •๋ณด

  • ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋‚˜ ๋‹ค๋ฅธ ๋ฐฑ์—… ์„œ๋น„์Šค๋ฅผ ์ฒ˜๋ฆฌํ•˜๋Š” ๋ฆฌ์†Œ์Šค
  • ์™ธ๋ถ€ ๋ฆฌ์†Œ์Šค(S3, Twitter ๋“ฑ)์˜ ์ธ์ฆ ์ •๋ณด
  • ๊ฐ ๋ฐฐํฌ๋งˆ๋‹ค ๋‹ฌ๋ผ์ง€๋Š” ๊ฐ’(cononical hostname..)
  • dev,test,stage,prod์˜ ๋ฐฐํฌ ๋‹จ๊ณ„๋งˆ๋‹ค ๋‹ค๋ฅผ ์ˆ˜ ์žˆ๋Š” ์–ด๋–ค ๊ฐ’๋“ค

์„ค์ •์ •๋ณด๋ฅผ ์ €์žฅํ•˜๋ฉด ์•ˆ๋˜๋Š” ๊ณณ

  • code
  • properties file
  • build : one build, many deploy๋‹ˆ๊นŒ
  • app server(jndi database ๊ฐ™์€ ์ •๋ณด)

Config ํ•ญ๋ชฉ ์ค€์ˆ˜ ๋ฐฉ๋ฒ•

  • ๋ฐฐํฌ ํ™˜๊ฒฝ(๊ฐœ๋ฐœ/์šด์˜)์šฉ ์„ค์ •ํŒŒ์ผ์„ ์ž‘์„ฑ
  • Spring Cloud Config ์‚ฌ์šฉ

 

4. Backing services

๋ฐฑ์—”๋“œ ์„œ๋น„์Šค๋ฅผ ์—ฐ๊ฒฐ๋œ ๋ฆฌ์†Œ์Šค๋กœ ์ทจ๊ธ‰ํ•œ๋‹ค. SaaS์˜ ๋ฆฌ์†Œ์Šค๋Š” ์ž์œ ๋กญ๊ฒŒ ๋ฐฐํฌ์— ์—ฐ๊ฒฐ๋˜๊ฑฐ๋‚˜ ๋ถ„๋ฆฌํ•  ์ˆ˜ ์žˆ๊ณ , ์ฝ”๋“œ ์ˆ˜์ • ์—†์ด ์ „ํ™˜์ด ๊ฐ€๋Šฅํ•ด์•ผ ํ•œ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด DB๋ฅผ MySQL์—์„œ Amazon RDS๋กœ ์ „ํ™˜ํ•  ๋•Œ ์ฝ”๋“œ ์ˆ˜์ • ์—†์ด ๊ฐ€๋Šฅํ•ด์•ผ ํ•œ๋‹ค.

๋ฐฑ์—”๋“œ ์„œ๋น„์Šค

  • ๋„คํŠธ์›Œํฌ์„ ํ†ตํ•ด ์ด์šฉํ•˜๋Š” ๋ชจ๋“  ์„œ๋น„์Šค
  • DB, Cache, SMTP, Messaging/Queueing system

์ค€์ˆ˜ ๋ฐฉ๋ฒ•

  • Config์— ๋ฐฑ์—”๋“œ ์„œ๋น„์Šค์˜ URL์ด๋‚˜ Locator๋ฅผ ์ €์žฅํ•˜๊ณ , ์ฝ”๋“œ์—์„œ๋Š” ์„ค์ •์„ ์ฝ์–ด์„œ ์‚ฌ์šฉ
  • Factor3. Config ๊ธฐ๋Šฅ ์‚ฌ์šฉ

 

5. Build, Release, Run

์ฝ”๋“œ ๋ฒ ์ด์Šค๋Š” build > release > run์˜ ๋‹จ๊ณ„๋ฅผ ๊ฑฐ์ณ ๋ฐฐํฌ๋กœ ๋ณ€ํ™˜๋˜๋ฉฐ, ๊ฐ ๋‹จ๊ณ„๋Š” ์—„๊ฒฉํ•˜๊ฒŒ ๋ถ„๋ฆฌ๋˜์–ด์•ผ ํ•œ๋‹ค.

์ค€์ˆ˜ ๋ฐฉ๋ฒ•

  • ๋นŒ๋“œ ๋‹จ๊ณ„๋Š” ๊ฐœ๋ฐœ์ž, ๋ฐฐํฌ ๋‹จ๊ณ„๋Š” ๋ฐฐํฌํˆด, ์‹คํ–‰ ๋‹จ๊ณ„๋Š” ํ”„๋กœ์„ธ์Šค ๋งค๋‹ˆ์ €์— ์˜ํ•ด ์‹œ์ž‘

 

6. Process

์‹คํ–‰ ํ™˜๊ฒฝ์—์„œ ์•ฑ์€ ํ•˜๋‚˜ ์ด์ƒ์˜ ํ”„๋กœ์„ธ์Šค๋กœ ์‹คํ–‰๋˜๋ฉฐ, ๊ฐ ํ”„๋กœ์„ธ์Šค๋Š” stateless๋กœ ์•„๋ฌด๊ฒƒ๋„ ๊ณต์œ ํ•˜์ง€ ์•Š์•„์•ผ ํ•œ๋‹ค. SaaS๋Š” ์—ฌ๋Ÿฌ ๊ฐœ์˜ ์ธ์Šคํ„ฐ์Šค๋กœ ๋ฐฐํฌ๋  ์ˆ˜ ์žˆ๋‹ค. ๊ฐ ์ธ์Šคํ„ด์Šค๋Š” ๋ฉ”๋ชจ๋ฆฌ ํŒŒ์ผ ๋“ฑ์„ ๊ณต์œ ํ•  ์ˆ˜ ์—†์œผ๋ฉฐ, ์ธ์Šคํ„ด์Šค๊ฐ€ ์žฌ์‹คํ–‰ ๋  ๋•Œ local file, session๊ณผ ๊ฐ™์€ ์ƒํƒœ ์ •๋ณด๋Š” ๋ชจ๋‘ ์ดˆ๊ธฐํ™”๋œ๋‹ค.

 

์ค€์ˆ˜ ๋ฐฉ๋ฒ•

  • ๋ฉ”๋ชจ๋ฆฌ/ํŒŒ์ผ์„ ์‚ฌ์šฉํ•  ๊ฒฝ์šฐ ๋‹จ์ผ ํŠธ๋žœ์žญ์…˜ ๋‚ด์—์„œ ์ฝ๊ณ , ์“ฐ๊ณ  ๋“ฑ์˜ ๋ชจ๋“  ์ž‘์—…์„ ์ฒ˜๋ฆฌ.
  • ์„ธ์…˜ ์ƒํƒœ ๋ฐ์ดํ„ฐ์˜ ๊ฒฝ์šฐ Memcached ๋˜๋Š” Redis์™€ ๊ฐ™์€ ๋ฐ์ดํ„ฐ ์ €์žฅ์†Œ์— ์ €์žฅ

 

7. Port Binding

๋ฐฐํฌ๋œ SaaS ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ํƒ€ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋„๋ก ํฌํŠธ ๋ฐ”์ธ๋”ฉ์„ ํ†ตํ•ด ์„œ๋น„์Šค๋ฅผ ๊ณต๊ฐœํ•œ๋‹ค. ์•ฑ๋„ ๋ฐฑ์—”๋“œ ์„œ๋น„์Šค์ฒ˜๋Ÿผ URL์„ ์ œ๊ณตํ•˜๊ณ , ๋ผ์šฐํŒ… ๋ ˆ์ด์–ด๊ฐ€ ์™ธ๋ถ€์— ๊ณต๊ฐœ๋œ ํ˜ธ์ŠคํŠธ ๋ช…์˜๋กœ ๋“ค์–ด์˜จ ์š”์ฒญ์„ ํฌํŠธ์— ๋ฐ”์ธ๋”ฉ ๋œ ์›น ํ”„๋กœ์„ธ์Šค์— ์ „๋‹ฌํ•œ๋‹ค. Factor4. Backing services์˜ ํ™•์žฅ์œผ๋กœ, ํฌํŠธ ๋ฐ”์ธ๋”ฉ์— ์˜ํ•ด ๊ณต๊ฐœ๋˜๋Š” ์„œ๋น„์Šค๋Š” HTTP๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ejabberd๋‚˜ Redis ๊ฐ™์€ ๋ชจ๋“  ์ข…๋ฅ˜์˜ ์„œ๋ฒ„ ์†Œํ”„ํŠธ์›จ์–ด๊ฐ€ ํ•ด๋‹น๋œ๋‹ค.

์ค€์ˆ˜ ๋ฐฉ๋ฒ•

  • ๋ณดํ†ต dependency์— ์›น์„œ๋ฒ„ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์ถ”๊ฐ€ํ•ด์„œ ๊ตฌํ˜„

 

8. Concurrency

์•ฑ์€ ์ˆ˜ํ‰์œผ๋กœ ํ™•์žฅํ•  ์ˆ˜ ์žˆ์–ด์•ผ ํ•˜๊ณ , Factor6. Processes์— ์˜ํ•ด ๋™์‹œ์„ฑ์„ ๋†’์ผ ์ˆ˜ ์žˆ๋‹ค.

์ค€์ˆ˜ ๋ฐฉ๋ฒ•

  • ๋ชจ๋“  ์ผ์„ ์ฒ˜๋ฆฌํ•˜๋Š” ํ•˜๋‚˜์˜ ํ”„๋กœ์„ธ์Šค ๋Œ€์‹  ๊ธฐ๋Šฅ๋ณ„๋กœ ๋ถ„๋ฆฌ๋œ ํ”„๋กœ์„ธ์Šค ์‹คํ–‰(micro service)
  • ํ”„๋กœ์„ธ์Šค๊ฐ€ ๋ฐ๋ชฌํ˜•ํƒœ๊ฐ€ ์•„๋‹ˆ์–ด์•ผ ํ•จ
  • OS ํ”„๋กœ์„ธ์Šค ๊ด€๋ฆฌ์ž/๋ถ„์‚ฐ ํ”„๋กœ์„ธ์Šค ๋งค๋‹ˆ์ €/Foreman ๊ฐ™์€ ํˆด์— ์˜์กดํ•ด์„œ output stream์„ ๊ด€๋ฆฌํ•˜๊ณ , ์ถฉ๋Œ์ด ๋ฐœ์ƒํ•œ ํ”„๋กœ์„ธ์Šค์— ๋Œ€์‘, ์žฌ์‹œ์ž‘๊ณผ ์ข…๋ฃŒ๋ฅผ ์ฒ˜๋ฆฌํ•ด์•ผ ํ•จ

 

9. Disposability

ํ”„๋กœ์„ธ์Šค๋Š” shut down ์‹ ํ˜ธ๋ฅผ ๋ฐ›์•˜์„ ๋•Œ graceful shut down ํ•ด์•ผ ํ•œ๋‹ค. SaaS๋Š” ์š”์ฒญ์— ์˜ํ•ด Scale up/down์ด ๋นˆ๋ฒˆํžˆ ๋ฐœ์ƒํ•œ๋‹ค. Disposability๋ฅผ ์ค€์ˆ˜ํ•จ์œผ๋กœ์จ ์ด๋Ÿฌํ•œ ์‚ฌ์šฉ์— ์•ˆ์ •์„ฑ์„ ์–ป์„ ์ˆ˜ ์žˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด Scale down ์‹œ์ ์— graceful shut down ์ด ์•„๋‹ˆ๋ผ๋ฉด db lock ๋“ฑ์œผ๋กœ ์ธํ•ด ํƒ€ ํ”„๋กœ์„ธ์Šค์— ์˜ํ–ฅ์„ ์ฃผ๊ฒŒ ๋œ๋‹ค.

 

10. dev/prod parity

development, staging, production ํ™˜๊ฒฝ์„ ์ตœ๋Œ€ํ•œ ๋น„์Šทํ•˜๊ฒŒ ์œ ์ง€ํ•œ๋‹ค. SaaS ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์€ ๊ฐœ๋ฐœ ํ™˜๊ฒฝ๊ณผ production ํ™˜๊ฒฝ์˜ ์ฐจ์ด๋ฅผ ์ž‘๊ฒŒ ์œ ์ง€ํ•˜์—ฌ ์ง€์†์ ์ธ ๋ฐฐํฌ๊ฐ€ ๊ฐ€๋Šฅํ•˜๋„๋ก ๋””์ž์ธ๋˜์–ด์•ผ ํ•œ๋‹ค.

์ค€์ˆ˜ ๋ฐฉ๋ฒ•

  • ์‹œ๊ฐ„์˜ ์ฐจ์ด๋ฅผ ์ตœ์†Œํ™”: ๊ฐœ๋ฐœ์ž๊ฐ€ ์ž‘์„ฑํ•œ ์ฝ”๋“œ๋Š” ๋ช‡ ์‹œ๊ฐ„ ๋˜๋Š” ๋ช‡ ๋ถ„ ํ›„์— ๋ฐฐํฌ๋˜์–ด์•ผ ํ•จ
  • ๋‹ด๋‹น์ž์˜ ์ฐจ์ด๋ฅผ ์ตœ์†Œํ™”: ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•œ ๊ฐœ๋ฐœ์ž๋“ค์ด ๋ฐฐํฌ์™€ production์—์„œ์˜ ๋ชจ๋‹ˆํ„ฐ๋ง์— ๊นŠ๊ฒŒ ๊ด€์—ฌํ•จ
  • ํˆด์˜ ์ฐจ์ด๋ฅผ ์ตœ์†Œํ™”: ๊ฐœ๋ฐœ๊ณผ production ํ™˜๊ฒฝ์„ ์ตœ๋Œ€ํ•œ ๋น„์Šทํ•˜๊ฒŒ ์œ ์ง€

 

11. Logs

๋กœ๊ทธ๋ฅผ ์ด๋ฒคํŠธ ์ŠคํŠธ๋ฆผ์œผ๋กœ ์ทจ๊ธ‰ํ•˜์—ฌ ๋กœ๊ทธ๋ฅผ ๋กœ์ปฌ์— ์ €์žฅํ•˜์ง€ ์•Š๋Š”๋‹ค. SaaS๋Š” ์–ธ์ œ๋“ ์ง€ ์ธ์Šคํ„ด์Šค๊ฐ€ ์ƒ์„ฑ/์‚ญ์ œ๋  ์ˆ˜ ์žˆ๋‹ค. ์ด๋•Œ ๋กœ์ปฌ์— ์ €์žฅ๋œ ๋กœ๊ทธ๋Š” ์ดˆ๊ธฐํ™”๋˜๊ธฐ ๋•Œ๋ฌธ์— ๋กœ๊ทธ๋Š” ์ŠคํŠธ๋ฆผ์œผ๋กœ ์ทจ๊ธ‰ํ•˜์—ฌ ๋ณ„๋„์˜ ์ €์žฅ์†Œ์— ๋ณด๊ด€ํ•ด์•ผ ํ•œ๋‹ค.

์ค€์ˆ˜ ๋ฐฉ๋ฒ•

  • ์ŠคํŠธ๋ฆผ์„ ๋ฒ„ํผ๋ง ์—†์ด stdout, stderr ๋กœ ์ถœ๋ ฅํ•จ
  • ๋ณ„๋„์˜ ๋กœ๊ทธ ์ €์žฅ์†Œ๋ฅผ ์‚ฌ์šฉ

 

12. Admin Process

admin/maintenance ์ž‘์—…์„ ์ผํšŒ์„ฑ ํ”„๋กœ์„ธ์Šค๋กœ ์‹คํ–‰ํ•ด์•ผ ํ•œ๋‹ค.

์ผํšŒ์„ฑ ํ”„๋กœ์„ธ์Šค

  • ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜
  • ์ผํšŒ์„ฑ ์Šคํฌ๋ฆฝํŠธ ์‹คํ–‰

์ค€์ˆ˜ ๋ฐฉ๋ฒ•

  • ๊ด€๋ฆฌ/์œ ์ง€๋ณด์ˆ˜ ์ž‘์—…์€ release์™€ ํ•จ๊ป˜ ์‹คํ–‰
  • release์™€ ๋™์ผํ•œ ํ™˜๊ฒฝ์—์„œ ์‹คํ–‰ํ•˜๊ณ , ๊ฐ™์€ ์ฝ”๋“œ ๋ฒ ์ด์Šค์™€ config๋ฅผ ์‚ฌ์šฉ
  • admin ์ฝ”๋“œ๋Š” ๋™๊ธฐํ™” ๋ฌธ์ œ๋ฅผ ํ”ผํ•˜๊ธฐ ์œ„ํ•ด ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ฝ”๋“œ์™€ ํ•จ๊ป˜ ๋ฐฐํฌ

Monolith VS Microservice Architecture

๋ชจ๋†€๋ฆฌ์‹ ์•„ํ‚คํ…์ฒ˜ (Monolithic Architecture)

์žฅ์ 

1. ์–ด๋–ค ๊ธฐ๋Šฅ(์„œ๋น„์Šค)์ด๋“ ์ง€ ๊ฐœ๋ฐœ๋˜์–ด์žˆ๋Š” ํ™˜๊ฒฝ์ด ๊ฐ™์•„์„œ ๋ณต์žกํ•˜์ง€์•Š๋‹ค.

2. ์‰ฝ๊ฒŒ ๊ณ ๊ฐ€์šฉ์„ฑ ์„œ๋ฒ„ ํ™˜๊ฒฝ์„ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋‹ค. ( ๊ฐ™์€ ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์œผ๋กœ ํ•˜๋‚˜๋” ๋งŒ๋“ค๋ฉด ๋จ)

3. End-to-End ํ…Œ์ŠคํŠธ๊ฐ€ ์šฉ์ดํ•˜๋‹ค. (MSA์˜ ๊ฒฝ์šฐ ํ…Œ์ŠคํŠธ์— ํ•„์š”ํ•œ ์„œ๋น„์Šค๋“ค์„ ๋ชจ๋‘ ๋™์ž‘์‹œ์ผœ์•ผํ•จ)

๋‹จ์ 

1. ํ•œ ํ”„๋กœ์ ํŠธ์˜ ๋ฉ์น˜๊ฐ€ ๋„ˆ๋ฌด ์ปค์ ธ์„œ ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ตฌ๋™์‹œ๊ฐ„์ด ๋Š˜์–ด๋‚˜๊ณ  ๋นŒ๋“œ,๋ฐฐํฌ ์‹œ๊ฐ„๋„ ๊ธธ์–ด์ง„๋‹ค.

2. ์กฐ๊ทธ๋งˆํ•œ ์ˆ˜์ •์‚ฌํ•ญ์ด ์žˆ์–ด๋„ ์ „์ฒด๋ฅผ ๋‹ค์‹œ ๋นŒ๋“œํ•˜๊ณ  ๋ฐฐํฌ๋ฅผ ํ•ด์•ผํ•œ๋‹ค.

3. ๋งŽ์€ ์–‘์˜ ์ฝ”๋“œ๊ฐ€ ๋ชฐ๋ ค์žˆ์–ด ๊ฐœ๋ฐœ์ž๊ฐ€ ๋ชจ๋‘๋ฅผ ์ดํ•ด ํ•  ์ˆ˜ ์—†๊ณ  ์œ ์ง€๋ณด์ˆ˜๋„ ํž˜๋“ค๋‹ค.

4. ์ผ๋ถ€๋ถ„์˜ ์˜ค๋ฅ˜๊ฐ€ ์ „์ฒด์— ์˜ํ–ฅ์„ ๋ฏธ์นœ๋‹ค.

5. ๊ธฐ๋Šฅ๋ณ„๋กœ ์•Œ๋งž๋Š” ๊ธฐ์ˆ , ์–ธ์–ด, ํ”„๋ ˆ์ž„์›Œํฌ๋ฅผ ์„ ํƒํ•˜๊ธฐ๊ฐ€ ๊นŒ๋‹ค๋กญ๋‹ค.

Micro service architecture

์žฅ์ 

1. ๊ธฐ๋Šฅ๋ณ„๋กœ ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค๋ฅผ ๊ฐœ๋ฐœํ•˜๊ณ , ์ž‘์—… ํ• ๋‹น์„ ์„œ๋น„์Šค ๋‹จ์œ„๋กœ ํ•˜๋ฉด ๊ฐœ๋ฐœ์ž๊ฐ€ ํ•ด๋‹น ๋ถ€๋ถ„์„ ์˜จ์ „ํžˆ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋‹ค.

2. ์ƒˆ๋กœ ์ถ”๊ฐ€๋˜๊ฑฐ๋‚˜ ์ˆ˜์ •์‚ฌํ•ญ์ด ์žˆ๋Š” ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค๋งŒ ๋น ๋ฅด๊ฒŒ ๋นŒ๋“œ, ๋ฐฐํฌ๊ฐ€ ๊ฐ€๋Šฅํ•˜๋‹ค.

3. ํ•ด๋‹น ๊ธฐ๋Šฅ์— ๋งž๋Š” ๊ธฐ์ˆ , ์–ธ์–ด ๋“ฑ์„ ์„ ํƒํ•˜์—ฌ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

4. ์ผ๋ถ€๋ถ„์˜ ์˜ค๋ฅ˜๊ฐ€ ์žˆ์œผ๋ฉด ํ•ด๋‹น ๊ธฐ๋Šฅ์—๋งŒ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•˜๊ณ  ๊ทธ ๋ถ€๋ถ„๋งŒ ๋น ๋ฅด๊ฒŒ ๊ณ ์ณ์„œ ์ •์ƒํ™”๊ฐ€ ๊ฐ€๋Šฅํ•˜๋‹ค.

 

๋‹จ์ 

1. ๊ด€๋ฆฌ๊ฐ€ ํž˜๋“ค๋‹ค. ์ž‘์€ ์—ฌ๋Ÿฌ ์„œ๋น„์Šค๋“ค์ด ๋ถ„์‚ฐ๋˜์–ด์žˆ๊ธฐ ๋•Œ๋ฌธ์— ๋ชจ๋‹ˆํ„ฐ๋ง์ด ํž˜๋“ค๋‹ค.

2. ๊ฐœ๋ฐœ์˜ ๊นŒ๋‹ค๋กœ์›€. ์„œ๋กœ๋ฅผ ํ˜ธ์ถœํ•˜์—ฌ ์ „์ฒด ์„œ๋น„์Šค๊ฐ€ ์ด๋ฃจ์–ด์ง€๊ธฐ ๋•Œ๋ฌธ์— ๋ฌด์กฐ๊ฑด ๋‹ค๋ฅธ ์„œ๋น„์Šค๋ฅผ ํ˜ธ์ถœํ•˜๋Š” ์ฝ”๋“œ๊ฐ€ ์ถ”๊ฐ€๋œ๋‹ค. 

3. ํ†ต์‹ ๊ด€๋ จ ์˜ค๋ฅ˜๊ฐ€ ์žฆ์„ ์ˆ˜ ์žˆ๋‹ค. ๋งˆ์ดํฌ๋กœ ์„œ๋น„์Šค๋“ค ๋ผ๋ฆฌ ๊ณ„์† ์„œ๋กœ ํ†ต์‹ ์„ ํ•˜๋‹ค๋ณด๋‹ˆ ๋ชจ๋†€๋ฆฌ์‹ ์•„ํ‚คํ…์ณ์— ๋น„ํ•ด ํ†ต์‹ ๊ด€๋ จ ์˜ค๋ฅ˜๊ฐ€ ์žฆ์•˜๋‹ค.

4. ํ…Œ์ŠคํŠธ๊ฐ€ ๋ถˆํŽธํ•˜๋‹ค. ์˜ˆ๋กœ End-to-End ํ…Œ์ŠคํŠธ๋ฅผ ์œ„ํ•ด UI, Gateway ๋“ฑ๋“ฑ ์—ฌ๋Ÿฌ๊ฐœ์˜ ๋งˆ์ดํฌ๋กœ ์„œ๋น„์Šค๋ฅผ ๊ตฌ๋™์‹œ์ผœ์•ผ ํ–ˆ์—ˆ๋‹ค. 

 

 

Everything should be a microservice

 


SOA์™€ MSA

  • SOA(Service Oriented Architecture)
    • SOA๋Š” ์„œ๋น„์Šค ๋‹จ์œ„๋กœ ๊ฐœ๋ฐœ์„ ํ•˜๊ณ , ๊ฐœ๋ฐœ๋œ ์„œ๋น„์Šค๋“ค์„ ๊ณต์œ ํ•จ์œผ๋กœ์จ ์žฌ๊ฐ€์šฉ์„ฑ์„ ๋Š˜๋ฆฌ๊ณ  ์œ ์—ฐ์„ฑ์„ ํ™•๋ณดํ•˜๋Š” ๊ฒƒ์„ ๋ชฉํ‘œ๋กœ ํ•œ๋‹ค.
  • MSA(Microservice Architecture)
    • MSA ๋˜ํ•œ ์•„์ฃผ ์ž‘์€ ๋‹จ์œ„์˜ ์„œ๋น„์Šค๋กœ ์†Œํ”„ํŠธ์›จ์–ด๋ฅผ ๊ตฌ์„ฑํ•จ์œผ๋กœ์จ ๋ฏผ์ฒฉํ•˜๊ณ  ์œ ์—ฐํ•œ ์„ค๊ณ„๋ฅผ ํ•  ์ˆ˜ ์žˆ๋„๋กํ•œ๋‹ค.
  • ์žฌ๊ฐ€์šฉ์„ฑ

SOA๋Š” ์„œ๋น„์Šค๋ฅผ ๊ฐœ๋ฐœํ•˜๊ณ , ์ด๋ฅผ ์ตœ๋Œ€ํ•œ ์žฌ๊ฐ€์šฉํ•œ๋‹ค. ์˜ˆ๋ฅผ ๋“ค๋ฉด, A ํŒ€๊ณผ ๊ทธ ์˜†์˜ B ํŒ€์ด ์žˆ์„ ๋•Œ, A์—์„œ ๊ฐœ๋ฐœํ•œ ์„œ๋น„์Šค a๋ฅผ B์—์„œ๋„ ๊ทธ๋Œ€๋กœ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด๋‹ค. ์ด๋กœ์จ ๊ฐœ๋ฐœ๋œ ์„œ๋น„์Šค ๋‹จ์œ„๋กœ ์žฌ๊ฐ€์šฉ์„ฑ์„ ๋Š˜๋ฆฌ๊ณ , ํ•„์š”์— ๋”ฐ๋ผ ์œ ์—ฐํ•˜๊ฒŒ ์‚ฌ์šฉํ•จ์œผ๋กœ์จ ํšจ์œจ์„ฑ์„ ์ฆ์ง„์‹œํ‚ฌ ์ˆ˜ ์žˆ๋‹ค.

ํ•˜์ง€๋งŒ MSA๋Š” ์„œ๋น„์Šค๊ฐ€ ๊ณต์œ ๋˜๊ธฐ๋ณด๋‹ค ๋…๋ฆฝ์ ์œผ๋กœ ์‹คํ–‰๋˜๋Š” ๊ฒƒ์„ ์ง€ํ–ฅํ•œ๋‹ค.

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

(SOA์—์„œ ์–ธ๊ธ‰๋˜๋Š” ์„œ๋น„์Šค๋ณด๋‹ค ์ž‘์€ ์•„์ฃผ ์ž‘์€ ์„œ๋น„์Šค์ด๊ธฐ ๋•Œ๋ฌธ์—)

  • ์„œ๋น„์Šค๊ฐ„ ํ†ต์‹  ๋ฐฉ์‹

์„œ๋น„์Šค๊ฐ„ ํ†ต์‹  ๋ฐฉ์‹์ด๋‹ค.

SOA๋Š” SOAP, WSDL, UDDI, ESB ๋“ฑ ์„œ๋น„์Šค๊ฐ„ ํ†ตํ•ฉ์ ์ด๊ณ  ๊ณตํ†ต์ ์ธ ๋ฐฉ์‹์œผ๋กœ ๊ตฌ์„ฑ๋˜๊ณ  ํ†ต์‹ ํ•œ๋‹ค. ๊ทธ๋ž˜์„œ ์„œ๋น„์Šค๊ฐ„ ๊ฒฐํ•ฉ๋„๊ฐ€ ์ฆ๊ฐ€ํ•œ๋‹ค.

ํ•˜์ง€๋งŒ MSA๋Š” Restful API ๋ฐฉ์‹์œผ๋กœ ์„œ๋น„์Šค ์ œ๊ณต์ž๊ฐ€ ์™ธ๋ถ€๋กœ ๋‚˜ํƒ€๋‚ธ API๋ฅผ ํ†ตํ•ด ํ†ต์‹ ํ•œ๋‹ค. ๋”ฐ๋ผ์„œ ์„œ๋น„์Šค๊ฐ„ ๊ฒฐํ•ฉ์—†์ด ๋…๋ฆฝ์ ์ธ ํ™˜๊ฒฝ๊ณผ ํ†ต์‹ ์ด ๊ฐ€๋Šฅํ•˜๋‹ค.

 

 

RESTful API 

REST์˜ ํŠน์ง•์„ ๊ธฐ๋ฐ˜์œผ๋กœ ์„œ๋น„์Šค API๋ฅผ ๊ตฌํ˜„ํ•œ๊ฒƒ

REST API์˜ ๊ฐ€์žฅ ํฐ ํŠน์ง•์€ ๊ฐ ์š”์ฒญ์ด ์–ด๋–ค ๋™์ž‘์ด๋‚˜ ์ •๋ณด๋ฅผ ์œ„ํ•œ ๊ฒƒ์ธ์ง€๋ฅผ ๊ทธ ์š”์ฒญ์˜ ๋ชจ์Šต ์ž์ฒด๋กœ ์ถ”๋ก ์ด ๊ฐ€๋Šฅํ•œ ๊ฒƒ.

 


Service Mesh Capabilities

  1. MicroService Architecture๋ฅผ ์ ์šฉํ•œ ์‹œ์Šคํ…œ์˜ ๋‚ด๋ถ€ ํ†ต์‹ ์ด Mesh ๋„คํŠธ์›Œํฌ์˜ ํ˜•ํƒœ๋ฅผ ๋„๋Š” ๊ฒƒ์— ๋น—๋Œ€์–ด Service Mesh๋กœ ๋ช…๋ช…๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
  2. Service Mesh ๋Š” ์„œ๋น„์Šค ๊ฐ„ ํ†ต์‹ ์„ ์ถ”์ƒํ™”ํ•˜์—ฌ ์•ˆ์ „ํ•˜๊ณ , ๋น ๋ฅด๊ณ , ์‹ ๋ขฐํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋งŒ๋“œ๋Š” ์ „์šฉ InfraStructure Layer์ž…๋‹ˆ๋‹ค.
    ์ถ”์ƒํ™”๋ฅผ ํ†ตํ•ด ๋ณต์žกํ•œ ๋‚ด๋ถ€ ๋„คํŠธ์›Œํฌ๋ฅผ ์ œ์–ดํ•˜๊ณ , ์ถ”์ ํ•˜๊ณ , ๋‚ด๋ถ€ ๋„คํŠธ์›Œํฌ ๊ด€๋ จ ๋กœ์ง์„ ์ถ”๊ฐ€ํ•จ์œผ๋กœ์จ ์•ˆ์ •์„ฑ, ์‹ ๋ขฐ์„ฑ, ํƒ„๋ ฅ์„ฑ, ํ‘œ์ค€ํ™”, ๊ฐ€์‹œ์„ฑ, ๋ณด์•ˆ์„ฑ ๋“ฑ์„ ํ™•๋ณดํ•ฉ๋‹ˆ๋‹ค.
  3. Service Mesh ๋Š” URL ๊ฒฝ๋กœ, ํ˜ธ์ŠคํŠธ ํ—ค๋”, API ๋ฒ„์ „ ๋˜๋Š” ๊ธฐํƒ€ ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ ์ˆ˜์ค€ ๊ทœ์น™์„ ๊ธฐ๋ฐ˜์œผ๋กœํ•˜๋Š” ๊ณ„์ธต 7 ๋„คํŠธ์›Œํฌ Layer ์ž…๋‹ˆ๋‹ค.
    Service Mesh ์˜ ๊ตฌํ˜„์ฒด์ธ ๊ฒฝ๋Ÿ‰ํ™” Proxy๋ฅผ ํ†ตํ•ด ๋‹ค์–‘ํ•œ Routing Rules, circuit breaker ๋“ฑ ๊ณตํ†ต๊ธฐ๋Šฅ์„ ์„ค์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋Š” ์„œ๋น„์Šค ๊ฐ„ ํ†ต์‹ ์— ์—ฐ๊ด€๋œ ๊ธฐ๋Šฅ ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ, ์„œ๋น„์Šค์˜ ๋ฐฐํฌ ์ „๋žต์—๋„ ๋„์›€์„ ์ค๋‹ˆ๋‹ค.

์™œ Service Mesh ๋ฅผ ์ ์šฉํ•˜๋Š”๊ฐ€?

Service Mesh ๊ฐ€ ๋– ์˜ค๋ฅด๋Š” ์ด์œ ๋Š” ๋ฌด์—‡์ผ๊นŒ์š” ?

MicroService Architecture๋Š” Monolitic Architecture์˜ ๋‹จ์  ๊ทน๋ณต๊ณผ Cloud ํ™˜๊ฒฝ์—์„œ ์‹œ์Šคํ…œ์„ ์šด์˜ํ•  ๋•Œ์˜ ์ด์ ์„ ๊ทน๋Œ€ํ™”ํ•˜๊ธฐ ์œ„ํ•ด ๋งŽ์ด ์‚ฌ์šฉ๋˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

์ด๋ฅผ ํ†ตํ•ด ๋งŽ์€ ๋ฌธ์ œ๋“ค์ด ํ•ด๊ฒฐ๋˜์—ˆ์ง€๋งŒ, ๋˜๋‹ค๋ฅธ ๋ฌธ์ œ์ ๋„ ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๊ฒƒ์€ ์‹œ์Šคํ…œ์˜ ๋Ÿฐํƒ€์ž„ ๋ณต์žก์„ฑ ์ž…๋‹ˆ๋‹ค.

https://medium.com/dtevangelist/service-mesh-%EB%9E%80-8dfafb56fc07

 

Service Mesh ๋ž€?

์ˆ˜๋…„๊ฐ„ Enterprise ITํ™˜๊ฒฝ์€ ๊ธ‰๊ฒฉํ•˜๊ฒŒ ๋ณ€ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ํŠนํžˆ Cloud๋กœ ๋Œ€๋ณ€๋˜๋Š” ์‹œ์Šคํ…œ ๊ตฌ์ถ• ํ™˜๊ฒฝ์˜ ๋ณ€ํ™”์— ๋”ฐ๋ผ ์ด๋ฅผ ์ž˜ ํ™œ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๋‹ค์–‘ํ•œ Architecture๋“ค์ด ๋Œ€๋‘๋˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

medium.com

 

Service Mesh ๊ตฌํ˜„

Service Mesh Architecture์˜ ๊ตฌํ˜„์€ ๋ณดํ†ต ์„œ๋น„์Šค์˜ ์•ž๋‹จ์— ๊ฒฝ๋Ÿ‰ํ™” ํ”„๋ก์‹œ๋ฅผ ์‚ฌ์ด๋“œ์นด ํŒจํ„ด์œผ๋กœ ๋ฐฐ์น˜ํ•˜์—ฌ ์„œ๋น„์Šค ๊ฐ„ ํ†ต์‹ ์„ ์ œ์–ดํ•˜๋Š” ๋ฐฉ๋ฒ•์œผ๋กœ ๊ตฌํ˜„ํ•ฉ๋‹ˆ๋‹ค.

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

 

 


Spring Cloud

 

Spring boot + Spring Cloud 

 

 

์ถœ์ฒ˜ : ์ธํ”„๋Ÿฐ - Spring Cloud๋กœ ๊ฐœ๋ฐœํ•˜๋Š” ๋งˆ์ดํฌ๋กœ ์„œ๋น„์Šค ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜(MSA)

728x90