๐Ÿ”„ ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค ๋ฐ์ดํ„ฐ ๊ณต์œ  ์ „๋žต: ๋™๊ธฐ ํ˜ธ์ถœ์„ ๋„˜์–ด, ์ ์ง„์  ์ผ๊ด€์„ฑ์œผ๋กœ

sangjinsuยท2025๋…„ 5์›” 24์ผ
post-thumbnail

Sharing Data Between Microservices

๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค ์•„ํ‚คํ…์ฒ˜๋ฅผ ์ฒ˜์Œ ์ ‘ํ–ˆ์„ ๋•Œ, โ€œ๋‘ ์„œ๋น„์Šค๋Š” ๊ฐ™์€ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ๊ณต์œ ํ•˜๋ฉด ์•ˆ ๋œ๋‹คโ€๋Š” ๊ทœ์น™์„ ์ง€๋‚˜์น˜๊ฒŒ ๋ฌธ์ž ๊ทธ๋Œ€๋กœ ๋ฐ›์•„๋“ค์˜€๋˜ ๊ธฐ์–ต์ด ๋‚ฉ๋‹ˆ๋‹ค.

์ธํ„ฐ๋„ท ์—ฌ๊ธฐ์ €๊ธฐ์„œ โ€œ์„œ๋น„์Šค ๊ฐ„ DB ๊ณต์œ ๋Š” ๊ธˆ๊ธฐ๋‹คโ€๋ผ๋Š” ๋ฌธ์žฅ์„ ์ ‘ํ–ˆ๊ณ , ๋‹น์‹œ์—๋Š” ์ •๋ง ๋งž๋Š” ๋ง์ฒ˜๋Ÿผ ๋А๊ปด์กŒ์Šต๋‹ˆ๋‹ค.

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

ํ•˜์ง€๋งŒ ์‹œ๊ฐ„์ด ์ง€๋‚˜๊ณ  ๋‚˜์„œ์•ผ ์ด ๊ทœ์น™์˜ ์ค‘์š”ํ•œ ๋‰˜์•™์Šค๋ฅผ ์ดํ•ดํ•  ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.

์ด ์›์น™์„ ์ œ๋Œ€๋กœ ์ ์šฉํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” โ€œ๋ฐ์ดํ„ฐ ์†Œ์Šค(data source)๋ฅผ ๊ณต์œ ํ•˜๋Š” ๊ฒƒโ€œ๊ณผ โ€œ๋ฐ์ดํ„ฐ(data) ์ž์ฒด๋ฅผ ๊ณต์œ ํ•˜๋Š” ๊ฒƒโ€œ์„ ๊ตฌ๋ถ„ํ•ด์„œ ์ƒ๊ฐํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์™œ ๋ฐ์ดํ„ฐ ์†Œ์Šค๋ฅผ ๊ณต์œ ํ•˜๋ฉด ์•ˆ ๋˜๋Š”๊ฐ€

์˜ˆ๋ฅผ ๋“ค์–ด ์„ค๋ช…ํ•ด๋ณผ๊ฒŒ์š”. Products ์„œ๋น„์Šค๋Š” products ํ…Œ์ด๋ธ”๊ณผ ๊ทธ ์•ˆ์˜ ๋ชจ๋“  ๋ ˆ์ฝ”๋“œ์— ๋Œ€ํ•œ ์†Œ์œ ๊ถŒ์„ ๊ฐ€์ง€๊ณ  ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์ด ์„œ๋น„์Šค๋Š” ๋‹ค๋ฅธ ํŒ€์ด ์ œํ’ˆ ๋ฐ์ดํ„ฐ๋ฅผ ์กฐํšŒํ•  ์ˆ˜ ์žˆ๋„๋ก GraphQL ์ฟผ๋ฆฌ(products)๋ฅผ, ์ƒˆ ์ œํ’ˆ์„ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ๋„๋ก createProduct ๋ฎคํ…Œ์ด์…˜์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

์ฆ‰, Products ์„œ๋น„์Šค๋Š” ์ œํ’ˆ์— ๋Œ€ํ•œ ๋‹จ์ผ ์ง„์‹ค์˜ ์›์ฒœ(Source of Truth)์„ ๋‹ด๋‹นํ•˜๋ฉฐ, ์–ด๋–ค ํŒ€๋„ ์ง์ ‘ ์ด DB์— ์ ‘๊ทผํ•ด์„œ๋Š” ์•ˆ ๋ฉ๋‹ˆ๋‹ค.

๋‹ค๋ฅธ ์„œ๋น„์Šค๊ฐ€ ๋ฐ์ดํ„ฐ๊ฐ€ ํ•„์š”ํ•˜๋‹ค๋ฉด ๋ฐ˜๋“œ์‹œ Products ์„œ๋น„์Šค๊ฐ€ ์ œ๊ณตํ•˜๋Š” ๊ณต์‹ API ๊ณ„์•ฝ์„ ํ†ตํ•ด ์š”์ฒญํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์ง์ ‘ DB์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋„๋ก ํ—ˆ์šฉํ•˜๋Š” ์ˆœ๊ฐ„, Products ์„œ๋น„์Šค๋Š” ์ž์‹ ์˜ ์Šคํ‚ค๋งˆ๋ฅผ ๋งˆ์Œ๋Œ€๋กœ ๋ฐ”๊ฟ€ ์ˆ˜ ์žˆ๋Š” ์ž์œ ๋ฅผ ์žƒ๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

