๋Œ€๊ทœ๋ชจ ํŠธ๋ž˜ํ”ฝ์„ ๊ฐ๋‹นํ•˜๋Š” MSA ํ‹ฐ์ผ“ ์˜ˆ๋งค ์•„ํ‚คํ…์ฒ˜ ์„ค๊ณ„

2026. 1. 9. 01:38ยทโš™๏ธ ์ธํ”„๋ผ(Devops)
728x90

๐Ÿ“Œ ์‹œ์Šคํ…œ ๊ตฌ์„ฑ ๊ฐœ์š”

๋ณธ ๋ฌธ์„œ๋Š” ๋Œ€๊ทœ๋ชจ ๋™์‹œ ์ ‘์† ํ™˜๊ฒฝ์—์„œ๋„ ํ‹ฐ์ผ“ ์˜ˆ๋งค ์„œ๋น„์Šค(WAS)๊ฐ€ ์•ˆ์ •์ ์œผ๋กœ ๋™์ž‘ํ•˜๋„๋ก ๋ณดํ˜ธํ•˜๊ธฐ ์œ„ํ•œ

๋ชจ์˜ ํ‹ฐ์ผ“ํŒ… ์‹œ๋ฎฌ๋ ˆ์ด์…˜ ์‹œ์Šคํ…œ์˜ ํ•ต์‹ฌ ๊ตฌ์„ฑ ์š”์†Œ์™€ ์—ญํ• ์„ ์ •๋ฆฌํ•œ๋‹ค.

 


๐ŸŽฏ ํ•ต์‹ฌ ๋ชฉํ‘œ

  • 1์ฐจ ๋ชฉํ‘œ : ๋ถ€์ŠคํŠธ์บ ํผ 100~200๋ช…์„ ๋Œ€์ƒ์œผ๋กœ ๋™์‹œ ํ‹ฐ์ผ“ํŒ… ์˜ˆ๋งค๋ฅผ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋Š” ์„œ๋น„์Šค ๋งŒ๋“ค๊ธฐ
  • 2์ฐจ ๋ชฉํ‘œ : ์ˆ˜์‹ญ๋งŒ๋ช… ๋‹จ์œ„ ๋Œ€๊ทœ๋ชจ ํŠธ๋ž˜ํ”ฝ์„ ๊ฐ๋‹นํ•  ์ˆ˜ ์žˆ๋Š” ํ‹ฐ์ผ“ํŒ… ์˜ˆ๋งค ์„œ๋น„์Šค ๋งŒ๋“ค๊ธฐ
    • ๊ตญ๋‚ด ํ‹ฐ์ผ“ ์˜ˆ๋งค ์„œ๋น„์Šค์˜ “ํŠธ๋ž˜ํ”ฝ ํ”ผํฌ(๋™์‹œ์ ‘์†์ž ์ˆ˜)” ๊ทœ๋ชจ๋ฅผ ๋ณด๋ฉด ์ธ๊ธฐ ๊ณต์—ฐ์˜ ๊ฒฝ์šฐ์—๋Š” ์ˆ˜์‹ญ๋งŒ ๋ช… ๋‹จ์œ„์˜ ์ ‘์†์ด ๋ชฐ๋ฆฌ๋Š” ๊ฒƒ์œผ๋กœ ์˜ˆ์ƒ
  • WAS๊ฐ€ ์ ˆ๋Œ€ ํ„ฐ์ง€์ง€ ์•Š๋„๋ก ๋ณดํ˜ธ
  • ํ•œ์ •๋œ ์ž์› ๋‚ด์—์„œ ์ตœ๋Œ€ ๋™์‹œ ์‚ฌ์šฉ์ž ์ˆ˜์šฉ
  • ์‹ค์ œ ํ‹ฐ์ผ“ํŒ… ํ™˜๊ฒฝ๊ณผ ์œ ์‚ฌํ•œ ํ๋ฆ„ ์ œ๊ณต

 

 

๊ตฌ์„ฑ์š”์†Œ

  • frontend : ํ”„๋ก ํŠธ์—”๋“œ
  • ticket-backend : ํ‹ฐ์ผ“ ์˜ˆ๋งค ๋ฐฑ์—”๋“œ ์„œ๋น„์Šค
  • queue-backend : ๋Œ€๊ธฐ์—ด ๋ฐฑ์—”๋“œ ์„œ๋น„์Šค
  • backend : ์ผ๋ฐ˜ API ์„œ๋ฒ„

1. ๋ธŒ๋ผ์šฐ์ € (Client)

๋ณธ ์„œ๋น„์Šค์— ์ ‘์†ํ•œ ์‚ฌ์šฉ์ž

  • ์›น์„œ๋ฒ„(WS)๋กœ๋ถ€ํ„ฐ HTML / CSS / JS ๋ฒˆ๋“ค์„ ์ˆ˜์‹ 
  • ์ดํ›„ ๋ชจ๋“  ํ™”๋ฉด์€ CSR(Client-Side Rendering) ๋ฐฉ์‹์œผ๋กœ ๋ Œ๋”๋ง
  • API ์š”์ฒญ์€ ์ง์ ‘ WAS ๋˜๋Š” ๋ฐฑ์—”๋“œ ์„œ๋ฒ„๋กœ ์ „์†ก

2. ์›น์„œ๋ฒ„ (WS)

SPA + CSR ๊ตฌ์กฐ์˜ ์ •์  ๋ฆฌ์†Œ์Šค ์ œ๊ณต ์„œ๋ฒ„

  • ์ตœ์ดˆ ์ง„์ž… ์‹œ HTML / CSS / JS ๋ฒˆ๋“ค ์ œ๊ณต
  • ์ •์  ๋ฆฌ์†Œ์Šค ์„œ๋น™์— ์ง‘์ค‘ํ•˜์—ฌ ์„œ๋ฒ„ ๋ถ€ํ•˜ ์ตœ์†Œํ™”
  • ๋Ÿฐํƒ€์ž„ SSR์€ ์ง€์–‘
  • ๋ฐ๋ชจ ๋‹จ๊ณ„์—์„œ๋Š” React ์‚ฌ์šฉ
  • ํ–ฅํ›„ ํ™•์žฅ ์‹œ Next.js์˜ SSG / ISR ๋„์ž… ๊ฐ€๋Šฅ