์ €๋„ ๊ณผ๊ฑฐ์— ์ด ๊ทœ์น™์„ ์ง€ํ‚ค์ง€ ์•Š์•„์„œ ํฐ ๊ณ ์ƒ์„ ํ–ˆ๊ณ , ๊ทธ ํ›„๋กœ๋Š” ์ด ์›์น™์„ ์ฒ ์ €ํžˆ ์ง€ํ‚ค๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.


๋ฐ์ดํ„ฐ๋ฅผ ๊ณต์œ ํ•˜๋Š” ๊ฑด ๊ดœ์ฐฎ๋‹ค

ํ˜„์‹ค์ ์œผ๋กœ, ์„œ๋น„์Šค ๊ฐ„์— ๋ฐ์ดํ„ฐ๋ฅผ ๊ณต์œ ํ•˜๋Š” ๊ฑด ํ•„์ˆ˜์ ์ž…๋‹ˆ๋‹ค.

๊ฐ ์„œ๋น„์Šค๋Š” ์ž์‹ ์ด ์†Œ์œ ํ•œ ๋„๋ฉ”์ธ ์™ธ์˜ ์ •๋ณด๋„ ํ•„์š”๋กœ ํ•˜๊ธฐ ๋•Œ๋ฌธ์ด์ฃ .

์˜ˆ๋ฅผ ๋“ค์–ด, Trip ์„œ๋น„์Šค๋Š” ํƒ‘์Šน ์ด๋ ฅ์„ ์ œ๊ณตํ•˜๊ธฐ ์œ„ํ•ด ์Šน๊ฐ(Passenger) ์ •๋ณด์™€ ์šด์ „์ž(Driver) ์ •๋ณด๋ฅผ ํ•„์š”๋กœ ํ•ฉ๋‹ˆ๋‹ค.

ํ•˜์ง€๋งŒ ์ด ๋ฐ์ดํ„ฐ๋Š” ๊ฐ๊ฐ Passenger ์„œ๋น„์Šค์™€ Driver ์„œ๋น„์Šค๊ฐ€ ์†Œ์œ ํ•˜๊ณ  ์žˆ์ฃ .

์ฆ‰, ๋ฐ์ดํ„ฐ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์ฃผ์ฒด๋Š” ๋‹ค๋ฅผ ์ˆ˜ ์žˆ์ง€๋งŒ, ํ•„์š”ํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ์ ์ ˆํ•œ ๋ฐฉ์‹์œผ๋กœ โ€œ๊ณต์œ โ€ํ•˜๋Š” ๊ฒƒ ์ž์ฒด๋Š” ์ „ํ˜€ ๋ฌธ์ œ๊ฐ€ ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

์ค‘์š”ํ•œ ๊ฑด ๋ฐ์ดํ„ฐ๋ฅผ ์–ด๋–ป๊ฒŒ ๊ณต์œ ํ•˜๋А๋ƒ์ž…๋‹ˆ๋‹ค โ€” ์ง์ ‘ DB๋ฅผ ๋’ค์ง€๋А๋ƒ, ์•„๋‹ˆ๋ฉด ๊ณ„์•ฝ(API, ์ด๋ฒคํŠธ ๋“ฑ)์„ ํ†ตํ•ด ๊ฐ€์ ธ์˜ค๋А๋ƒ์˜ ์ฐจ์ด์ฃ .

๋™๊ธฐ API ํ˜ธ์ถœ: ๋‹น์—ฐํ•˜๊ณ , ์ต์ˆ™ํ–ˆ๋˜ ์„ ํƒ

Trip ์„œ๋น„์Šค๋Š” ๊ฐ ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•  ๋•Œ Passenger ์„œ๋น„์Šค์™€ Driver ์„œ๋น„์Šค์— ๋™๊ธฐ์ ์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์š”์ฒญํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด getTrips ์š”์ฒญ์ด ๋“ค์–ด์˜ค๋ฉด, ํ•„์š”ํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ ์†Œ์œ  ์„œ๋น„์Šค๋กœ๋ถ€ํ„ฐ ์‹ค์‹œ๊ฐ„์œผ๋กœ ๋ฐ›์•„์˜ค๋Š” ๊ตฌ์กฐ์ฃ .

์ด ๋ฐฉ์‹์˜ ๊ฐ€์žฅ ํฐ ์žฅ์ ์€ ๋ช…ํ™•ํ•ฉ๋‹ˆ๋‹ค โ€” ํ•ญ์ƒ ์ตœ์‹ ์˜ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ ธ์˜ฌ ์ˆ˜ ์žˆ๋‹ค๋Š” ์ ์ž…๋‹ˆ๋‹ค.