3. ๋Œ€๊ธฐ์—ด ์„œ๋ฒ„ (Queue Server)

ํ‹ฐ์ผ“ ์˜ˆ๋งค ์„œ๋น„์Šค(WAS)๋กœ ์œ ์ž…๋˜๋Š” ์‚ฌ์šฉ์ž๋ฅผ ์ œ์–ดํ•˜๋Š” ๊ด€๋ฌธ(Gate)

์—ญํ• 

  • WAS๋กœ ์ง„์ž… ๊ฐ€๋Šฅํ•œ ์‚ฌ์šฉ์ž ์ˆ˜๋ฅผ ์ •ํ™•ํžˆ ์ œํ•œ
  • ์‚ฌ์šฉ์ž์—๊ฒŒ ํ™œ์„ฑ ํ† ํฐ(Active Token) ๋ฐœ๊ธ‰
  • ๋Œ€๊ธฐ์—ด ์Šค์ผ€์ค„๋ง ์ˆ˜ํ–‰

๋‚ด๋ถ€ ํ ๊ตฌ์กฐ(Redis)

  • ๋Œ€๊ธฐ ํ (Waiting Queue)
    • ์•„์ง ์˜ˆ๋งค๊ฐ€ ๋ถˆ๊ฐ€๋Šฅํ•œ ์‚ฌ์šฉ์ž
  • ํ™œ์„ฑ ํ (Active Queue)
    • ํ˜„์žฌ ์˜ˆ๋งค๋ฅผ ์ง„ํ–‰ ์ค‘์ธ ์‚ฌ์šฉ์ž
    • WAS๊ฐ€ ๋™์‹œ์— ์ฒ˜๋ฆฌํ•˜๋Š” ์‚ฌ์šฉ์ž ์ˆ˜์™€ ๋Œ€์‘

ํ™œ์„ฑ ํ๋ฅผ ๋ณ„๋„๋กœ ๋‘๋Š” ์ด์œ ๋Š”

  • "์˜ˆ๋งค ์ค‘์ธ ์‚ฌ์šฉ์ž ์ˆ˜๋ฅผ ์ •ํ™•ํžˆ ์ œํ•œ"ํ•˜๊ธฐ ์œ„ํ•จ์ด๋‹ค.

๋„์ž… ๋ชฉ์ 

  • ์ˆœ๊ฐ„์ ์ธ ๋Œ€๋Ÿ‰ ํŠธ๋ž˜ํ”ฝ์œผ๋กœ ์ธํ•œ WAS ๊ณผ๋ถ€ํ•˜ ๋ฐฉ์ง€
  • ๋„คํŠธ์›Œํฌ ์š”์ฒญ ์œ ์‹ค ๋ฐ ํƒ€์ž„์•„์›ƒ ๋ฌธ์ œ ์˜ˆ๋ฐฉ
  • ์„œ๋ฒ„ ์ฒ˜๋ฆฌ ๊ฐ€๋Šฅ ๋ฒ”์œ„๋ฅผ ์ดˆ๊ณผํ•œ ์š”์ฒญ์„ ๋ฌด์งˆ์„œํ•˜๊ฒŒ ํ˜๋ ค๋ณด๋‚ด์ง€ ์•Š๊ธฐ ์œ„ํ•จ

4. ํ‹ฐ์ผ“ ์˜ˆ๋งค ์„œ๋น„์Šค (WAS)

์‹ค์ œ "์˜ˆ๋งค"์™€ ์ง์ ‘์ ์œผ๋กœ ์—ฐ๊ด€๋œ ์š”์ฒญ๋งŒ ์ฒ˜๋ฆฌํ•˜๋Š” ํ•ต์‹ฌ ์„œ๋น„์Šค

  • ํ™œ์„ฑ ํ† ํฐ์˜ ์œ ํšจ์„ฑ ๊ฒ€์ฆ
  • ์ขŒ์„ ์„ ํƒ, ์˜ˆ๋งค์ž ์ •๋ณด ์ž…๋ ฅ, ๊ฒฐ์ œ API ์ฒ˜๋ฆฌ
  • ๊ฐ•ํ•œ ํŠธ๋žœ์žญ์…˜ ์ •ํ•ฉ์„ฑ ์š”๊ตฌ

WAS๋Š” ๋Œ€๊ธฐ์—ด ์„œ๋ฒ„๋ฅผ ํ†ต๊ณผํ•œ ์‚ฌ์šฉ์ž๋งŒ ์ ‘๊ทผ ๊ฐ€๋Šฅํ•˜๋„๋ก ์„ค๊ณ„๋จ

5. ์ผ๋ฐ˜ ๋ฐฑ์—”๋“œ ์„œ๋ฒ„

์˜ˆ๋งค์™€ ์ง์ ‘ ๊ด€๋ จ ์—†๋Š” ๊ธฐ๋Šฅ ์ฒ˜๋ฆฌ

  • ๊ณต์—ฐ ๋ชฉ๋ก ์กฐํšŒ
  • ์ฑ„ํŒ…, ์•Œ๋ฆผ, ๊ธฐํƒ€ ์ผ๋ฐ˜ API
  • ์˜ˆ๋งค ์„œ๋น„์Šค์™€ ๋ถ„๋ฆฌํ•˜์—ฌ ์žฅ์•  ์ „ํŒŒ ์ตœ์†Œํ™”

6. Redis Pub/Sub