์š”์ฒญ์ž๊ฐ€ ๋ฐ›์•„๋ณด๋Š” ๋ฐ์ดํ„ฐ๋Š” ๊ฐ•ํ•œ ์ผ๊ด€์„ฑ(strong consistency)์„ ๋ณด์žฅ๋ฐ›์œผ๋ฉฐ, ๋ง ๊ทธ๋Œ€๋กœ โ€˜์ง„์‹ค์˜ ์›์ฒœ(Source of Truth)โ€™๋กœ๋ถ€ํ„ฐ ์ง์ ‘ ๋ฐ›์€ ๊ฐ€์žฅ โ€œ์‹ ์„ ํ•œโ€ ์ •๋ณด์ž…๋‹ˆ๋‹ค.


๊ฐ•ํ•œ ์ผ๊ด€์„ฑ์— ์ง‘์ฐฉํ–ˆ๋˜ ์ดˆ๊ธฐ์˜ ์šฐ๋ฆฌ

์ €๋ฅผ ํฌํ•จํ•œ ๋งŽ์€ ํŒ€๋“ค์ด ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค๋ฅผ ์ฒ˜์Œ ๋„์ž…ํ–ˆ์„ ๋•Œ๋Š” ์ด ๋™๊ธฐ ์š”์ฒญ/์‘๋‹ต ๋ชจ๋ธ์ด ๋„ˆ๋ฌด๋‚˜๋„ ์ž์—ฐ์Šค๋Ÿฝ๊ฒŒ ๋А๊ปด์กŒ์Šต๋‹ˆ๋‹ค.

  • ํ•„์š”ํ•œ ๋ฐ์ดํ„ฐ๊ฐ€ ์žˆ๋‹ค โ†’
  • ์–ด๋””์„œ ๊ฐ€์ ธ์˜ฌ์ง€ ์•ˆ๋‹ค โ†’
  • ๊ทธ ์„œ๋น„์Šค์— API ํ˜ธ์ถœ โ†’
  • ์ฆ‰์‹œ ์‘๋‹ต์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐ›๋Š”๋‹ค

์ด ํ๋ฆ„์€ ์ง๊ด€์ ์ด๊ณ , ํŠนํžˆ ํ•œ ์‹œ์Šคํ…œ ์•ˆ์—์„œ ๋™์ž‘ํ•  ๋•Œ๋Š” ์•„๋ฌด๋Ÿฐ ๋ฌธ์ œ๊ฐ€ ์—†์–ด ๋ณด์˜€์Šต๋‹ˆ๋‹ค.

๊ทธ๋ฆฌ๊ณ  ๋ฌด์—‡๋ณด๋‹ค๋„ ์šฐ๋ฆฌ๋Š” โ€œ๊ฐ•ํ•œ ์ผ๊ด€์„ฑ์ด ์žˆ๋Š” ๋ฐ์ดํ„ฐโ€๋ฅผ ์ œ๊ณตํ•˜๋Š” ๊ฒƒ์„ ์ ˆ๋Œ€์ ์ธ ๊ธฐ์ค€์œผ๋กœ ์—ฌ๊ฒผ์Šต๋‹ˆ๋‹ค.

โ€œ์ตœ์‹ ์ด ์•„๋‹Œ ๋ฐ์ดํ„ฐ๋ฅผ ์–ด๋–ป๊ฒŒ ์ œ๊ณตํ•  ์ˆ˜ ์žˆ์ง€?โ€

โ€œ์‹ค์‹œ๊ฐ„์ด ์•„๋‹Œ ์ •๋ณด๋Š” ์‚ฌ์šฉ์ž์—๊ฒŒ ๊ฑฐ์ง“๋ง ์•„๋‹Œ๊ฐ€?โ€

๋ผ๋Š” ์ƒ๊ฐ์ด ๋จธ๋ฆฟ์†์— ๋ฐ•ํ˜€ ์žˆ์—ˆ์ฃ .

๊ทธ๋ž˜์„œ ์šฐ๋ฆฌ๋Š” ์ด ๊ตฌ์กฐ๋ฅผ ์ง„๋ฆฌ์ฒ˜๋Ÿผ ์—ฌ๊ฒผ๊ณ , ๋‹ค๋ฅธ ๋ฐฉ์‹์€ ์ƒ๊ฐ์กฐ์ฐจ ํ•˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค.

๋™๊ธฐ ํ˜ธ์ถœ๊ณผ ๊ฐ•ํ•œ ์ผ๊ด€์„ฑ์€ ํ™•์žฅ๋˜์ง€ ์•Š๋Š”๋‹ค

๋™๊ธฐ ์š”์ฒญ(synchronous request)๊ณผ ๊ฐ•ํ•œ ์ผ๊ด€์„ฑ(strong consistency)์— ์ง€๋‚˜์น˜๊ฒŒ ์˜์กดํ•˜๋Š” ์•„ํ‚คํ…์ฒ˜๋Š” ํ™•์žฅ์„ฑ์— ํ•œ๊ณ„๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

ํ•ญ์ƒ ์ง„์‹ค์˜ ์›์ฒœ(Source of Truth)์œผ๋กœ๋ถ€ํ„ฐ ๋ฐ์ดํ„ฐ๋ฅผ ์ง์ ‘ ๊ฐ€์ ธ์˜ค๋Š” ๊ฒƒ์ด ํ•ญ์ƒ ๊ฐ€๋Šฅํ•˜๊ฑฐ๋‚˜, ๋ฐ˜๋“œ์‹œ ํ•„์š”ํ•œ ๊ฑด ์•„๋‹™๋‹ˆ๋‹ค.