๋Œ€๊ธฐ์—ด ์„œ๋ฒ„ ↔ ํ‹ฐ์ผ“ ์˜ˆ๋งค ์„œ๋น„์Šค(WAS) ๊ฐ„ ์ด๋ฒคํŠธ ์ „๋‹ฌ ์ˆ˜๋‹จ

  • ์˜ˆ๋งค ์™„๋ฃŒ ์‹œ BOOKING_DONE ์ด๋ฒคํŠธ ๋ฐœํ–‰
  • ๋Œ€๊ธฐ์—ด ์„œ๋ฒ„๋Š” ์ด๋ฒคํŠธ ์ˆ˜์‹  ํ›„:
    • ํ™œ์„ฑ ํ์—์„œ ์‚ฌ์šฉ์ž ์ œ๊ฑฐ
    • ๋‹ค์Œ ๋Œ€๊ธฐ ์‚ฌ์šฉ์ž๋ฅผ ํ™œ์„ฑ ํ๋กœ ์ด๋™

์ด๋ฅผ ํ†ตํ•ด ์‹ค์ œ ์ฒ˜๋ฆฌ ์™„๋ฃŒ ์‹œ์  ๊ธฐ์ค€์œผ๋กœ

์ƒˆ๋กœ์šด ์‚ฌ์šฉ์ž๋ฅผ ์ •ํ™•ํžˆ ์ˆ˜์šฉํ•  ์ˆ˜ ์žˆ์Œ

7. Redis

ํ‹ฐ์ผ“ ์˜ˆ๋งค ์„œ๋น„์Šค(WAS)๊ฐ€ ๋น ๋ฅธ ํ‹ฐ์ผ“ ์˜ˆ๋งค ์ฒ˜๋ฆฌ๋ฅผ ์œ„ํ•ด ์‚ฌ์šฉํ•˜๋Š” ์ธ๋ฉ”๋ชจ๋ฆฌ DB

8. RDB

์ผ๋ฐ˜ ๋ฐฑ์—”๋“œ ์„œ๋ฒ„์—์„œ ์‚ฌ์šฉํ•˜๋Š” RDB

 

์ „์ฒด ํ๋ฆ„ ์š”์•ฝ

  1. ์‚ฌ์šฉ์ž๋Š” ์›น์„œ๋ฒ„(WS)์—์„œ ์ •์  ๋ฆฌ์†Œ์Šค๋ฅผ ๋‚ด๋ ค๋ฐ›์•„ ์„œ๋น„์Šค ์ง„์ž…
  2. ์˜ˆ๋งค ์‹œ๋„ ์‹œ ๋Œ€๊ธฐ์—ด ์„œ๋ฒ„๋กœ ์š”์ฒญ ์ด๋™
  3. ๋Œ€๊ธฐ์—ด ์„œ๋ฒ„์—์„œ ์ˆœ๋ฒˆ ๋Œ€๊ธฐ → ํ™œ์„ฑ ํ† ํฐ ๋ฐœ๊ธ‰
  4. ํ™œ์„ฑ ํ† ํฐ์„ ๊ฐ€์ง„ ์‚ฌ์šฉ์ž๋งŒ WAS ์ ‘๊ทผ ๊ฐ€๋Šฅ
  5. ์˜ˆ๋งค ์™„๋ฃŒ ์‹œ WAS → Redis Pub/Sub → ๋Œ€๊ธฐ์—ด ์„œ๋ฒ„๋กœ ์ด๋ฒคํŠธ ์ „๋‹ฌ
  6. ๋Œ€๊ธฐ์—ด ์„œ๋ฒ„๊ฐ€ ๋‹ค์Œ ์‚ฌ์šฉ์ž๋ฅผ ํ™œ์„ฑํ™”

 ์ฃผ์š” ๊ณ ๋ฏผ๊ณผ ์˜์‚ฌ๊ฒฐ์ • ์ •๋ฆฌ

๋Œ€๊ทœ๋ชจ ํ‹ฐ์ผ“ํŒ… ์‹œ์Šคํ…œ์—์„œ ๊ฐ€์žฅ ์ค‘์š”ํ•œ ๋ชฉํ‘œ๋Š” ๋‹จ์ˆœํ•˜๋‹ค.
“์•„๋ฌด๋ฆฌ ๋งŽ์€ ์‚ฌ์šฉ์ž๊ฐ€ ๋™์‹œ์— ๋ชฐ๋ ค๋„, ์˜ˆ๋งค ์„œ๋ฒ„(WAS)๋Š” ์ ˆ๋Œ€ ํ„ฐ์ง€์ง€ ์•Š๊ฒŒ ํ•˜๋Š” ๊ฒƒ”์ด๋‹ค.

์ด ๋ฌธ์„œ๋Š” ๋ชจ์˜ ํ‹ฐ์ผ“ํŒ… ์‹œ๋ฎฌ๋ ˆ์ด์…˜ ์‹œ์Šคํ…œ์„ ์„ค๊ณ„ํ•˜๋ฉด์„œ ๋งˆ์ฃผํ•œ ํ•ต์‹ฌ ์•„ํ‚คํ…์ฒ˜ ๊ณ ๋ฏผ ์ง€์ ๋“ค๊ณผ, ๊ฐ ์„ ํƒ์— ์ด๋ฅด๊ฒŒ ๋œ ํŒ๋‹จ ๊ณผ์ •์„ ์ •๋ฆฌํ•œ ๊ธ€์ด๋‹ค.


1. ๋Œ€๊ธฐ์—ด์„ WAS ๋‚ด๋ถ€์— ๋‘˜ ๊ฒƒ์ธ๊ฐ€, ์ „์šฉ ์„œ๋ฒ„๋กœ ๋ถ„๋ฆฌํ•  ๊ฒƒ์ธ๊ฐ€

๊ฐ€์žฅ ๋จผ์ € ๊ณ ๋ฏผํ•œ ๊ฒƒ์€ ๋Œ€๊ธฐ์—ด์˜ ์œ„์น˜์˜€๋‹ค.
๋Œ€๊ธฐ์—ด ๋กœ์ง์„ ํ‹ฐ์ผ“ ์˜ˆ๋งค ์„œ๋น„์Šค(WAS) ๋‚ด๋ถ€์— ํฌํ•จ์‹œํ‚ค๋Š” ๋ฐฉ์‹์€ ๊ตฌํ˜„์ด ๊ฐ„๋‹จํ•˜๊ณ  ๊ตฌ์กฐ๋„ ๋‹จ์ˆœํ•˜๋‹ค.
ํ•˜์ง€๋งŒ ์ด ๋ฐฉ์‹์—๋Š” ์น˜๋ช…์ ์ธ ๋ฌธ์ œ๊ฐ€ ์žˆ๋‹ค.