์•ž์„œ ์„ค๋ช…ํ•œ Trip ์„œ๋น„์Šค ์˜ˆ์‹œ๋Š” ์–ธ๋œป ๋ณด๋ฉด ๊น”๋”ํ•ด ๋ณด์ž…๋‹ˆ๋‹ค.

ํ•˜์ง€๋งŒ ํ˜„์‹ค์—์„œ๋Š” ์‹œ์Šคํ…œ์ด ๊ทธ๋ ‡๊ฒŒ ๋‹จ์ˆœํ•˜๊ฒŒ ์œ ์ง€๋˜๋Š” ๊ฒฝ์šฐ๋Š” ๋“œ๋ญ…๋‹ˆ๋‹ค.

์‹œ๊ฐ„์ด ์ง€๋‚˜๋ฉด ์ƒˆ๋กœ์šด ์„œ๋น„์Šค๊ฐ€ ๊ณ„์† ์ƒ๊ฒจ๋‚˜๊ณ , ์ด๋“ค์€ ๊ธฐ์กด ์„œ๋น„์Šค์˜ ๋ฐ์ดํ„ฐ๋ฅผ ํ•„์š”๋กœ ํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

๊ทธ๋ฆฌ๊ณ  ์—ฌ์ „ํžˆ ๋ชจ๋“  ๋ฐ์ดํ„ฐ๋ฅผ ๋™๊ธฐ์ ์œผ๋กœ ์š”์ฒญํ•˜๋Š” ํŒจํ„ด์„ ๊ณ ์ˆ˜ํ•˜๋‹ค ๋ณด๋ฉด, ์–ด๋А ์ˆœ๊ฐ„ ์„œ๋น„์Šค ๊ฐ„ ์š”์ฒญ๋“ค์ด ์–ฝํžˆ๊ณ ์„คํ‚จ ๋ณต์žกํ•œ ๊ฑฐ๋ฏธ์ค„์ด ๋˜์–ด๋ฒ„๋ฆฝ๋‹ˆ๋‹ค.

๊ทธ ๊ฒฐ๊ณผ๋Š”?

์„œ๋กœ ์˜์กด์ ์ธ ์š”์ฒญ๋“ค์ด ๊ผฌ๋ฆฌ์— ๊ผฌ๋ฆฌ๋ฅผ ๋ฌผ๊ณ , ์ „์ฒด ์‹œ์Šคํ…œ์˜ ์‘๋‹ต ์†๋„์™€ ์•ˆ์ •์„ฑ์„ ๊ฐ‰์•„๋จน๋Š” ๋ณ‘๋ชฉ์œผ๋กœ ์ด์–ด์ง‘๋‹ˆ๋‹ค.

์„œ๋น„์Šค ๊ฐ„ ์—ฐ์‡„ ์š”์ฒญ์˜ ๋ซ

๋‹ค์Œ์€ ์‹ค์ œ ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค ํ™˜๊ฒฝ์—์„œ ์ž์ฃผ ๋ฐœ์ƒํ•˜๋Š” ์‹œ๋‚˜๋ฆฌ์˜ค์ž…๋‹ˆ๋‹ค:

  1. ์‚ฌ์šฉ์ž๊ฐ€ ์ฑŒ๋ฆฐ์ง€๋ฅผ ์™„๋ฃŒํ•˜๋ฉด completeChallenge ๋ฎคํ…Œ์ด์…˜์„ Challenge ์„œ๋น„์Šค์— ๋ณด๋ƒ…๋‹ˆ๋‹ค.
  2. Challenge ์„œ๋น„์Šค๋Š” ์™„๋ฃŒ ์ •๋ณด๋ฅผ ์ €์žฅํ•œ ๋’ค, Leaderboard ์„œ๋น„์Šค์— ์•Œ๋ฆฝ๋‹ˆ๋‹ค.
  3. Leaderboard ์„œ๋น„์Šค๋Š” ์ƒˆ๋กœ์šด ๋ฆฌ๋”๋ณด๋“œ๋ฅผ ์ƒ์„ฑํ•˜๊ธฐ ์œ„ํ•ด User ์„œ๋น„์Šค์— ์‚ฌ์šฉ์ž ์ด๋ฆ„๊ณผ ์•„๋ฐ”ํƒ€๋ฅผ ์š”์ฒญํ•ฉ๋‹ˆ๋‹ค.
  4. ์ƒˆ๋กœ์šด ๋ฆฌ๋”๊ฐ€ ์ƒ๊ธฐ๋ฉด, ์ด๋ฅผ Notification ์„œ๋น„์Šค์— ์ „๋‹ฌํ•ฉ๋‹ˆ๋‹ค.
  5. Notification ์„œ๋น„์Šค๋Š” ํ•ด๋‹น ๋ฆฌ๋”๋ณด๋“œ์— ํฌํ•จ๋œ ์‚ฌ์šฉ์ž๋“ค์˜ ์ด๋ฉ”์ผ ์ฃผ์†Œ๋ฅผ ์–ป๊ธฐ ์œ„ํ•ด ๋‹ค์‹œ User ์„œ๋น„์Šค์— ์š”์ฒญํ•ฉ๋‹ˆ๋‹ค.

์ด ์‹œ๋‚˜๋ฆฌ์˜ค์—์„œ ๋ชจ๋“  ์„œ๋น„์Šค๊ฐ€ User ์„œ๋น„์Šค์— ์˜์กดํ•˜๊ณ  ์žˆ๋‹ค๋Š” ๊ฑธ ์•Œ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋งŒ์•ฝ User ์„œ๋น„์Šค๊ฐ€ ๋‹ค์šด๋œ๋‹ค๋ฉด?

๊ฑฐ์˜ ๋ชจ๋“  ๊ธฐ๋Šฅ์ด ๋ฉˆ์ถ”๊ฒŒ ๋˜๋ฉฐ, ๋‹จ์ˆœํžˆ ํ•œ ์„œ๋น„์Šค์˜ ์žฅ์• ๊ฐ€ ์ „์ฒด ์‹œ์Šคํ…œ์˜ ์žฅ์• ๋กœ ํ™•์‚ฐ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ด๋Ÿฌํ•œ ๊ตฌ์กฐ์—์„œ๋Š” User ์„œ๋น„์Šค์˜ ๊ณ ๊ฐ€์šฉ์„ฑ ๋ณด์žฅ์ด ํ•„์ˆ˜์ž…๋‹ˆ๋‹ค.

๋” ๋งŽ์€ ๋ฆฌํ”Œ๋ฆฌ์นด๋ฅผ ์œ ์ง€ํ•˜๊ณ , ์„ฑ๋Šฅ ์ข‹์€ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ๋ถ™์—ฌ๋†”์•ผ ํ•˜์ฃ .

์ฆ‰, ์˜์กด๋„๊ฐ€ ๋†’์•„์งˆ์ˆ˜๋ก ์šด์˜ ๋น„์šฉ๊ณผ ์žฅ์•  ์ „ํŒŒ ์œ„ํ—˜๋„ ๊ฐ™์ด ์˜ฌ๋ผ๊ฐ‘๋‹ˆ๋‹ค.


์„œ๋น„์Šค ํ˜ธ์ถœ ์ฒด์ธ์˜ ์ˆจ๊ฒจ์ง„ ๋น„์šฉ

์„œ๋น„์Šค ๊ฐ„ ํ˜ธ์ถœ์ด ์ฒด์ธ์„ ํ˜•์„ฑํ•  ๋•Œ, ํ˜ธ์ถœ ๋‹จ๊ณ„๊ฐ€ ํ•˜๋‚˜ ๋Š˜์–ด๋‚ ์ˆ˜๋ก ์ง€์—ฐ(latency)์€ ๊ธฐํ•˜๊ธ‰์ˆ˜์ ์œผ๋กœ ์ฆ๊ฐ€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๊ฐ ์„œ๋น„์Šค๊ฐ€ ์ž์‹ ์˜ ์˜์กด ์„œ๋น„์Šค๋กœ ๋˜ ๋‹ค๋ฅธ ์š”์ฒญ์„ ๋ณด๋‚ด๊ฒŒ ๋˜๋ฉด,

์ „์ฒด ์š”์ฒญ ๊ฒฝ๋กœ๋Š” ๊นŠ์–ด์ง€๊ณ , ์‚ฌ์šฉ์ž ์‘๋‹ต ์‹œ๊ฐ„์€ ๊ธธ์–ด์ง€๋ฉฐ,

๊ฒฝ์šฐ์— ๋”ฐ๋ผ ์‹œ์Šคํ…œ ์ „์ฒด์˜ SLA(Service Level Agreement)๋ฅผ ๋–จ์–ด๋œจ๋ฆด ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด, SLA๊ฐ€ ๊ฐ๊ฐ 99.9%์ธ 5๊ฐœ์˜ ์„œ๋น„์Šค๊ฐ€ ์ง๋ ฌ๋กœ ์—ฐ๊ฒฐ๋˜์–ด ์žˆ๋‹ค๊ณ  ๊ฐ€์ •ํ•˜๋ฉด,

์ „์ฒด ์‹œ์Šคํ…œ์˜ ๋ณตํ•ฉ SLA๋Š” ์•ฝ 99.5%๊ฐ€ ๋ฉ๋‹ˆ๋‹ค.

์ด๋Š” ์—ฐ๊ฐ„ ์•ฝ 2์ผ์˜ ๋‹ค์šดํƒ€์ž„์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค.

(๊ณ„์‚ฐ: 0.999โต โ‰ˆ 0.995 โ‰’ 2์ผ)


์ •๋ง ์ตœ์‹  ๋ฐ์ดํ„ฐ๊ฐ€ ํ•„์š”ํ•œ๊ฐ€?

์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•œ ์ถœ๋ฐœ์ ์€ ๋งค์šฐ ๋‹จ์ˆœํ•ฉ๋‹ˆ๋‹ค:

๐Ÿ‘‰ ์„œ๋น„์Šค๊ฐ€ ์ •๋ง๋กœ ์ตœ์‹  ๋ฐ์ดํ„ฐ๋ฅผ ํ•„์š”๋กœ ํ•˜๋Š”๊ฐ€?

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