๋Œ€๊ธฐ์—ด๊ณผ ์˜ˆ๋งค ๋กœ์ง์ด CPU / ๋ฉ”๋ชจ๋ฆฌ ์ž์›์„ ๊ณต์œ ํ•˜๊ฒŒ ๋œ๋‹ค๋Š” ์ ์ด๋‹ค.
์ˆœ๊ฐ„์ ์œผ๋กœ ์˜ˆ๋งค ์š”์ฒญ์ด ํญ์ฆํ•˜๋Š” ์ƒํ™ฉ์—์„œ๋Š”, ์ •์ž‘ ํŠธ๋ž˜ํ”ฝ์„ ์ œ์–ดํ•ด์•ผ ํ•  ๋Œ€๊ธฐ์—ด ๋กœ์ง ์ž์ฒด๊ฐ€ ๊ณผ๋ถ€ํ•˜๋กœ ์ œ๋Œ€๋กœ ๋™์ž‘ํ•˜์ง€ ์•Š์„ ๊ฐ€๋Šฅ์„ฑ์ด ์ƒ๊ธด๋‹ค.

๋Œ€๊ธฐ์—ด์˜ ๋ณธ์งˆ์ ์ธ ์—ญํ• ์€ ํŠธ๋ž˜ํ”ฝ์„ ์ œ์–ดํ•˜๋Š” ๊ด€๋ฌธ(Gate) ์ด๋‹ค.
๊ทธ ๊ด€๋ฌธ์ด ๋ณดํ˜ธํ•ด์•ผ ํ•  ๋Œ€์ƒ(WAS)์˜ ๋ถ€ํ•˜์— ์˜ํ–ฅ์„ ๋ฐ›๋Š” ๊ตฌ์กฐ๋Š” ์—ญํ• ์ ์œผ๋กœ๋„ ๋งž์ง€ ์•Š๋‹ค๊ณ  ํŒ๋‹จํ–ˆ๋‹ค.

๊ฒฐ๋ก ์ ์œผ๋กœ ๋Œ€๊ธฐ์—ด์€

  • ํ•ญ์ƒ ์‚ด์•„ ์žˆ์–ด์•ผ ํ•˜๊ณ 
  • ์˜ˆ๋งค ํŠธ๋ž˜ํ”ฝ์˜ ์˜ํ–ฅ์„ ๋ฐ›์ง€ ์•Š์•„์•ผ ํ•˜๋Š” ์ œ์–ด ๊ณ„์ธต์ด๋ฏ€๋กœ

=> ํ‹ฐ์ผ“ ์˜ˆ๋งค ์„œ๋น„์Šค(WAS)์™€ ๋ฌผ๋ฆฌ์ ์œผ๋กœ ๋ถ„๋ฆฌ๋œ ์ „์šฉ ์„œ๋ฒ„๋กœ ๋‘๋Š” ๊ตฌ์กฐ๋ฅผ ์„ ํƒํ–ˆ๋‹ค.


2. ๋Œ€๊ธฐ์—ด Queue(Redis)์˜ ์œ„์น˜: WAS ์ง„์ž… ์ „ vs ์ง„์ž… ํ›„

๋‹ค์Œ ๊ณ ๋ฏผ์€ ๋Œ€๊ธฐ์—ด ํ๋ฅผ WAS ์•ž์— ๋‘˜ ๊ฒƒ์ธ๊ฐ€, ์•„๋‹ˆ๋ฉด ์ง„์ž… ํ›„์— ๋‘˜ ๊ฒƒ์ธ๊ฐ€์˜€๋‹ค.

์ผ๋ฐ˜์ ์œผ๋กœ ๋Œ€๊ธฐ์—ด์˜ ๋ชฉ์ ์€ ๋ช…ํ™•ํ•˜๋‹ค.
๋™์‹œ์— WAS๋กœ ์ง„์ž…ํ•˜๋Š” ์š”์ฒญ ์ˆ˜๋ฅผ ์ œํ•œํ•˜๋Š” ๊ฒƒ์ด๋‹ค.


์ด ๊ด€์ ์—์„œ ๋ณด๋ฉด ๋Œ€๊ธฐ์—ด์„ WAS ์ง„์ž… ์ง์ „์— ๋‘๋Š” ๊ฒƒ์ด ๊ฐ€์žฅ ์ž์—ฐ์Šค๋Ÿฌ์šด ํŒจํ„ด์ด๋‹ค.

ํ•˜์ง€๋งŒ ์ด ๊ตฌ์กฐ๋ฅผ ๊ทธ๋Œ€๋กœ ์ ์šฉํ–ˆ์„ ๋•Œ ๋ฌธ์ œ๊ฐ€ ํ•˜๋‚˜ ๋“œ๋Ÿฌ๋‚ฌ๋‹ค.
WAS ์•ž๋‹จ์— ๋Œ€๊ธฐ์—ด์„ ๋‘๋ฉด, ํ‹ฐ์ผ“ ์˜ˆ๋งค์™€ ๋ฌด๊ด€ํ•œ ์ผ๋ฐ˜ ๊ธฐ๋Šฅ๋“ค๊นŒ์ง€ ๋ชจ๋‘ ๋Œ€๊ธฐ์—ด์— ๊ฑธ๋ฆฐ๋‹ค๋Š” ์ ์ด๋‹ค.

 

์˜ˆ๋ฅผ ๋“ค์–ด

  • ๋ฉ”์ธ ํŽ˜์ด์ง€์˜ ์ฑ„ํŒ…
  • ์ตœ๊ทผ ๊ณต์—ฐ ๋ชฉ๋ก ์กฐํšŒ
  • ๋‹จ์ˆœ ์ •๋ณด ์กฐํšŒ API

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