๋ฐ์ดํ„ฐ ์ผ๊ด€์„ฑ ์š”๊ตฌ๋Š” ์„œ๋น„์Šค๋งˆ๋‹ค ๋‹ค๋ฅด๋‹ค

์ด์ฒ˜๋Ÿผ ๊ฐ ์„œ๋น„์Šค๋งˆ๋‹ค ์š”๊ตฌํ•˜๋Š” ๋ฐ์ดํ„ฐ ์ผ๊ด€์„ฑ ์ˆ˜์ค€์€ ๋‹ค๋ฆ…๋‹ˆ๋‹ค.

์–ด๋–ค ์„œ๋น„์Šค๋Š” ์‹ค์‹œ๊ฐ„ ๋ฐ์ดํ„ฐ๊ฐ€ ํ•„์ˆ˜์ง€๋งŒ, ์–ด๋–ค ์„œ๋น„์Šค๋Š” ์•ฝ๊ฐ„์˜ ์ง€์—ฐ๋œ ๋ฐ์ดํ„ฐ๋กœ๋„ ์ถฉ๋ถ„ํ•ฉ๋‹ˆ๋‹ค.

์ด ์ฐจ์ด๋ฅผ ์ธ์ง€ํ•˜๊ณ , ๊ฐ ์ƒํ™ฉ์— ๋งž๋Š” ๋ฐ์ดํ„ฐ ๊ณต์œ  ์ „๋žต์„ ์„ธ์›Œ์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๊ทธ๊ฒƒ์ด ๋ฐ”๋กœ ํƒ„ํƒ„ํ•˜๊ณ  ํ™•์žฅ ๊ฐ€๋Šฅํ•œ ๋ถ„์‚ฐ ์‹œ์Šคํ…œ์„ ๋งŒ๋“œ๋Š” ํ•ต์‹ฌ์ž…๋‹ˆ๋‹ค.

๊ฒฐ๊ตญ์€ Eventual Consistency

์ œ ์ปค๋ฆฌ์–ด์—์„œ ์ „ํ™˜์ ์ด ๋œ ์ˆœ๊ฐ„์€ ๋ฐ”๋กœ ์ด๊ฒƒ์ด์—ˆ์Šต๋‹ˆ๋‹ค:

์„œ๋น„์Šค๋Š” ๋‹ค๋ฅธ ์„œ๋น„์Šค์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์ž์ฒด DB์— ๋ณต์ œํ•ด์„œ ์œ ์ง€ํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ์‚ฌ์‹ค์„ ์ดํ•ดํ–ˆ์„ ๋•Œ์ž…๋‹ˆ๋‹ค.

๋ฌผ๋ก  ์ด๋Ÿฐ ์ ‘๊ทผ์—๋Š” ์ฑ…์ž„์ด ๋”ฐ๋ฆ…๋‹ˆ๋‹ค.

์ด ๋ฐ์ดํ„ฐ๋ฅผ ์ด๋ฒคํŠธ(event)๋‚˜ ํด๋ง(polling)์„ ํ†ตํ•ด ์ง€์†์ ์œผ๋กœ ๊ฐฑ์‹ ํ•ด์•ผ ํ•˜๋ฉฐ, ์ผ์ • ์‹œ๊ฐ„ ๋™์•ˆ ๋ฐ์ดํ„ฐ๊ฐ€ ์ตœ์‹ ์ด ์•„๋‹ ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒƒ์„ ๊ฐ์ˆ˜ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

ํ•˜์ง€๋งŒ ์ค‘์š”ํ•œ ๊ฑด, ๊ฒฐ๊ตญ์—” ๋ฐ์ดํ„ฐ๊ฐ€ ์ตœ์‹  ์ƒํƒœ๋กœ ์ˆ˜๋ ดํ•œ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์™„๋ฒฝํ•œ ์‹ค์‹œ๊ฐ„์€ ์•„๋‹ˆ์ง€๋งŒ, ํ•ญ์ƒ ์–ด๋А ์‹œ์ ์—์„  ๊ฐฑ์‹ ๋œ ์ƒํƒœ๋กœ ๋”ฐ๋ผ์žก์„ ์ˆ˜ ์žˆ๋‹ค๋Š” ๋ณด์žฅ.

๊ทธ๊ฒŒ ๋ฐ”๋กœ Eventual Consistency์˜ ํ•ต์‹ฌ์ž…๋‹ˆ๋‹ค.


๋‚ ์”จ API์™€ ์บ์‹œ์˜ ๊นจ๋‹ฌ์Œ

์ด ๊ฐœ๋…์ด ์ €์—๊ฒŒ ์™„์ „ํžˆ ์™€๋‹ฟ์•˜๋˜ ๊ฑด, ๋‚ ์”จ API๋ฅผ ๋– ์˜ฌ๋ ธ์„ ๋•Œ์˜€์Šต๋‹ˆ๋‹ค.

์‚ฌ์šฉ์ž๊ฐ€ ๋งค๋ฒˆ ๋‚ ์”จ ์ •๋ณด๋ฅผ ํ™•์ธํ•  ๋•Œ๋งˆ๋‹ค ์™ธ๋ถ€ API์— ์š”์ฒญ์„ ๋ณด๋‚ด๋Š” ๋Œ€์‹ , ์ €๋Š” ํ•˜๋ฃจ์— ๋ช‡ ๋ฒˆ ์ •๋„ ๋‚ ์”จ ๋ฐ์ดํ„ฐ๋ฅผ ์ˆ˜์ง‘ํ•ด์„œ DB์— ์ €์žฅํ•ด๋‘๊ณ ,

๊ทธ๊ฑธ ์‚ฌ์šฉ์ž์—๊ฒŒ ์ œ๊ณตํ–ˆ์Šต๋‹ˆ๋‹ค.

์ƒ๊ฐํ•ด๋ณด์„ธ์š” โ€” ์‚ฌ์šฉ์ž ์ž…์žฅ์—์„œ 3์‹œ๊ฐ„ ์ „์˜ ๋‚ ์”จ ์ •๋ณด๋ผ๋„ ๋ณด๋Š” ๋ฐ ํฌ๊ฒŒ ์ง€์žฅ์€ ์—†์Šต๋‹ˆ๋‹ค.

ํ•ญ์ƒ ์ตœ์‹ ์ผ ํ•„์š”๋Š” ์—†์—ˆ๋˜ ๊ฑฐ์ฃ .

์ด ๊ฒฝํ—˜์ด ๊ฐ•ํ•œ ์ผ๊ด€์„ฑ ๋Œ€์‹  ์ ์ง„์  ์ผ๊ด€์„ฑ์„ ์„ ํƒํ•  ์ˆ˜ ์žˆ๋Š” ์กฐ๊ฑด์„ ๋ช…ํ™•ํ•˜๊ฒŒ ์ดํ•ดํ•˜๊ฒŒ ๋งŒ๋“  ๊ณ„๊ธฐ์˜€์Šต๋‹ˆ๋‹ค.


Challenge ์˜ˆ์‹œ์— ์ ์šฉํ•ด๋ณด์ž

์ด์ œ ๋‹ค์‹œ Challenge ์˜ˆ์‹œ๋กœ ๋Œ์•„๊ฐ€ ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

User ์„œ๋น„์Šค์— ๋Œ€ํ•œ ๋™๊ธฐ์  ์˜์กด์„ ์ค„์ด๊ณ , ๊ฐ ์„œ๋น„์Šค๊ฐ€ ํ•„์š”ํ•œ ๋งŒํผ User ์ •๋ณด๋ฅผ ์ž์ฒด์ ์œผ๋กœ ์œ ์ง€ํ•˜๋ฉด ์–ด๋–จ๊นŒ์š”?

  • โœ… Leaderboard ์„œ๋น„์Šค๋Š” ์‚ฌ์šฉ์ž ์•„๋ฐ”ํƒ€์™€ ๋‹‰๋„ค์ž„์„ ์œ„ํ•œ ์ •๋ณด๋ฅผ ๋กœ์ปฌ์— ์œ ์ง€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์‚ฌ์šฉ์ž์—๊ฒŒ ์•ฝ๊ฐ„ ์˜ค๋ž˜๋œ ์ด๋ฏธ์ง€๊ฐ€ ๋ณด์ด๋”๋ผ๋„ ๋Œ€๋ถ€๋ถ„์˜ ๊ฒฝ์šฐ ํฐ ๋ฌธ์ œ๊ฐ€ ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
  • โœ… Challenge ์„œ๋น„์Šค๋„ ๋งˆ์ฐฌ๊ฐ€์ง€์ž…๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด getChallengeDetails ์ฟผ๋ฆฌ์—์„œ ์ฐธ์—ฌ์ž์˜ ์ •๋ณด๋ฅผ ๋ณด์—ฌ์ค˜์•ผ ํ•œ๋‹ค๋ฉด, ์ž์ฒด ํ…Œ์ด๋ธ”์— ๋ณต์ œ๋œ ์‚ฌ์šฉ์ž ๋ฐ์ดํ„ฐ๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ์‘๋‹ตํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • โš ๏ธ Notification ์„œ๋น„์Šค๋Š” ์กฐ๊ธˆ ๋” ๋ฏผ๊ฐํ•œ ์ƒํ™ฉ์ž…๋‹ˆ๋‹ค. ์ด๋ฉ”์ผ์ด ์ž˜๋ชป๋œ ์ฃผ์†Œ๋กœ ๊ฐ€๋ฉด ์•ˆ ๋˜๋‹ˆ๊นŒ์š”. ํ•˜์ง€๋งŒ ์ด ์„œ๋น„์Šค ์—ญ์‹œ UserUpdated ์ด๋ฒคํŠธ๋ฅผ ๊ตฌ๋…ํ•ด์„œ ์ด๋ฉ”์ผ ์ •๋ณด๋ฅผ ๊ฐ€๋Šฅํ•œ ์ตœ์‹  ์ƒํƒœ๋กœ ์œ ์ง€ํ•จ์œผ๋กœ์จ, ์™„๋ฒฝํ•˜์ง€๋Š” ์•Š์•„๋„ ์ถฉ๋ถ„ํžˆ ์‹ ๋ขฐํ•  ์ˆ˜ ์žˆ๋Š” ์ˆ˜์ค€์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๊ฒฐ๊ตญ์€, ๋ณต์ œ + ์ด๋ฒคํŠธ + ์บ์‹ฑ