์ด ๋ฌธ์ œ๋ฅผ ๋‹ค์‹œ ๋“ค์—ฌ๋‹ค๋ณด๋‹ˆ, ์›์ธ์€ ๋Œ€๊ธฐ์—ด์˜ ์œ„์น˜๊ฐ€ ์•„๋‹ˆ๋ผ
ํŠธ๋ž˜ํ”ฝ ํŠน์„ฑ์ด ์™„์ „ํžˆ ๋‹ค๋ฅธ ๊ธฐ๋Šฅ๋“ค์„ ํ•˜๋‚˜์˜ ์„œ๋ฒ„์—์„œ ์ฒ˜๋ฆฌํ•˜๊ณ  ์žˆ๋‹ค๋Š” ์ ์ด์—ˆ๋‹ค.

 

๊ทธ๋ž˜์„œ ๊ฒฐ๋ก ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์•˜๋‹ค.

  • ๋Œ€๊ธฐ์—ด์€ WAS ์ง„์ž… ์ง์ „์— ๋‘”๋‹ค
  • ๋Œ€์‹ , ์ผ๋ฐ˜ ๊ธฐ๋Šฅ์„ ์ฒ˜๋ฆฌํ•˜๋Š” API ์„œ๋ฒ„์™€ ํŠธ๋ž˜ํ”ฝ์ด ํญ์ฆํ•˜๋Š” ํ‹ฐ์ผ“ ์˜ˆ๋งค ์ „์šฉ WAS๋ฅผ ๋ฌผ๋ฆฌ์ ์œผ๋กœ ๋ถ„๋ฆฌํ•œ๋‹ค

์ด๋ ‡๊ฒŒ ํ•จ์œผ๋กœ์จ
์˜ˆ๋งค ํŠธ๋ž˜ํ”ฝ์ด ๋ชฐ๋ ค๋„ ์ผ๋ฐ˜ ๊ธฐ๋Šฅ์€ ์˜ํ–ฅ์„ ๋ฐ›์ง€ ์•Š๋„๋ก ๊ตฌ์กฐ๋ฅผ ์ •๋ฆฌํ–ˆ๋‹ค.


3. ํ‹ฐ์ผ“ ์˜ˆ๋งค ์„œ๋น„์Šค(WAS): ๋‹จ์ผ ์„œ๋ฒ„ vs ๋‹ค์ค‘ ์„œ๋ฒ„

๋‹ค์Œ์€ WAS๋ฅผ ๋ช‡ ๋Œ€๋กœ ์šด์˜ํ•  ๊ฒƒ์ธ๊ฐ€์— ๋Œ€ํ•œ ๊ณ ๋ฏผ์ด์—ˆ๋‹ค.
์ง๊ด€์ ์œผ๋กœ๋Š” “์„œ๋ฒ„๋ฅผ ์—ฌ๋Ÿฌ ๋Œ€๋กœ ๋Š˜๋ฆฌ๋ฉด ๋” ๋งŽ์€ ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ์ง€ ์•Š์„๊นŒ?”๋ผ๋Š” ์ƒ๊ฐ์ด ๋“ค ์ˆ˜ ์žˆ๋‹ค.

ํ•˜์ง€๋งŒ ํ‹ฐ์ผ“ ์˜ˆ๋งค์˜ ๋ณ‘๋ชฉ ์ง€์ ์„ ๋ถ„์„ํ•ด๋ณด๋ฉด ์ด์•ผ๊ธฐ๊ฐ€ ๋‹ฌ๋ผ์ง„๋‹ค.

 

ํ‹ฐ์ผ“ ์˜ˆ๋งค๋Š” ๋ณธ์งˆ์ ์œผ๋กœ

  • ์ขŒ์„ ๋‹จ์œ„ ๋ฝ
  • ๊ฐ•ํ•œ ํŠธ๋žœ์žญ์…˜ ์ •ํ•ฉ์„ฑ
  • DB ์“ฐ๊ธฐ ์ถฉ๋Œ

์ด ํ•ต์‹ฌ์ด๋‹ค.
์ฆ‰, ๋ณ‘๋ชฉ์€ WAS๊ฐ€ ์•„๋‹ˆ๋ผ DB์˜ ๋ฝ๊ณผ ํŠธ๋žœ์žญ์…˜ ์ฒ˜๋ฆฌ ๊ตฌ๊ฐ„์— ์žˆ๋‹ค.

 

WAS๋ฅผ ์—ฌ๋Ÿฌ ๋Œ€๋กœ ๋Š˜๋ ค๋„

  • ๊ฒฐ๊ตญ ๋™์ผํ•œ DB๋ฅผ ๋ฐ”๋ผ๋ณด๊ฒŒ ๋˜๊ณ 
  • ๋ฝ ๊ฒฝํ•ฉ์€ ๋” ์‹ฌํ•ด์งˆ ๊ฐ€๋Šฅ์„ฑ์ด ๋†’๋‹ค

์ด ์ƒํ™ฉ์—์„œ WAS ์ˆ˜ํ‰ ํ™•์žฅ์€
์‹ค์งˆ์ ์ธ ์ฒ˜๋ฆฌ๋Ÿ‰ ์ฆ๊ฐ€๋ฅผ ์–ป๊ธฐ ํž˜๋“ค๋‹ค.

 

๊ทธ๋ž˜์„œ ์˜๋„์ ์œผ๋กœ ํ‹ฐ์ผ“ ์˜ˆ๋งค ์„œ๋น„์Šค(WAS)๋Š” ๋‹จ์ผ ์„œ๋ฒ„๋กœ ์œ ์ง€ํ–ˆ๋‹ค.

 


โ“ Auto Scaling + Load Balancer๋ฅผ ๋ถ™์ด๋ฉด ์ •๋ง ์˜๋ฏธ ์—†์„๊นŒ?