์˜ค๋Š˜์€ ๊นŠ์ด ๋‹ค๋ฃจ์ง€ ์•Š์•˜์ง€๋งŒ, ์„œ๋น„์Šค ๊ฐ„ ๋ฐ์ดํ„ฐ ๊ณต์œ  ๋ฐฉ์‹์—๋Š” ์—ฌ๋Ÿฌ ๋ฐฉ๋ฒ•์ด ์žˆ์Šต๋‹ˆ๋‹ค.

๊ทธ์ค‘ ํ•˜๋‚˜๋Š” ์ด๋ฒคํŠธ ์†Œ์‹ฑ(event sourcing)๊ณผ ๋กœ์ปฌ ์บ์‹ฑ(materialized view)์„ ๊ฒฐํ•ฉํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์ด๋Ÿฐ ๋ฐฉ์‹์œผ๋กœ ๊ตฌ์„ฑ๋œ ์•„ํ‚คํ…์ฒ˜๋Š” ํ™•์žฅ ๊ฐ€๋Šฅ์„ฑ, ํšŒ๋ณตํƒ„๋ ฅ์„ฑ, ์‘๋‹ต ์†๋„ ์ธก๋ฉด์—์„œ ๋งค์šฐ ๊ฐ•๋ ฅํ•ฉ๋‹ˆ๋‹ค.

๋‹ค์Œ ํฌ์ŠคํŠธ์—์„œ๋Š” ์ด ์•„ํ‚คํ…์ฒ˜๋ฅผ ์‹ค์ œ๋กœ ์–ด๋–ป๊ฒŒ ์„ค๊ณ„ํ•˜๊ณ  ์ ์šฉํ•  ์ˆ˜ ์žˆ์„์ง€์— ๋Œ€ํ•ด ์ž์„ธํžˆ ๋‹ค๋ค„๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

์ง€๊ธˆ๊นŒ์ง€์˜ ๋‚ด์šฉ์„ ํ•œ ๋ฌธ์žฅ์œผ๋กœ ์ •๋ฆฌํ•˜๋ฉด ์ด๋ ‡์Šต๋‹ˆ๋‹ค:

๋ชจ๋“  ๋ฐ์ดํ„ฐ๊ฐ€ ์‹ค์‹œ๊ฐ„์ผ ํ•„์š”๋Š” ์—†๋‹ค. ์ค‘์š”ํ•œ ๊ฑด ์„œ๋น„์Šค์˜ ๋ชฉ์ ์— ๋งž๋Š” ์ผ๊ด€์„ฑ ์ˆ˜์ค€์„ ์„ ํƒํ•˜๋Š” ๊ฒƒ.

๐Ÿ”š ๋งˆ๋ฌด๋ฆฌํ•˜๋ฉฐ

๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค๋ฅผ ์ฒ˜์Œ ์ ‘ํ–ˆ์„ ๋•Œ ์ €์ฒ˜๋Ÿผ โ€œ๋ฐ์ดํ„ฐ๋ฅผ ๊ณต์œ ํ•˜๋ฉด ์•ˆ ๋œ๋‹คโ€๋Š” ๋ฌธ์žฅ์„ ๋„ˆ๋ฌด ๋ฌธ์ž ๊ทธ๋Œ€๋กœ ๋ฐ›์•„๋“ค์ด๊ณ  ์žˆ๋Š” ๊ฐœ๋ฐœ์ž๋“ค์ด ๋งŽ์Šต๋‹ˆ๋‹ค.

ํ•˜์ง€๋งŒ ์ด ์›์น™์€ ์ •ํ™•ํžˆ ๋งํ•˜๋ฉด โ€œ์ง„์‹ค์˜ ์›์ฒœ(Source of Truth)์„ ๊ณต์œ ํ•˜๋ฉด ์•ˆ ๋œ๋‹คโ€๋Š” ์˜๋ฏธ์ผ ๋ฟ์ž…๋‹ˆ๋‹ค.

๋‹ค๋ฅธ ์„œ๋น„์Šค๊ฐ€ ์†Œ์œ ํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ๋กœ์ปฌ์— ๋ณต์‚ฌํ•˜์—ฌ ์œ ์ง€ํ•˜๋Š” ๊ฒƒ์€ ์ „ํ˜€ ๋ฌธ์ œ๊ฐ€ ๋˜์ง€ ์•Š์œผ๋ฉฐ,

์ด๋Š” ์˜คํžˆ๋ ค Eventual Consistency(์ ์ง„์  ์ผ๊ด€์„ฑ)์˜ ์ฒ ํ•™์„ ์ถฉ์‹คํžˆ ๋ฐ˜์˜ํ•œ ์ ‘๊ทผ์ž…๋‹ˆ๋‹ค.

profile
๊ฐœ๋ฐœ์— ์ง‘์ค‘ํ•  ์ˆ˜ ์žˆ๋Š”, ์ด์Šˆ๋ฅผ ์ค„์ด๋Š” ํ™˜๊ฒฝ์„ ๋งŒ๋“ค๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค.

0๊ฐœ์˜ ๋Œ“๊ธ€