์ด ์งˆ๋ฌธ๋„ ์ž์—ฐ์Šค๋Ÿฝ๊ฒŒ ๋”ฐ๋ผ์™”๋‹ค.

๊ฒฐ๋ก ๋ถ€ํ„ฐ ๋งํ•˜๋ฉด, ์™„์ „ํžˆ ์˜๋ฏธ ์—†์ง€๋Š” ์•Š๋‹ค.


๋‹ค๋งŒ DB ๊ตฌ์กฐ๋ฅผ ๋ฐ”๊พธ์ง€ ์•Š๋Š” ํ•œ์€,

  • ๋™์‹œ ์ฒ˜๋ฆฌ๋Ÿ‰ ์ฆ๊ฐ€ ํญ์€ ์ œํ•œ์ ์ด๊ณ 
  • ๋ณ‘๋ชฉ์€ ์—ฌ์ „ํžˆ DB ๋ฝ ๊ตฌ๊ฐ„์— ๋‚จ๋Š”๋‹ค

์ฆ‰,

  • DB ์ƒค๋”ฉ
  • ์ขŒ์„ ๋‹จ์œ„ ๋ถ„ํ• 
  • ์˜ˆ๋งค ๋ชจ๋ธ ์ž์ฒด์˜ ์žฌ์„ค๊ณ„

๊ฐ™์€ ๋ณ€ํ™” ์—†์ด WAS๋งŒ ์ฆ์„คํ•˜๋Š” ๊ฒƒ์€
“์ฒด๊ฐ ์„ฑ๋Šฅ ๊ฐœ์„ ”์œผ๋กœ ์ด์–ด์ง€๊ธฐ ์–ด๋ ต๋‹ค๊ณ  ํŒ๋‹จํ–ˆ๋‹ค.


4. ๋Œ€๊ธฐ์—ด ์„œ๋ฒ„: 1๋Œ€ vs ์—ฌ๋Ÿฌ ๋Œ€

๋˜ ํ•˜๋‚˜์˜ ์งˆ๋ฌธ์€ ์ด๊ฒƒ์ด์—ˆ๋‹ค.

WAS์— ํ•œ๊ณ„๊ฐ€ ์žˆ์–ด์„œ ๋Œ€๊ธฐ์—ด์ด ํ•„์š”ํ•œ๋ฐ,
๋Œ€๊ธฐ์—ด ์„œ๋ฒ„๋„ ํ•œ๊ณ„๊ฐ€ ์žˆ๋‹ค๋ฉด
๋˜ ๋‹ค๋ฅธ ๋Œ€๊ธฐ์—ด์ด ํ•„์š”ํ•œ ๊ฒƒ ์•„๋‹Œ๊ฐ€?


์ด ์งˆ๋ฌธ ์ž์ฒด๋Š” ๋…ผ๋ฆฌ์ ์œผ๋กœ ํƒ€๋‹นํ•˜๋‹ค.
ํ•˜์ง€๋งŒ ํ˜„ ๋‹จ๊ณ„์—์„œ ๋Œ€๊ธฐ์—ด ์„œ๋ฒ„๊ฐ€ ๋ณ‘๋ชฉ์ด ๋  ๋งŒํผ์˜ ํŠธ๋ž˜ํ”ฝ์€ ์•„๋‹ˆ๋ผ๊ณ  ํŒ๋‹จํ–ˆ๋‹ค.

์ดˆ๊ธฐ๋ถ€ํ„ฐ ๋Œ€๊ธฐ์—ด ์„œ๋ฒ„๋ฅผ ๋ถ„์‚ฐ์‹œํ‚ค๋ฉด

  • ์‹œ์Šคํ…œ ๋ณต์žก๋„๋งŒ ์ฆ๊ฐ€ํ•˜๊ณ 
  • ๋””๋ฒ„๊น…, ์„ค๋ช…, ์šด์˜ ๋น„์šฉ์ด ๊ธ‰๊ฒฉํžˆ ์ปค์ง„๋‹ค

๊ทธ๋ž˜์„œ ์„ ํƒํ•œ ์ „๋žต์€

์ดˆ๊ธฐ์—๋Š” ๋Œ€๊ธฐ์—ด ์„œ๋ฒ„ 1๋Œ€ + ๊ด€์ธก ๊ธฐ๋ฐ˜ ํ™•์žฅ

์ฆ‰,

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

5. ๋Œ€๊ธฐ์—ด Queue ๊ธฐ์ˆ  ์„ ํƒ: Redis

๋Œ€๊ธฐ์—ด ๊ตฌํ˜„์„ ์œ„ํ•œ ๊ธฐ์ˆ ๋กœ๋Š” ์—ฌ๋Ÿฌ ์„ ํƒ์ง€๊ฐ€ ์žˆ์—ˆ์ง€๋งŒ,
์ตœ์ข…์ ์œผ๋กœ Redis๋ฅผ ์„ ํƒํ–ˆ๋‹ค.

์ด์œ ๋Š” ๋ช…ํ™•ํ•˜๋‹ค.

  • In-memory ๊ธฐ๋ฐ˜ → ๋งค์šฐ ๋น ๋ฅธ ์ ‘๊ทผ ์†๋„
  • Sorted Set / Stream ๋“ฑ → ๋Œ€๊ธฐ์—ด ๊ตฌํ˜„์— ์ ํ•ฉํ•œ ์ž๋ฃŒ๊ตฌ์กฐ
  • TTL ์ง€์› → ์˜ค๋ž˜๋œ ๋Œ€๊ธฐ ๋ฐ์ดํ„ฐ ์ž๋™ ์ •๋ฆฌ ๊ฐ€๋Šฅ

๊ตฌ์ฒด์ ์œผ๋กœ๋Š”:

  • Stream์œผ๋กœ ์ˆœ์ฐจ ์ฒ˜๋ฆฌ์™€ Consumer Group ๊ธฐ๋ฐ˜ ๋ณ‘๋ ฌ ์ฒ˜๋ฆฌ
  • Pipeline์œผ๋กœ ๋„คํŠธ์›Œํฌ ์™•๋ณต ์ตœ์†Œํ™”
  • TTL๋กœ ๋ฉ”๋ชจ๋ฆฌ ๊ด€๋ฆฌ

๋ฅผ ์—ผ๋‘์— ๋‘๊ณ  ์žˆ๋‹ค.

๋ฌผ๋ก  Redis์˜ ํ•œ๊ณ„๋„ ๋ช…ํ™•ํ•˜๋‹ค.

  • ๋ฉ”๋ชจ๋ฆฌ ๊ธฐ๋ฐ˜ → ์šฉ๋Ÿ‰ ์ œํ•œ
  • ๋‹จ์ผ ์Šค๋ ˆ๋“œ → CPU ๋ณ‘๋ชฉ ๊ฐ€๋Šฅ

์ด ๋ถ€๋ถ„์€:

  • ๋ฐ์ดํ„ฐ ์ตœ์†Œํ™”
  • ํ•„์š” ์‹œ Redis Cluster / ์ƒค๋”ฉ
  • ์žฅ๊ธฐ์ ์œผ๋กœ Kafka ๋ณ‘ํ–‰ ๊ฐ€๋Šฅ์„ฑ

์œผ๋กœ ๋Œ€์‘ํ•  ๊ณ„ํš์ด๋‹ค.


6. ๋Œ€๊ธฐ์—ด ์„œ๋ฒ„ ↔ ํ‹ฐ์ผ“ WAS ํ†ต์‹  ๋ฐฉ์‹

๋‘ ์„œ๋ฒ„ ๊ฐ„ ํ†ต์‹  ๋ฐฉ์‹์œผ๋กœ๋Š”

  • HTTP
  • WebSocket
  • SSE
  • ๋ฉ”์‹œ์ง€ ํ

๋ฅผ ๊ฒ€ํ† ํ–ˆ๋‹ค.

 

ํ•„์š”ํ•œ ๊ฒƒ์€

  • ์š”์ฒญ-์‘๋‹ต์ด ์•„๋‹Œ
  • ๋‹จ๋ฐฉํ–ฅ ์ด๋ฒคํŠธ
  • ๋น ๋ฅธ ์ „๋‹ฌ

์ด์—ˆ๋‹ค.

 

HTTP๋Š” ๊ตฌ์กฐ์ ์œผ๋กœ ๋งž์ง€ ์•Š์•˜๊ณ ,
WebSocket์€ ์„œ๋ฒ„ ๊ฐ„ ํ†ต์‹ ์— ๋น„ํ•ด ์—ฐ๊ฒฐ ๋น„์šฉ์ด ๊ณผํ–ˆ๋‹ค.

 

๊ฒฐ๋ก ์ ์œผ๋กœ

=> ๋ฉ”์‹œ์ง€ ํ๊ฐ€ ๊ฐ€์žฅ ์ ํ•ฉํ•˜๋‹ค๊ณ  ํŒ๋‹จํ–ˆ๋‹ค.


7. ๋ฉ”์‹œ์ง€ ํ ์„ ํƒ: Redis Pub/Sub

๋ฉ”์‹œ์ง€ ํ ์ค‘์—์„œ๋„ ์ตœ์ข… ์„ ํƒ์€ Redis Pub/Sub์ด๋‹ค.

BOOKING_DONE ์ด๋ฒคํŠธ์˜ ํŠน์„ฑ์„ ๋ณด๋ฉด

  • ์‹ค์‹œ๊ฐ„์„ฑ์ด ๋งค์šฐ ์ค‘์š”ํ•˜๊ณ 
  • ์•ฝ๊ฐ„์˜ ๋ฉ”์‹œ์ง€ ์œ ์‹ค์€ ํ—ˆ์šฉ ๊ฐ€๋Šฅํ•˜๋ฉฐ
  • ์žฌ์ฒ˜๋ฆฌ๋Š” ํ•„์š” ์—†๋‹ค

์ด ํŠน์„ฑ์— ๊ฐ€์žฅ ์ž˜ ๋งž๋Š” ๊ฒƒ์ด Redis Pub/Sub์ด์—ˆ๋‹ค.

  • ์ง€์—ฐ ๊ฑฐ์˜ ์—†์Œ
  • ๊ตฌ์กฐ ๋‹จ์ˆœ
  • ์šด์˜ ๋ถ€๋‹ด ๋‚ฎ์Œ

์ฆ‰,
์‹ ๋ขฐ์„ฑ๋ณด๋‹ค ์‹ค์‹œ๊ฐ„์„ฑ์„ ์šฐ์„ ํ•œ ์„ ํƒ์ด๋‹ค.

RabbitMQ, Kafka ๋“ฑ์˜ ๋น„๊ต๋Š”
์„ค๊ณ„ ์„ค๋ช… ํ๋ฆ„์ƒ ๋ถ€๋ก์œผ๋กœ ๋ถ„๋ฆฌํ•˜๋Š” ๊ฒƒ์ด ๋” ์ ์ ˆํ•˜๋‹ค๊ณ  ํŒ๋‹จํ–ˆ๋‹ค.


8. ํด๋ผ์ด์–ธํŠธ ๋Œ€๊ธฐ ์ƒํƒœ ํ™•์ธ ๋ฐฉ์‹

๋งˆ์ง€๋ง‰์œผ๋กœ ํด๋ผ์ด์–ธํŠธ๊ฐ€ ๋Œ€๊ธฐ ์ƒํƒœ๋ฅผ ํ™•์ธํ•˜๋Š” ๋ฐฉ์‹์ด๋‹ค.

  • WebSocket์€ ์—ฐ๊ฒฐ ์œ ์ง€ ๋น„์šฉ์ด ํฌ๊ณ 
  • SSE๋Š” ์„œ๋ฒ„ ๋‹จ๋ฐฉํ–ฅ ์ด๋ฒคํŠธ๋งŒ ๊ฐ€๋Šฅํ•ด ๋Œ€๊ธฐ ์ˆœ๋ฒˆ ๊ณ„์‚ฐ์— ์• ๋งคํ•˜๋‹ค

๊ฒฐ๊ตญ ์„ ํƒ์€ Polling

๋‹จ์ˆœํ•˜์ง€๋งŒ,

  • ๊ฐ€์žฅ ๋งŽ์€ ์‚ฌ์šฉ์ž๋ฅผ
  • ๊ฐ€์žฅ ์•ˆ์ •์ ์œผ๋กœ ์ˆ˜์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐฉ์‹์ด๋ผ๊ณ  ํŒ๋‹จํ–ˆ๋‹ค.

 

'โš™๏ธ ์ธํ”„๋ผ(Devops)' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

๋Œ€๊ทœ๋ชจ ํŠธ๋ž˜ํ”ฝ์„ ๊ฐ๋‹นํ•˜๋Š” MSA ํ‹ฐ์ผ“ ์˜ˆ๋งค ์•„ํ‚คํ…์ฒ˜ ์„ค๊ณ„ํ•˜๊ธฐ ( 1์ฃผ์ฐจ )  (1) 2026.01.09
'โš™๏ธ ์ธํ”„๋ผ(Devops)' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€
  • ๋Œ€๊ทœ๋ชจ ํŠธ๋ž˜ํ”ฝ์„ ๊ฐ๋‹นํ•˜๋Š” MSA ํ‹ฐ์ผ“ ์˜ˆ๋งค ์•„ํ‚คํ…์ฒ˜ ์„ค๊ณ„ํ•˜๊ธฐ ( 1์ฃผ์ฐจ )
nut.hazel
nut.hazel
  • nut.hazel
    Hazel' s develog ๐Ÿƒ
    nut.hazel
  • ์ „์ฒด
    ์˜ค๋Š˜
    ์–ด์ œ
    • ๋ถ„๋ฅ˜ ์ „์ฒด๋ณด๊ธฐ (81)
      • โœ๏ธ ๊ฐœ๋ฐœํšŒ๊ณ ๋ก (7)
      • ๐Ÿงฎ ์•Œ๊ณ ๋ฆฌ์ฆ˜ (3)
      • ๐Ÿ’™ ํ”„๋ก ํŠธ์—”๋“œ(FE) (19)
        • HTML (0)
        • CSS (0)
        • Javascript (0)
        • React (0)
        • Next.js (0)
        • webpack & babel (0)
      • ๐Ÿ’ป ๋ฐฑ์—”๋“œ(BE) (2)
        • Nest.js (0)
        • Express.js (0)
        • MySQL (1)
      • โš™๏ธ ์ธํ”„๋ผ(Devops) (2)
      • ๐Ÿค– AI (1)
      • ๐ŸŒ WEB (8)
      • ๐Ÿ’ป CS (16)
        • ์ž๋ฃŒ๊ตฌ์กฐ (0)
        • ์ปดํ“จํ„ฐ ๋„คํŠธ์›Œํฌ (1)
        • ์šด์˜์ฒด์ œ (0)
        • ์ธ๊ณต์ง€๋Šฅ (8)
        • ์›น ๋ณด์•ˆ (1)
        • ํด๋ผ์šฐ๋“œ ์ปดํ“จํŒ… (6)
      • ๐Ÿ–‹๏ธ DevLog (1)
      • ๐Ÿฆพ ๋กœ๋ณดํ‹ฑ์Šค (4)
      • ๐Ÿ“— ๋„ค์ด๋ฒ„๋ถ€์ŠคํŠธ์บ ํ”„ ์›น ๋ชจ๋ฐ”์ผ (0)
      • ๐ŸŽฎ Unity(C#) (10)
      • ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด (4)
        • C (4)
        • C++ (0)
        • Java (0)
        • Python (0)
      • MSA (1)
  • ๋ธ”๋กœ๊ทธ ๋ฉ”๋‰ด

    • ํ™ˆ
    • ํƒœ๊ทธ
    • ๋ฐฉ๋ช…๋ก
  • ๋งํฌ

  • ๊ณต์ง€์‚ฌํ•ญ

  • ์ธ๊ธฐ ๊ธ€

  • ํƒœ๊ทธ

    soft margin svm
    hard margin svm
    C#
    AWS
    ํŒŒ์ผํŠธ๋ฆฌ
    deploy-aws
    ์ˆœ์—ด
    turtlebot
    c++
    ์ŠคํŒธ๋ถ„๋ฅ˜๊ธฐ
    c์–ธ์–ด
    ์ดํ™”์—ฌ์ž๋Œ€ํ•™๊ต #๋„์ „ํ•™๊ธฐ์ œ
    ๋ฐฑ์ค€
    ros workspace
    Devops #๋Œ€๊ทœ๋ชจํŠธ๋ž˜ํ”ฝ์ฒ˜๋ฆฌ
    client-streaming
    ์ฝ”๋”ํŒจ๋“œ
    nav2
    ์•Œ๊ณ ๋ฆฌ์ฆ˜
    ์ŠคํŒธ๋ฉ”์ผ๋ถ„๋ฅ˜๊ธฐ
    isaac automator
    C
    gaussian rbf svm
    ๊ธฐ์ดˆ์•Œ๊ณ ๋ฆฌ์ฆ˜
    ๋ฆฌ์•กํŠธ
    ์กฐํ•ฉ
    next.js12
    ros bridge
    auto-scaling
    advaned detail
  • ์ตœ๊ทผ ๋Œ“๊ธ€

  • ์ตœ๊ทผ ๊ธ€

  • hELLOยท Designed By์ •์ƒ์šฐ.v4.10.6
nut.hazel
๋Œ€๊ทœ๋ชจ ํŠธ๋ž˜ํ”ฝ์„ ๊ฐ๋‹นํ•˜๋Š” MSA ํ‹ฐ์ผ“ ์˜ˆ๋งค ์•„ํ‚คํ…์ฒ˜ ์„ค๊ณ„
์ƒ๋‹จ์œผ๋กœ

ํ‹ฐ์Šคํ† ๋ฆฌํˆด๋ฐ”