Kafka์—์„œ ๋น„๋™๊ธฐ API๋ฅผ ํ™œ์šฉํ•œ Refund Tool ์„œ๋น„์Šค ๊ฐœ๋ฐœ ๊ฒฝํ—˜

๊ฐ„์†Œํ™”๋œ ํ”„๋กœ์„ธ์Šค์™€ ์ˆ˜์‹ญ ๊ฐœ์˜ ์ƒํ˜ธ ์—ฐ๊ฒฐ๋œ ์„œ๋น„์Šค๋ฅผ ๊ฐ–์ถ˜ Lamoda์™€ ๊ฐ™์€ ๋Œ€๊ธฐ์—…์ด ์ ‘๊ทผ ๋ฐฉ์‹์„ ํฌ๊ฒŒ ๋ฐ”๊พธ๋„๋ก ๊ฐ•์š”ํ•  ์ˆ˜ ์žˆ๋Š” ์ด์œ ๋Š” ๋ฌด์—‡์ผ๊นŒ์š”? ๋™๊ธฐ ๋ถ€์—ฌ๋Š” ์ž…๋ฒ•์—์„œ๋ถ€ํ„ฐ ๋ชจ๋“  ํ”„๋กœ๊ทธ๋ž˜๋จธ์—๊ฒŒ ๋‚ด์žฌ๋œ ์‹คํ—˜ ์š•๊ตฌ์— ์ด๋ฅด๊ธฐ๊นŒ์ง€ ์™„์ „ํžˆ ๋‹ค๋ฅผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๊ทธ๋Ÿฌ๋‚˜ ์ด๊ฒƒ์ด ์ถ”๊ฐ€ ํ˜œํƒ์„ ๊ธฐ๋Œ€ํ•  ์ˆ˜ ์—†๋‹ค๋Š” ์˜๋ฏธ๋Š” ์•„๋‹™๋‹ˆ๋‹ค. Sergey Zaika๋Š” Kafka์—์„œ ์ด๋ฒคํŠธ ์ค‘์‹ฌ API๋ฅผ ๊ตฌํ˜„ํ•˜๋ฉด ์ •ํ™•ํžˆ ๋ฌด์—‡์„ ์–ป์„ ์ˆ˜ ์žˆ๋Š”์ง€ ์•Œ๋ ค์ค„ ๊ฒƒ์ž…๋‹ˆ๋‹ค(์†Œ์ˆ˜์˜). ๊ฑฐ๋ฌผ๊ณผ ํฅ๋ฏธ๋กœ์šด ๋ฐœ๊ฒฌ์— ๋Œ€ํ•œ ์ด์•ผ๊ธฐ๋„ ๋ถ„๋ช…ํžˆ ์žˆ์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์‹คํ—˜์€ ๊ทธ๊ฒƒ ์—†์ด๋Š” ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

Kafka์—์„œ ๋น„๋™๊ธฐ API๋ฅผ ํ™œ์šฉํ•œ Refund Tool ์„œ๋น„์Šค ๊ฐœ๋ฐœ ๊ฒฝํ—˜

๊ณ ์ง€ ์‚ฌํ•ญ: ์ด ๊ธฐ์‚ฌ๋Š” Sergey๊ฐ€ 2018๋…„ XNUMX์›” HighLoad++์—์„œ ๊ฐœ์ตœํ•œ ๋ชจ์ž„์˜ ์ž๋ฃŒ๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•ฉ๋‹ˆ๋‹ค. Kafka์™€ ํ•จ๊ป˜ ์ž‘์—…ํ•œ Lamoda์˜ ๋ผ์ด๋ธŒ ๊ฒฝํ—˜์€ ์ผ์ •์— ๋Œ€ํ•œ ๋‹ค๋ฅธ ๋ณด๊ณ ์„œ๋งŒํผ์ด๋‚˜ ์ฒญ์ทจ์ž๋ฅผ ๋งค๋ฃŒ์‹œ์ผฐ์Šต๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” ์ด๊ฒƒ์ด ๊ฐ™์€ ์ƒ๊ฐ์„ ๊ฐ€์ง„ ์‚ฌ๋žŒ๋“ค์„ ํ•ญ์ƒ ์ฐพ์„ ์ˆ˜ ์žˆ๊ณ  ์ฐพ์•„์•ผ ํ•œ๋‹ค๋Š” ์‚ฌ์‹ค์„ ๋ณด์—ฌ์ฃผ๋Š” ํ›Œ๋ฅญํ•œ ์˜ˆ๋ผ๊ณ  ์ƒ๊ฐํ•˜๋ฉฐ HighLoad++์˜ ์ฃผ์ตœ์ž๋Š” ์ด์— ๋„์›€์ด ๋˜๋Š” ๋ถ„์œ„๊ธฐ๋ฅผ ์กฐ์„ฑํ•˜๊ธฐ ์œ„ํ•ด ๊ณ„์† ๋…ธ๋ ฅํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๊ณผ์ •์— ๋Œ€ํ•ด

Lamoda๋Š” ์ž์ฒด ์—ฐ๋ฝ ์„ผํ„ฐ, ๋ฐฐ์†ก ์„œ๋น„์Šค(๋ฐ ๋งŽ์€ ๊ณ„์—ด์‚ฌ), ์‚ฌ์ง„ ์ŠคํŠœ๋””์˜ค, ๋Œ€๊ทœ๋ชจ ์ฐฝ๊ณ ๋ฅผ ๊ฐ–์ถ”๊ณ  ์žˆ์œผ๋ฉฐ ์ด ๋ชจ๋“  ๊ฒƒ์ด ์ž์ฒด ์†Œํ”„ํŠธ์›จ์–ด์—์„œ ์‹คํ–‰๋˜๋Š” ๋Œ€๊ทœ๋ชจ ์ „์ž ์ƒ๊ฑฐ๋ž˜ ํ”Œ๋žซํผ์ž…๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ์„œ๋น„์Šค ์ค‘ ์ผ๋ถ€ ๋˜๋Š” ์ „๋ถ€๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ณ  ์ œํ’ˆ์— ๋Œ€ํ•œ ์ตœ์‹  ์ •๋ณด๋ฅผ ์•Œ๊ณ  ์‹ถ์–ดํ•˜๋Š” ์ˆ˜์‹ญ ๊ฐ€์ง€ ๊ฒฐ์ œ ๋ฐฉ๋ฒ•, b2b ํŒŒํŠธ๋„ˆ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ๋˜ํ•œ Lamoda๋Š” ๋Ÿฌ์‹œ์•„ ์—ฐ๋ฐฉ ์™ธ์— XNUMX๊ฐœ๊ตญ์—์„œ ์šด์˜๋˜๊ณ  ์žˆ์œผ๋ฉฐ ๋ชจ๋“  ๊ฒƒ์ด ์•ฝ๊ฐ„ ๋‹ค๋ฆ…๋‹ˆ๋‹ค. ์ „์ฒด์ ์œผ๋กœ ์ƒˆ๋กœ์šด ์ฃผ๋ฌธ์„ ๊ตฌ์„ฑํ•˜๋Š” ๋ฐฉ๋ฒ•์€ ์•„๋งˆ๋„ XNUMX๊ฐ€์ง€๊ฐ€ ๋„˜์„ ๊ฒƒ์ด๋ฉฐ, ์ด๋ฅผ ์ž์ฒด ๋ฐฉ์‹์œผ๋กœ ์ฒ˜๋ฆฌํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ด ๋ชจ๋“  ๊ฒƒ์€ ๋•Œ๋•Œ๋กœ ๋ช…ํ™•ํ•˜์ง€ ์•Š์€ ๋ฐฉ์‹์œผ๋กœ ํ†ต์‹ ํ•˜๋Š” ์ˆ˜์‹ญ ๊ฐ€์ง€ ์„œ๋น„์Šค์˜ ๋„์›€์œผ๋กœ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค. ์ฃผ๋ฌธ ์ƒํƒœ๋ฅผ ์ฃผ์š” ์ฑ…์ž„์œผ๋กœ ํ•˜๋Š” ์ค‘์•™ ์‹œ์Šคํ…œ๋„ ์žˆ์Šต๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” ๊ทธ๋…€๋ฅผ BOB๋ผ๊ณ  ๋ถ€๋ฆ…๋‹ˆ๋‹ค. ์ €๋Š” ๊ทธ๋…€์™€ ํ•จ๊ป˜ ์ผํ•ฉ๋‹ˆ๋‹ค.

์ด๋ฒคํŠธ ๊ธฐ๋ฐ˜ API๋ฅผ ๊ฐ–์ถ˜ ํ™˜๋ถˆ ๋„๊ตฌ

์ด๋ฒคํŠธ ์ค‘์‹ฌ์ด๋ผ๋Š” ๋‹จ์–ด๋Š” ์ƒ๋‹นํžˆ ํ—˜๋‚œํ•œ ํ‘œํ˜„์ž…๋‹ˆ๋‹ค. ์กฐ๊ธˆ ๋” ๋‚˜์•„๊ฐ€ ์ด๊ฒƒ์ด ์˜๋ฏธํ•˜๋Š” ๋ฐ”๋ฅผ ๋” ์ž์„ธํžˆ ์ •์˜ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค. Kafka์—์„œ ์ด๋ฒคํŠธ ์ค‘์‹ฌ API ์ ‘๊ทผ ๋ฐฉ์‹์„ ์‹œ๋„ํ•˜๊ธฐ๋กœ ๊ฒฐ์ •ํ•œ ์ƒํ™ฉ๋ถ€ํ„ฐ ์‹œ์ž‘ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

Kafka์—์„œ ๋น„๋™๊ธฐ API๋ฅผ ํ™œ์šฉํ•œ Refund Tool ์„œ๋น„์Šค ๊ฐœ๋ฐœ ๊ฒฝํ—˜

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

ํ•˜์ง€๋งŒ ๋ฒ•๋ฅ  ๋ณ€๊ฒฝ์œผ๋กœ ์ธํ•ด ๋ฐ˜ํ™˜์ด ๋”์šฑ ๋ณต์žกํ•ด์กŒ๊ณ  ์ด๋ฅผ ์œ„ํ•ด ๋ณ„๋„์˜ ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค๋ฅผ ๊ตฌํ˜„ํ•ด์•ผ ํ–ˆ์Šต๋‹ˆ๋‹ค.

Kafka์—์„œ ๋น„๋™๊ธฐ API๋ฅผ ํ™œ์šฉํ•œ Refund Tool ์„œ๋น„์Šค ๊ฐœ๋ฐœ ๊ฒฝํ—˜

์šฐ๋ฆฌ์˜ ๋™๊ธฐ:

  1. ๋ฒ• FZ-54 - ๊ฐ„๋‹จํžˆ ๋งํ•ด์„œ, ๋ฒ•์— ๋”ฐ๋ผ ๋ฐ˜ํ’ˆ์ด๋“  ์˜์ˆ˜์ฆ์ด๋“  ๋ชจ๋“  ๊ธˆ์ „ ๊ฑฐ๋ž˜์— ๋Œ€ํ•ด ๋ช‡ ๋ถ„์ด๋ผ๋Š” ๋งค์šฐ ์งง์€ SLA ๋‚ด์— ์„ธ๋ฌด์„œ์— ๋ณด๊ณ ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” ์ „์ž์ƒ๊ฑฐ๋ž˜ ํšŒ์‚ฌ๋กœ์„œ ๊ฝค ๋งŽ์€ ์—…๋ฌด๋ฅผ ์ˆ˜ํ–‰ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ๊ธฐ์ˆ ์ ์œผ๋กœ ์ด๋Š” ์ƒˆ๋กœ์šด ์ฑ…์ž„(๋”ฐ๋ผ์„œ ์ƒˆ๋กœ์šด ์„œ๋น„์Šค)๊ณผ ๊ด€๋ จ๋œ ๋ชจ๋“  ์‹œ์Šคํ…œ์˜ ๊ฐœ์„ ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค.
  2. ๋ฐฅ ๋ถ„ํ•  BOB์˜ ๋น„ํ•ต์‹ฌ ์ฑ…์ž„์„ ์™„ํ™”ํ•˜๊ณ  ์ „๋ฐ˜์ ์ธ ๋ณต์žก์„ฑ์„ ์ค„์ด๊ธฐ ์œ„ํ•œ ํšŒ์‚ฌ ๋‚ด๋ถ€ ํ”„๋กœ์ ํŠธ์ž…๋‹ˆ๋‹ค.

Kafka์—์„œ ๋น„๋™๊ธฐ API๋ฅผ ํ™œ์šฉํ•œ Refund Tool ์„œ๋น„์Šค ๊ฐœ๋ฐœ ๊ฒฝํ—˜

์ด ๋‹ค์ด์–ด๊ทธ๋žจ์€ ์ฃผ์š” Lamoda ์‹œ์Šคํ…œ์„ ๋ณด์—ฌ์ค๋‹ˆ๋‹ค. ์ด์ œ๋Š” ๋Œ€๋ถ€๋ถ„์ด ๋” ๋งŽ์•„์กŒ์Šต๋‹ˆ๋‹ค. ์ถ•์†Œ๋˜๋Š” ๋ชจ๋†€๋ฆฌ์Šค ์ฃผ๋ณ€์˜ 5~10๊ฐœ ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค ์ง‘ํ•ฉ. ์ฒœ์ฒœํžˆ ์„ฑ์žฅํ•˜๊ณ  ์žˆ์ง€๋งŒ ์ค‘์•™์—์„œ ์„ ํƒํ•œ ์กฐ๊ฐ์„ ๋ฐฐํฌํ•˜๋Š” ๊ฒƒ์ด ๋ฌด์„ญ๊ธฐ ๋•Œ๋ฌธ์— ๋” ์ž‘๊ฒŒ ๋งŒ๋“ค๋ ค๊ณ  ๋…ธ๋ ฅํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์กฐ๊ฐ์ด ๋–จ์–ด์ง€๋Š” ๊ฒƒ์„ ํ—ˆ์šฉํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” ๋ชจ๋“  ๊ตํ™˜(ํ™”์‚ดํ‘œ)์„ ์˜ˆ์•ฝํ•ด์•ผ ํ•˜๋ฉฐ ๊ทธ ์ค‘ ํ•˜๋‚˜๋ผ๋„ ์‚ฌ์šฉ ๋ถˆ๊ฐ€๋Šฅํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ์‚ฌ์‹ค์„ ๊ณ ๋ คํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

BOB์—๋Š” ๊ฒฐ์ œ ์‹œ์Šคํ…œ, ๋ฐฐ์†ก ์‹œ์Šคํ…œ, ์•Œ๋ฆผ ์‹œ์Šคํ…œ ๋“ฑ ๋งŽ์€ ๊ฑฐ๋ž˜์†Œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

๊ธฐ์ˆ ์ ์œผ๋กœ BOB๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

  • ~150๊ฐœ์˜ ์ฝ”๋“œ ๋ผ์ธ + ~100๊ฐœ์˜ ํ…Œ์ŠคํŠธ ๋ผ์ธ;
  • php7.2 + Zend 1 ๋ฐ Symfony ๊ตฌ์„ฑ ์š”์†Œ 3;
  • 100๊ฐœ ์ด์ƒ์˜ API ๋ฐ ~50๊ฐœ์˜ ์•„์›ƒ๋ฐ”์šด๋“œ ํ†ตํ•ฉ
  • 4๊ฐœ๊ตญ์€ ๊ฐ์ž์˜ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์„ ๊ฐ€์ง€๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

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

๋ฐ˜ํ’ˆ ์ ˆ์ฐจ

์ฒ˜์Œ์—๋Š” BOB์™€ ๊ฒฐ์ œ๋ผ๋Š” ๋‘ ๊ฐ€์ง€ ์‹œ์Šคํ…œ์ด ํ”„๋กœ์„ธ์Šค์— ์ฐธ์—ฌํ•ฉ๋‹ˆ๋‹ค. ์ด์ œ ๋‘ ๊ฐ€์ง€๊ฐ€ ๋” ๋‚˜ํƒ€๋‚ฉ๋‹ˆ๋‹ค.

  • ์žฌ์ •ํ™” ์„œ๋น„์Šค(Fiscalization Service)๋Š” ์žฌ์ •ํ™” ๋ฐ ์™ธ๋ถ€ ์„œ๋น„์Šค์™€์˜ ์˜์‚ฌ์†Œํ†ต ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•ฉ๋‹ˆ๋‹ค.
  • BOB๋ฅผ ๋ถ€ํ’€๋ฆฌ์ง€ ์•Š๋„๋ก ์ƒˆ๋กœ์šด ๊ตํ™˜์„ ํฌํ•จํ•˜๋Š” ํ™˜๋ถˆ ๋„๊ตฌ์ž…๋‹ˆ๋‹ค.

์ด์ œ ํ”„๋กœ์„ธ์Šค๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

Kafka์—์„œ ๋น„๋™๊ธฐ API๋ฅผ ํ™œ์šฉํ•œ Refund Tool ์„œ๋น„์Šค ๊ฐœ๋ฐœ ๊ฒฝํ—˜

  1. BOB๊ฐ€ ํ™˜๋ถˆ ์š”์ฒญ์„ ๋ฐ›์•˜์Šต๋‹ˆ๋‹ค.
  2. BOB๊ฐ€ ์ด ํ™˜๋ถˆ ๋„๊ตฌ์— ๋Œ€ํ•ด ์ด์•ผ๊ธฐํ•ฉ๋‹ˆ๋‹ค.
  3. ํ™˜๋ถˆ ๋„๊ตฌ๋Š” ๊ฒฐ์ œ ์ˆ˜๋‹จ์— "๊ธˆ์•ก์„ ๋ฐ˜ํ™˜ํ•˜์„ธ์š”"๋ผ๊ณ  ์•Œ๋ ค์ค๋‹ˆ๋‹ค.
  4. ์ง€๋ถˆ์€ ๋ˆ์„ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.
  5. ํ™˜๋ถˆ ๋„๊ตฌ์™€ BOB๋Š” ํ˜„์žฌ ๋‘˜ ๋‹ค ํ•„์š”ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ƒํƒœ๋ฅผ ์„œ๋กœ ๋™๊ธฐํ™”ํ•ฉ๋‹ˆ๋‹ค. BOB์—๋Š” UI, ํšŒ๊ณ„ ๋ณด๊ณ ์„œ ๋ฐ ์ผ๋ฐ˜์ ์œผ๋กœ ์‰ฝ๊ฒŒ ์ „์†กํ•  ์ˆ˜ ์—†๋Š” ๋งŽ์€ ๋ฐ์ดํ„ฐ๊ฐ€ ์žˆ์œผ๋ฏ€๋กœ ํ™˜๋ถˆ ๋„๊ตฌ๋กœ ์™„์ „ํžˆ ์ „ํ™˜ํ•  ์ค€๋น„๊ฐ€ ๋˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค. ์˜์ž XNUMX๊ฐœ์— ์•‰์•„์•ผ ํ•ฉ๋‹ˆ๋‹ค.
  6. ์žฌ์ •ํ™” ์š”์ฒญ์ด ์‚ฌ๋ผ์ง‘๋‹ˆ๋‹ค.

๊ฒฐ๊ณผ์ ์œผ๋กœ ์šฐ๋ฆฌ๋Š” ๋ชจ๋“  ๊ฒƒ์ด ์‹œ์ž‘๋œ ์ด๋ฒคํŠธ ๋ฒ„์Šค์ธ Kafka์—์„œ ์ผ์ข…์˜ ์ด๋ฒคํŠธ ๋ฒ„์Šค๋ฅผ ๋งŒ๋“ค์—ˆ์Šต๋‹ˆ๋‹ค. ๋งŒ์„ธ, ์ด์ œ ๋‹จ์ผ ์‹คํŒจ ์ง€์ (ํ’์ž)์ด ์ƒ๊ฒผ์Šต๋‹ˆ๋‹ค.

Kafka์—์„œ ๋น„๋™๊ธฐ API๋ฅผ ํ™œ์šฉํ•œ Refund Tool ์„œ๋น„์Šค ๊ฐœ๋ฐœ ๊ฒฝํ—˜

์žฅ์ ๊ณผ ๋‹จ์ ์€ ๊ฝค ๋ถ„๋ช…ํ•ฉ๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” ๋ฒ„์Šค๋ฅผ ๋งŒ๋“ค์—ˆ๊ณ  ์ด๋Š” ์ด์ œ ๋ชจ๋“  ์„œ๋น„์Šค๊ฐ€ ๋ฒ„์Šค์— ์˜์กดํ•œ๋‹ค๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค. ์ด๋Š” ์„ค๊ณ„๋ฅผ ๋‹จ์ˆœํ™”ํ•˜์ง€๋งŒ ์‹œ์Šคํ…œ์— ๋‹จ์ผ ์‹คํŒจ ์ง€์ ์„ ๋„์ž…ํ•ฉ๋‹ˆ๋‹ค. Kafka๊ฐ€ ์ถฉ๋Œํ•˜๊ณ  ํ”„๋กœ์„ธ์Šค๊ฐ€ ์ค‘์ง€๋ฉ๋‹ˆ๋‹ค.

์ด๋ฒคํŠธ ์ค‘์‹ฌ API๋ž€?

์ด ์งˆ๋ฌธ์— ๋Œ€ํ•œ ์ข‹์€ ๋Œ€๋‹ต์€ Martin Fowler์˜ ๋ณด๊ณ ์„œ(GOTO 2017)์— ์žˆ์Šต๋‹ˆ๋‹ค. "์ด๋ฒคํŠธ ์ค‘์‹ฌ ์•„ํ‚คํ…์ฒ˜์˜ ๋‹ค์–‘ํ•œ ์˜๋ฏธ".

๊ฐ„๋žตํ•˜๊ฒŒ ์šฐ๋ฆฌ๊ฐ€ ํ•œ ์ผ:

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

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

ํ™˜๋ถˆ ๋„๊ตฌ ์„œ๋น„์Šค ๋กœ๋“œ๋˜์ง€ ์•Š์Œ, ๊ทธ๋ž˜์„œ Kafka์—๋Š” ํ•„์š”์„ฑ๋ณด๋‹ค ํŽœ์˜ ๋ง›์ด ๋” ๋งŽ์Šต๋‹ˆ๋‹ค. ํ™˜๋ถˆ ์„œ๋น„์Šค๊ฐ€ ๊ณ ๋ถ€ํ•˜ ํ”„๋กœ์ ํŠธ๊ฐ€ ๋œ๋‹ค๋ฉด ์‚ฌ์—…์ด ๊ธฐ๋ปํ•  ๊ฒƒ ๊ฐ™์ง€๋Š” ์•Š์Šต๋‹ˆ๋‹ค.

์žˆ๋Š” ๊ทธ๋Œ€๋กœ ๋น„๋™๊ธฐ ๊ตํ™˜

๋น„๋™๊ธฐ ๊ตํ™˜์˜ ๊ฒฝ์šฐ PHP ๋ถ€์„œ์—์„œ๋Š” ์ผ๋ฐ˜์ ์œผ๋กœ RabbitMQ๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” ์š”์ฒญ์— ๋Œ€ํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ์ˆ˜์ง‘ํ•˜์—ฌ ๋Œ€๊ธฐ์—ด์— ๋„ฃ์—ˆ๊ณ , ๋™์ผํ•œ ์„œ๋น„์Šค์˜ ์†Œ๋น„์ž๋Š” ์ด๋ฅผ ์ฝ๊ณ  ๋ณด๋ƒˆ์Šต๋‹ˆ๋‹ค(๋˜๋Š” ๋ณด๋‚ด์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค). API ์ž์ฒด์˜ ๊ฒฝ์šฐ Lamoda๋Š” Swagger๋ฅผ ์ ๊ทน์ ์œผ๋กœ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” API๋ฅผ ์„ค๊ณ„ํ•˜๊ณ  ์ด๋ฅผ Swagger๋กœ ์„ค๋ช…ํ•˜๋ฉฐ ํด๋ผ์ด์–ธํŠธ ๋ฐ ์„œ๋ฒ„ ์ฝ”๋“œ๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค. ๋˜ํ•œ ์•ฝ๊ฐ„ ํ–ฅ์ƒ๋œ JSON RPC 2.0์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

์ผ๋ถ€ ์žฅ์†Œ์—์„œ๋Š” ESB ๋ฒ„์Šค๊ฐ€ ์‚ฌ์šฉ๋˜๊ณ  ์ผ๋ถ€๋Š” activeMQ์—์„œ ์‹คํ–‰๋˜์ง€๋งŒ ์ผ๋ฐ˜์ ์œผ๋กœ RabbitMQ - ํ‘œ์ค€.

๋น„๋™๊ธฐ ๊ตํ™˜ ์˜ˆ์ •

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

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

์ด๋ ‡๊ฒŒ ํ–‰๋ณตํ•œ ๊ฒฝ์šฐ์—๋„ ๋Œ€๋žต ๋น„์Šทํ•œ ์‚ฌ์—…์ด ์žˆ๋Š”๋ฐ, ๋Œ€๋žต ๋น„์Šทํ•œ ์†”๋ฃจ์…˜์„ ๋งŒ๋“  Zalando๋ฅผ ํšจ๊ณผ์ ์œผ๋กœ ํ™œ์šฉํ•˜์ง€ ๋ชปํ•œ๋‹ค๋Š” ๊ฒƒ์ด ์•„์ด๋Ÿฌ๋‹ˆํ•ฉ๋‹ˆ๋‹ค.

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

์ด๋ฒคํŠธ ๋ฒ„์Šค

์•„๋‹ˆ๋ฉด ์ด๋ฒคํŠธ ๋ฒ„์Šค. ์ด๊ฒƒ์€ ๋ช‡ ๊ฐ€์ง€ ์ค‘์š”ํ•œ ์—ญํ• ์„ ์ˆ˜ํ–‰ํ•˜๋Š” ์ƒํƒœ ๋น„์ €์žฅ http ๊ฒŒ์ดํŠธ์›จ์ด์ž…๋‹ˆ๋‹ค.

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

์šฐ๋ฆฌ๋Š” ๊ฐ„์†Œํ™”๋œ ํ”„๋กœ์„ธ์Šค๋ฅผ ๊ฐ–์ถ˜ ๋Œ€๊ธฐ์—…์—์„œ ์ผํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์™œ ๋ญ”๊ฐ€๋ฅผ ๋ฐ”๊พธ๋‚˜์š”? ์ด๊ฒƒ์€ ์‹คํ—˜์ด๋‹ค, ์šฐ๋ฆฌ๋Š” ์—ฌ๋Ÿฌ ๊ฐ€์ง€ ์ด์ ์„ ์–ป์„ ๊ฒƒ์œผ๋กœ ๊ธฐ๋Œ€ํ•ฉ๋‹ˆ๋‹ค.

1:n+1 ๊ตํ™˜(์ผ๋Œ€๋‹ค)

Kafka๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์ƒˆ๋กœ์šด ์†Œ๋น„์ž๋ฅผ API์— ๋งค์šฐ ์‰ฝ๊ฒŒ ์—ฐ๊ฒฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

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

BOB์˜ ์ผ๋ถ€์ธ ํ™˜๋ถˆ ๋„๊ตฌ์˜ ๊ฒฝ์šฐ Kafka๋ฅผ ํ†ตํ•ด ๋™๊ธฐํ™”๋ฅผ ์œ ์ง€ํ•˜๋Š” ๊ฒƒ์ด ํŽธ๋ฆฌํ•ฉ๋‹ˆ๋‹ค. ์ง€๋ถˆ์—๋Š” ๋ˆ์ด ๋ฐ˜ํ™˜๋˜์—ˆ๋‹ค๊ณ  ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค. BOB, RT๊ฐ€ ์ด๋ฅผ ๋ฐœ๊ฒฌํ•˜๊ณ  ์ƒํƒœ๋ฅผ ๋ณ€๊ฒฝํ–ˆ์œผ๋ฉฐ Fiscalization Service๊ฐ€ ์ด๋ฅผ ๋ฐœ๊ฒฌํ•˜๊ณ  ์ˆ˜ํ‘œ๋ฅผ ๋ฐœํ–‰ํ–ˆ์Šต๋‹ˆ๋‹ค.

Kafka์—์„œ ๋น„๋™๊ธฐ API๋ฅผ ํ™œ์šฉํ•œ Refund Tool ์„œ๋น„์Šค ๊ฐœ๋ฐœ ๊ฒฝํ—˜

์šฐ๋ฆฌ๋Š” ๊ณ ๊ฐ์—๊ฒŒ ์ฃผ๋ฌธ/๋ฐ˜ํ’ˆ์— ๊ด€ํ•œ ์†Œ์‹์„ ์•Œ๋ฆฌ๋Š” ํ†ตํ•ฉ ์•Œ๋ฆผ ์„œ๋น„์Šค๋ฅผ ๋งŒ๋“ค ๊ณ„ํš์ด ์žˆ์Šต๋‹ˆ๋‹ค. ์ด์ œ ์ด ์ฑ…์ž„์€ ์‹œ์Šคํ…œ ๊ฐ„์— ๋ถ„์‚ฐ๋ฉ๋‹ˆ๋‹ค. Kafka์—์„œ ๊ด€๋ จ ์ •๋ณด๋ฅผ ํฌ์ฐฉํ•˜๊ณ  ์ด์— ์‘๋‹ตํ•˜๋„๋ก ์•Œ๋ฆผ ์„œ๋น„์Šค๋ฅผ ๊ต์œกํ•˜๋Š” ๊ฒƒ๋งŒ์œผ๋กœ๋„ ์ถฉ๋ถ„ํ•ฉ๋‹ˆ๋‹ค(๊ทธ๋ฆฌ๊ณ  ๋‹ค๋ฅธ ์‹œ์Šคํ…œ์—์„œ๋Š” ์ด๋Ÿฌํ•œ ์•Œ๋ฆผ์„ ๋น„ํ™œ์„ฑํ™”ํ•ฉ๋‹ˆ๋‹ค). ์ƒˆ๋กœ์šด ์ง์ ‘ ๊ตํ™˜์€ ํ•„์š”ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

๋ฐ์ดํ„ฐ ์ค‘์‹ฌ

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

๋ณต์ œ ๋กœ๊ทธ

RabbitMQ์ฒ˜๋Ÿผ ๋ฉ”์‹œ์ง€๋ฅผ ์ฝ์€ ํ›„์—๋„ ๋ฉ”์‹œ์ง€๊ฐ€ ์‚ฌ๋ผ์ง€์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ด๋ฒคํŠธ์— ์ฒ˜๋ฆฌํ•˜๊ธฐ์— ์ถฉ๋ถ„ํ•œ ์ •๋ณด๊ฐ€ ํฌํ•จ๋˜์–ด ์žˆ์œผ๋ฉด ๊ฐ์ฒด์— ๋Œ€ํ•œ ์ตœ๊ทผ ๋ณ€๊ฒฝ ๋‚ด์—ญ์ด ์žˆ์œผ๋ฉฐ, ์›ํ•˜๋Š” ๊ฒฝ์šฐ ์ด๋Ÿฌํ•œ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ์ ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

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

Kafka์—์„œ ๋น„๋™๊ธฐ API๋ฅผ ํ™œ์šฉํ•œ Refund Tool ์„œ๋น„์Šค ๊ฐœ๋ฐœ ๊ฒฝํ—˜

๋‹ค์Œ์œผ๋กœ, Kafka์— ์ต์ˆ™ํ•˜์ง€ ์•Š์€ ์‚ฌ๋žŒ๋“ค์„ ์œ„ํ•ด ๋ฌธ์„œ์— ๋Œ€ํ•ด ์กฐ๊ธˆ ๋‹ค์‹œ ์„ค๋ช…ํ•ฉ๋‹ˆ๋‹ค. (๊ทธ๋ฆผ๋„ ๋ฌธ์„œ์—์„œ ๊ฐ€์ ธ์˜จ ๊ฒƒ์ž…๋‹ˆ๋‹ค.)

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

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

๋”ฐ๋ผ์„œ, ๋‹ค๋ฅธ ๋กœ์ง์ด ๊ตฌํ˜„๋  ์ˆ˜ ์žˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, ๋‹ค์–‘ํ•œ ๊ตญ๊ฐ€์— ๋Œ€ํ•ด 4๊ฐœ์˜ ์ธ์Šคํ„ด์Šค์— BOB๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. Lamoda๋Š” ๋Ÿฌ์‹œ์•„, ์นด์žํ์Šคํƒ„, ์šฐํฌ๋ผ์ด๋‚˜, ๋ฒจ๋กœ๋ฃจ์‹œ์— ์žˆ์Šต๋‹ˆ๋‹ค. ๋ณ„๋„๋กœ ๋ฐฐํฌ๋˜๋ฏ€๋กœ ๊ตฌ์„ฑ๊ณผ ์ž์ฒด ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์ด ์•ฝ๊ฐ„ ๋‹ค๋ฆ…๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” ๊ทธ๊ฒƒ์ด ์–ด๋Š ๊ตญ๊ฐ€๋ฅผ ๊ฐ€๋ฆฌํ‚ค๋Š”์ง€ ๋ฉ”์‹œ์ง€์— ํ‘œ์‹œํ•ฉ๋‹ˆ๋‹ค. ๊ฐ ๊ตญ๊ฐ€์˜ ๊ฐ BOB ์†Œ๋น„์ž๋Š” ์„œ๋กœ ๋‹ค๋ฅธ groupId๋กœ ์ฝ๊ณ  ๋ฉ”์‹œ์ง€๊ฐ€ ์ ์šฉ๋˜์ง€ ์•Š์œผ๋ฉด ๊ฑด๋„ˆ๋œ๋‹ˆ๋‹ค. ์ฆ‰์‹œ ์˜คํ”„์…‹ +1์„ ์ปค๋ฐ‹ํ•ฉ๋‹ˆ๋‹ค. ๋™์ผํ•œ ์ฃผ์ œ๋ฅผ ๊ฒฐ์ œ ์„œ๋น„์Šค์—์„œ ์ฝ๋Š” ๊ฒฝ์šฐ ๋ณ„๋„์˜ ๊ทธ๋ฃน์œผ๋กœ ์ฝ์œผ๋ฏ€๋กœ ์˜คํ”„์…‹์ด ๊ต์ฐจํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

์ด๋ฒคํŠธ ์š”๊ตฌ์‚ฌํ•ญ:

  • ๋ฐ์ดํ„ฐ ์™„์ „์„ฑ. ์ด๋ฒคํŠธ๊ฐ€ ์ฒ˜๋ฆฌ๋  ์ˆ˜ ์žˆ์„ ๋งŒํผ ์ถฉ๋ถ„ํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ–๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค.

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

๋ผ๋ชจ๋‹ค์˜ ์นดํ”„์นด

์„ธ ๊ฐ€์ง€ Kafka ์„ค์น˜๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

  1. ๋กœ๊ทธ;
  2. ์—ฐ๊ตฌ๊ฐœ๋ฐœ
  3. ์ด๋ฒคํŠธ ๋ฒ„์Šค.

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

Kafka์—์„œ ๋น„๋™๊ธฐ API๋ฅผ ํ™œ์šฉํ•œ Refund Tool ์„œ๋น„์Šค ๊ฐœ๋ฐœ ๊ฒฝํ—˜

์œ„๋Š” rps ๊ทธ๋ž˜ํ”„์ž…๋‹ˆ๋‹ค. ํ™˜๋ถˆ ํ”„๋กœ์„ธ์Šค๋Š” ์ฒญ๋ก์ƒ‰ ์„ (์˜ˆ, X์ถ•)์œผ๋กœ ํ‘œ์‹œ๋˜์–ด ์žˆ์œผ๋ฉฐ, ๋ถ„ํ™์ƒ‰ ์„ ์€ ์ฝ˜ํ…์ธ  ์—…๋ฐ์ดํŠธ ํ”„๋กœ์„ธ์Šค์ž…๋‹ˆ๋‹ค.

Lamoda ์นดํƒˆ๋กœ๊ทธ์—๋Š” ์ˆ˜๋ฐฑ๋งŒ ๊ฐœ์˜ ์ œํ’ˆ์ด ํฌํ•จ๋˜์–ด ์žˆ์œผ๋ฉฐ ๋ฐ์ดํ„ฐ๋Š” ํ•ญ์ƒ ์—…๋ฐ์ดํŠธ๋ฉ๋‹ˆ๋‹ค. ์ผ๋ถ€ ์ปฌ๋ ‰์…˜์€ ์œ ํ–‰์— ๋’ค๋–จ์–ด์ง€๊ณ , ์ด๋ฅผ ๋Œ€์ฒดํ•˜๊ธฐ ์œ„ํ•ด ์ƒˆ๋กœ์šด ์ปฌ๋ ‰์…˜์ด ์ถœ์‹œ๋˜๋ฉฐ, ์ƒˆ๋กœ์šด ๋ชจ๋ธ์ด ์นดํƒˆ๋กœ๊ทธ์— ์ง€์†์ ์œผ๋กœ ๋“ฑ์žฅํ•ฉ๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” ๋‚ด์ผ ๊ณ ๊ฐ์—๊ฒŒ ๋ฌด์—‡์ด ํฅ๋ฏธ๋กœ์šธ์ง€ ์˜ˆ์ธกํ•˜๋ ค๊ณ  ๋…ธ๋ ฅํ•˜๋ฏ€๋กœ ๋Š์ž„์—†์ด ์ƒˆ๋กœ์šด ๊ฒƒ์„ ๊ตฌ์ž…ํ•˜๊ณ  ์‚ฌ์ง„์„ ์ฐ๊ณ  ์ง„์—ด์žฅ์„ ์—…๋ฐ์ดํŠธํ•ฉ๋‹ˆ๋‹ค.

๋ถ„ํ™์ƒ‰ ํ”ผํฌ๋Š” ์ œํ’ˆ ์—…๋ฐ์ดํŠธ, ์ฆ‰ ์ œํ’ˆ์˜ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์ž…๋‹ˆ๋‹ค. ๋‚จ์ž๋“ค์ด ์‚ฌ์ง„์„ ์ฐ๊ณ , ์‚ฌ์ง„์„ ์ฐ๊ณ , ๋˜ ์ฐ๋Š” ๋ชจ์Šต์ด ๋ณด์ด๋„ค์š”! โ€” ์ด๋ฒคํŠธ ํŒฉ์„ ๋กœ๋“œํ–ˆ์Šต๋‹ˆ๋‹ค.

Lamoda ์ด๋ฒคํŠธ ์‚ฌ์šฉ ์‚ฌ๋ก€

์šฐ๋ฆฌ๋Š” ๋‹ค์Œ ์ž‘์—…์„ ์œ„ํ•ด ๊ตฌ์„ฑ๋œ ์•„ํ‚คํ…์ฒ˜๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

  • ๋ฐ˜ํ’ˆ ์ƒํƒœ ์ถ”์ : ๋ชจ๋“  ๊ด€๋ จ ์‹œ์Šคํ…œ์˜ ํด๋ฆญ ์œ ๋„ ๋ฌธ๊ตฌ ๋ฐ ์ƒํƒœ ์ถ”์ . ๊ฒฐ์ œ, ์ƒํƒœ, ์žฌ์ •ํ™”, ์•Œ๋ฆผ. ์—ฌ๊ธฐ์—์„œ ์šฐ๋ฆฌ๋Š” ์ ‘๊ทผ ๋ฐฉ์‹์„ ํ…Œ์ŠคํŠธํ•˜๊ณ , ๋„๊ตฌ๋ฅผ ๋งŒ๋“ค๊ณ , ๋ชจ๋“  ๋ฒ„๊ทธ๋ฅผ ์ˆ˜์ง‘ํ•˜๊ณ , ๋ฌธ์„œ๋ฅผ ์ž‘์„ฑํ•˜๊ณ , ๋™๋ฃŒ๋“ค์—๊ฒŒ ์‚ฌ์šฉ ๋ฐฉ๋ฒ•์„ ์•Œ๋ ค์ฃผ์—ˆ์Šต๋‹ˆ๋‹ค.
  • ์ œํ’ˆ ์นด๋“œ ์—…๋ฐ์ดํŠธ ์ค‘: ๊ตฌ์„ฑ, ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ, ํŠน์„ฑ. ํ•œ ์‹œ์Šคํ…œ์€ ์ฝ๊ณ (ํ‘œ์‹œ๋จ) ์—ฌ๋Ÿฌ ์‹œ์Šคํ…œ์€ ์”๋‹ˆ๋‹ค.
  • ์ด๋ฉ”์ผ, ํ‘ธ์‹œ ๋ฐ SMS: ์ฃผ๋ฌธ์ด ์ ‘์ˆ˜๋˜์—ˆ์Šต๋‹ˆ๋‹ค, ์ฃผ๋ฌธ์ด ๋„์ฐฉํ–ˆ์Šต๋‹ˆ๋‹ค, ๋ฐ˜ํ’ˆ์ด ์ ‘์ˆ˜๋˜์—ˆ์Šต๋‹ˆ๋‹ค ๋“ฑ, ๊ทธ ์ˆ˜๊ฐ€ ๋งŽ์Šต๋‹ˆ๋‹ค.
  • ์žฌ๊ณ , ์ฐฝ๊ณ  ๋ฆฌ๋‰ด์–ผ โ€” ํ’ˆ๋ชฉ์˜ ์ •๋Ÿ‰์  ์—…๋ฐ์ดํŠธ, ์ˆซ์ž๋งŒ ํฌํ•จ: ์ฐฝ๊ณ  ๋„์ฐฉ, ๋ฐ˜ํ’ˆ. ์ƒํ’ˆ ์˜ˆ์•ฝ๊ณผ ๊ด€๋ จ๋œ ๋ชจ๋“  ์‹œ์Šคํ…œ์€ ์ตœ์‹  ๋ฐ์ดํ„ฐ๋กœ ์ž‘๋™ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ํ˜„์žฌ ์žฌ๊ณ  ์—…๋ฐ์ดํŠธ ์‹œ์Šคํ…œ์€ ๋งค์šฐ ๋ณต์žกํ•˜๋ฏ€๋กœ Kafka์—์„œ๋Š” ์ด๋ฅผ ๋‹จ์ˆœํ™”ํ•  ์˜ˆ์ •์ž…๋‹ˆ๋‹ค.
  • ๋ฐ์ดํ„ฐ ๋ถ„์„ (R&D ๋ถ€์„œ), ML ๋„๊ตฌ, ๋ถ„์„, ํ†ต๊ณ„. ์šฐ๋ฆฌ๋Š” ์ •๋ณด๊ฐ€ ํˆฌ๋ช…ํ•˜๊ธฐ๋ฅผ ์›ํ•ฉ๋‹ˆ๋‹ค. Kafka๋Š” ์ด์— ๋งค์šฐ ์ ํ•ฉํ•ฉ๋‹ˆ๋‹ค.

์ด์ œ ์ง€๋‚œ XNUMX๊ฐœ์›” ๋™์•ˆ ๋ฐœ์ƒํ•œ ํฐ ๋ณ€ํ™”์™€ ํฅ๋ฏธ๋กœ์šด ๋ฐœ๊ฒฌ์— ๋Œ€ํ•œ ๋” ํฅ๋ฏธ๋กœ์šด ๋ถ€๋ถ„์ž…๋‹ˆ๋‹ค.

๋””์ž์ธ ๋ฌธ์ œ

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

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

๋ฐ์ดํ„ฐ ์ŠคํŠธ๋ฆผ

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

ํ•œ ์ฃผ์ œ์—์„œ์š”, ์•„๋‹ˆ๋ฉด ๋‹ค๋ฅธ ์ฃผ์ œ์—์„œ์š”?

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

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

์ƒˆ๋กœ์šด ๋ถ„์•ผ ๋˜๋Š” ์ƒˆ๋กœ์šด ์ด๋ฒคํŠธ?

ํ•˜์ง€๋งŒ ๋™์ผํ•œ ์ด๋ฒคํŠธ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋˜ ๋‹ค๋ฅธ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ๋ชจ๋“  ์ „๋‹ฌ ์‹œ์Šคํ…œ์ด BOB๊ฐ€ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ๋Š” ์ข…๋ฅ˜์˜ DTO๋ฅผ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์€ ์•„๋‹™๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” ๊ทธ๋“ค์—๊ฒŒ ID๋ฅผ ๋ณด๋ƒˆ์ง€๋งŒ ๊ทธ๋“ค์€ ํ•„์š”ํ•˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— ์ €์žฅํ•˜์ง€ ์•Š์•˜๊ณ , ์ด๋ฒคํŠธ ๋ฒ„์Šค ํ”„๋กœ์„ธ์Šค๋ฅผ ์‹œ์ž‘ํ•œ๋‹ค๋Š” ๊ด€์ ์—์„œ ์ด ํ•„๋“œ๋Š” ํ•„์ˆ˜์ž…๋‹ˆ๋‹ค.

์ด ํ•„๋“œ๊ฐ€ ํ•„์ˆ˜๋ผ๋Š” ์ด๋ฒคํŠธ ๋ฒ„์Šค ๊ทœ์น™์„ ๋„์ž…ํ•˜๋ฉด BOB ๋˜๋Š” ์‹œ์ž‘ ์ด๋ฒคํŠธ ํ•ธ๋“ค๋Ÿฌ์—์„œ ์ถ”๊ฐ€ ์œ ํšจ์„ฑ ๊ฒ€์‚ฌ ๊ทœ์น™์„ ์„ค์ •ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์œ ํšจ์„ฑ ๊ฒ€์‚ฌ๊ฐ€ ์„œ๋น„์Šค ์ „๋ฐ˜์— ๊ฑธ์ณ ํ™•์‚ฐ๋˜๊ธฐ ์‹œ์ž‘ํ•ฉ๋‹ˆ๋‹ค. ์ด๋Š” ๊ทธ๋ฆฌ ํŽธ๋ฆฌํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

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

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

์ด๋ฒคํŠธ ๋ฒ„์ „ ๊ด€๋ฆฌ

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

ํŒŒํ‹ฐ์…˜ ์ฝ๊ธฐ ์ˆœ์„œ ๋ณด์žฅ

Kafka ๋‚ด๋ถ€์˜ ์ฃผ์ œ๋Š” ํŒŒํ‹ฐ์…˜์œผ๋กœ ๋‚˜๋‰ฉ๋‹ˆ๋‹ค. ์ด๋Š” ์—”ํ„ฐํ‹ฐ์™€ ๊ฑฐ๋ž˜์†Œ๋ฅผ ์„ค๊ณ„ํ•˜๋Š” ๋™์•ˆ์—๋Š” ๊ทธ๋‹ค์ง€ ์ค‘์š”ํ•˜์ง€ ์•Š์ง€๋งŒ ์ด๋ฅผ ์†Œ๋น„ํ•˜๊ณ  ํ™•์žฅํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ๊ฒฐ์ •ํ•  ๋•Œ๋Š” ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค.

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

์นดํ”„์นด๋Š” ๊ทธ๊ฒƒ๋“ค์„ ์–ด๋–ป๊ฒŒ ๋‚˜๋ˆ„๋‚˜์š”? ๊ฐ ๋ฉ”์‹œ์ง€์—๋Š” ๋ณธ๋ฌธ(JSON์ด ์ €์žฅ๋จ)๊ณผ ํ‚ค๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ํ‚ค์— ํ•ด์‹œ ํ•จ์ˆ˜๋ฅผ ์ฒจ๋ถ€ํ•˜๋ฉด ๋ฉ”์‹œ์ง€๊ฐ€ ์–ด๋Š ํŒŒํ‹ฐ์…˜์— ๋“ค์–ด๊ฐˆ์ง€ ๊ฒฐ์ •๋ฉ๋‹ˆ๋‹ค.

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

์ด๋ฒคํŠธ์™€ ๋ช…๋ น

์ด๊ฒƒ์€ ์šฐ๋ฆฌ๊ฐ€ ์ง๋ฉดํ•œ ๋˜ ๋‹ค๋ฅธ ๋ฌธ์ œ์ž…๋‹ˆ๋‹ค. ์ด๋ฒคํŠธ๋Š” ํŠน์ • ์ด๋ฒคํŠธ์ž…๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ํ•ญ๋ชฉ์ด ์ทจ์†Œ๋˜์—ˆ๊ฑฐ๋‚˜ ํ™˜๋ถˆ์ด ๋ฐœ์ƒํ•œ ๋“ฑ ์–ด๋”˜๊ฐ€์—์„œ ์–ด๋–ค ์ผ์ด ๋ฐœ์ƒํ–ˆ๋‹ค๊ณ  ๋งํ•ฉ๋‹ˆ๋‹ค(something_happened). ๋ˆ„๊ตฐ๊ฐ€ ์ด๋Ÿฌํ•œ ์ด๋ฒคํŠธ๋ฅผ ๋“ฃ๋Š” ๊ฒฝ์šฐ "item cancelled"์— ๋”ฐ๋ผ ํ™˜๋ถˆ ์—”ํ„ฐํ‹ฐ๊ฐ€ ์ƒ์„ฑ๋˜๊ณ  "refund failed"๊ฐ€ ์„ค์ • ์–ด๋”˜๊ฐ€์— ๊ธฐ๋ก๋ฉ๋‹ˆ๋‹ค.

๊ทธ๋Ÿฌ๋‚˜ ์ผ๋ฐ˜์ ์œผ๋กœ ์ด๋ฒคํŠธ๋ฅผ ๋””์ž์ธํ•  ๋•Œ ์ด๋ฒคํŠธ๋ฅผ ํ—›๋˜์ด ์ž‘์„ฑํ•˜๊ณ  ์‹ถ์ง€๋Š” ์•Š์Šต๋‹ˆ๋‹ค. ๋ˆ„๊ตฐ๊ฐ€๊ฐ€ ์ด๋ฒคํŠธ๋ฅผ ์ฝ์„ ๊ฒƒ์ด๋ผ๋Š” ์‚ฌ์‹ค์— ์˜์กดํ•ฉ๋‹ˆ๋‹ค. Something_happened(item_canceled, Refund_refunded)๊ฐ€ ์•„๋‹Œ, Something_should_be_done์„ ์“ฐ๊ณ  ์‹ถ์€ ์œ ํ˜น์ด ํฝ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, ์ƒํ’ˆ์„ ๋ฐ˜ํ’ˆํ•  ์ค€๋น„๊ฐ€ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

ํ•œํŽธ์œผ๋กœ๋Š” ์ด๋ฒคํŠธ๊ฐ€ ์–ด๋–ป๊ฒŒ ์‚ฌ์šฉ๋  ๊ฒƒ์ธ์ง€ ์ œ์•ˆํ•ฉ๋‹ˆ๋‹ค. ๋ฐ˜๋ฉด์— ์ผ๋ฐ˜์ ์ธ ์ด๋ฒคํŠธ ์ด๋ฆ„์ฒ˜๋Ÿผ ๋“ค๋ฆฌ์ง€๋Š” ์•Š์Šต๋‹ˆ๋‹ค. ๊ฒŒ๋‹ค๊ฐ€ ์—ฌ๊ธฐ์—์„œ do_something ๋ช…๋ น๊นŒ์ง€ ๋ฉ€์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ๋ˆ„๊ตฐ๊ฐ€๊ฐ€ ์ด ์ด๋ฒคํŠธ๋ฅผ ์ฝ์—ˆ๋‹ค๋Š” ๋ณด์žฅ์€ ์—†์Šต๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๋งŒ์•ฝ ๋‹น์‹ ์ด ๊ทธ๊ฒƒ์„ ์ฝ์œผ๋ฉด, ๋‹น์‹ ์€ ๊ทธ๊ฒƒ์„ ์„ฑ๊ณต์ ์œผ๋กœ ์ฝ์€ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๋งŒ์•ฝ ๋‹น์‹ ์ด ๊ทธ๊ฒƒ์„ ์„ฑ๊ณต์ ์œผ๋กœ ์ฝ์—ˆ๋‹ค๋ฉด ๋‹น์‹ ์€ ๋ญ”๊ฐ€๋ฅผ ํ–ˆ๋‹ค๋Š” ๊ฒƒ์ด๊ณ , ๊ทธ ๋ญ”๊ฐ€๋Š” ์„ฑ๊ณตํ•œ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ด๋ฒคํŠธ๊ฐ€ do_something์ด ๋˜๋Š” ์ˆœ๊ฐ„ ํ”ผ๋“œ๋ฐฑ์ด ํ•„์š”ํ•˜๊ฒŒ ๋˜๋Š”๋ฐ ๊ทธ๊ฒŒ ๋ฌธ์ œ๊ฐ€ ๋ฉ๋‹ˆ๋‹ค.

Kafka์—์„œ ๋น„๋™๊ธฐ API๋ฅผ ํ™œ์šฉํ•œ Refund Tool ์„œ๋น„์Šค ๊ฐœ๋ฐœ ๊ฒฝํ—˜

RabbitMQ์˜ ๋น„๋™๊ธฐ ๊ตํ™˜์—์„œ ๋ฉ”์‹œ์ง€๋ฅผ ์ฝ์„ ๋•Œ http๋กœ ์ด๋™ํ•˜๋ฉด ์ตœ์†Œํ•œ ๋ฉ”์‹œ์ง€๊ฐ€ ์ˆ˜์‹ ๋˜์—ˆ๋‹ค๋Š” ์‘๋‹ต์„ ๋ฐ›๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. ์นดํ”„์นด์— ๊ธ€์„ ์“ฐ๋‹ค ๋ณด๋ฉด ์นดํ”„์นด์— ์“ด ๋ฉ”์‹œ์ง€๊ฐ€ ์žˆ๋Š”๋ฐ ์–ด๋–ป๊ฒŒ ์ฒ˜๋ฆฌ๋๋Š”์ง€ ์ „ํ˜€ ์•Œ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

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

๋‰˜์•™์Šค

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

์šฐ๋ฆฌ๋Š” ๊ทธ๊ฒƒ์— ๋Œ€ํ•ด ์•Œ๊ณ  ์žˆ์—ˆ๊ณ , ๊ทธ๊ฒƒ์„ ๋ฏฟ์—ˆ์ง€๋งŒ, ๊ทธ๋Ÿฐ ์ผ์ด ์ผ์–ด๋‚ฌ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์ด๋Š” ์ด๋ฒคํŠธ ๋ฒ„์Šค์˜ ๊ด€์ ์—์„œ๋Š” ์ด๋ฒคํŠธ๊ฐ€ ์œ ํšจํ•˜๊ณ  ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์œ ํšจ์„ฑ ๊ฒ€์‚ฌ๊ธฐ์˜ ๊ด€์ ์—์„œ๋Š” ์ด๋ฒคํŠธ๊ฐ€ ์œ ํšจํ–ˆ์ง€๋งŒ PostgreSQL์˜ ๊ด€์ ์—์„œ๋Š” ์œ ํšจํ•˜์ง€ ์•Š์•˜๊ธฐ ๋•Œ๋ฌธ์— ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค. UNSIGNED INT๊ฐ€ ์žˆ๋Š” MySQL, ์ƒˆ๋กœ ์ž‘์„ฑ๋œ ์‹œ์Šคํ…œ์—๋Š” INT๋งŒ ์žˆ๋Š” PostgreSQL์ด ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ์˜ ์‚ฌ์ด์ฆˆ๋Š” ์กฐ๊ธˆ ์ž‘์•„์„œ ์ด๋“œ๋„ ๋งž์ง€ ์•Š์•˜๋‹ค. Symfony๋Š” ์˜ˆ์™ธ์ ์œผ๋กœ ์‚ฌ๋งํ–ˆ์Šต๋‹ˆ๋‹ค. ๋ฌผ๋ก  ์šฐ๋ฆฌ๋Š” ์˜ˆ์™ธ์— ์˜์กดํ•˜๊ณ  ์ด ์˜คํ”„์…‹์„ ์ปค๋ฐ‹ํ•˜๋ ค๊ณ  ํ–ˆ๊ธฐ ๋•Œ๋ฌธ์— ์˜ˆ์™ธ๋ฅผ ํฌ์ฐฉํ–ˆ์ง€๋งŒ ๊ทธ ์ „์—๋Š” ๋ฉ”์‹œ์ง€๊ฐ€ ์„ฑ๊ณต์ ์œผ๋กœ ์ฒ˜๋ฆฌ๋˜์ง€ ์•Š์•˜๊ธฐ ๋•Œ๋ฌธ์— ๋ฌธ์ œ ์นด์šดํ„ฐ๋ฅผ ๋Š˜๋ฆฌ๊ณ  ์‹ถ์—ˆ์Šต๋‹ˆ๋‹ค. ์ด ํ”„๋กœ์ ํŠธ์˜ ์นด์šดํ„ฐ๋„ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์žˆ์œผ๋ฉฐ Symfony๋Š” ์ด๋ฏธ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์™€์˜ ํ†ต์‹ ์„ ์ข…๋ฃŒํ–ˆ์œผ๋ฉฐ ๋‘ ๋ฒˆ์งธ ์˜ˆ์™ธ๋กœ ์ธํ•ด ์˜คํ”„์…‹์„ ์ปค๋ฐ‹ํ•  ๊ธฐํšŒ๋„ ์—†์ด ์ „์ฒด ํ”„๋กœ์„ธ์Šค๊ฐ€ ์ข…๋ฃŒ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

์„œ๋น„์Šค๋Š” ํ•œ๋™์•ˆ ์ค‘๋‹จ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ๋‹คํ–‰์Šค๋Ÿฝ๊ฒŒ๋„ Kafka๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋ฉ”์‹œ์ง€๊ฐ€ ๋‚จ์•„ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ๊ทธ๋ ‡๊ฒŒ ๋‚˜์˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ž‘์—…์ด ๋ณต์›๋˜๋ฉด ์ฝ๊ธฐ๋ฅผ ์™„๋ฃŒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํŽธ์•ˆํ•ด์š”.

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

๋˜ ๋‹ค๋ฅธ ๋‰˜์•™์Šค - ๋ณต์ œ ๋กœ๊ทธ ๋Œ€ rdkafka.so - ์šฐ๋ฆฌ ํ”„๋กœ์ ํŠธ์˜ ์„ธ๋ถ€ ์‚ฌํ•ญ๊ณผ ๊ด€๋ จ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” PHP๋ฅผ ์‚ฌ์šฉํ•˜๋ฉฐ PHP์—์„œ๋Š” ์›์น™์ ์œผ๋กœ ๋ชจ๋“  ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๊ฐ€ rdkafka.so ์ €์žฅ์†Œ๋ฅผ ํ†ตํ•ด Kafka์™€ ํ†ต์‹ ํ•˜๋ฉฐ ์ผ์ข…์˜ ๋ž˜ํผ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ์–ด์ฉŒ๋ฉด ์ด๊ฒƒ์€ ์šฐ๋ฆฌ ๊ฐœ์ธ์ ์ธ ์–ด๋ ค์›€์ผ์ง€๋„ ๋ชจ๋ฅด์ง€๋งŒ, ์šฐ๋ฆฌ๊ฐ€ ์ด๋ฏธ ์ฝ์€ ๋ถ€๋ถ„์„ ๋‹จ์ˆœํžˆ ๋‹ค์‹œ ์ฝ๋Š” ๊ฒƒ์€ ๊ทธ๋ฆฌ ์‰ฌ์šด ์ผ์ด ์•„๋‹ˆ๋ผ๋Š” ๊ฒƒ์ด ๋ฐํ˜€์กŒ์Šต๋‹ˆ๋‹ค. ์ผ๋ฐ˜์ ์œผ๋กœ ์†Œํ”„ํŠธ์›จ์–ด ๋ฌธ์ œ๊ฐ€์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.

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

๋ชจ๋‹ˆํ„ฐ๋ง

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

์˜ˆ๋ฅผ ๋“ค์–ด, ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์—์„œ ์ตœ๊ทผ ์ƒํƒœ๊ฐ€ ๋ณ€๊ฒฝ๋œ ์ œํ’ˆ ์ˆ˜๋ฅผ ๊ณ„์‚ฐํ•˜๊ณ  ์ด์— ๋”ฐ๋ผ ์ด๋Ÿฌํ•œ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ๊ธฐ๋ฐ˜์œผ๋กœ ์ด๋ฒคํŠธ๊ฐ€ ๋ฐœ์ƒํ•ด์•ผ ํ•˜๋ฉฐ ์ด ์ˆซ์ž๋ฅผ ๋ชจ๋‹ˆํ„ฐ๋ง ์‹œ์Šคํ…œ์— ๋ณด๋ƒ…๋‹ˆ๋‹ค. ๊ทธ๋Ÿฐ ๋‹ค์Œ Kafka์—์„œ ์‹ค์ œ๋กœ ๊ธฐ๋ก๋œ ์ด๋ฒคํŠธ ์ˆ˜์ธ ๋‘ ๋ฒˆ์งธ ์ˆซ์ž๋ฅผ ์–ป์Šต๋‹ˆ๋‹ค. ๋ถ„๋ช…ํžˆ, ์ด ๋‘ ์ˆซ์ž์˜ ์ฐจ์ด๋Š” ํ•ญ์ƒ XNUMX์ด์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

Kafka์—์„œ ๋น„๋™๊ธฐ API๋ฅผ ํ™œ์šฉํ•œ Refund Tool ์„œ๋น„์Šค ๊ฐœ๋ฐœ ๊ฒฝํ—˜

๋˜ํ•œ ์ƒ์‚ฐ์ž์˜ ์ƒํƒœ, ์ด๋ฒคํŠธ ๋ฒ„์Šค๊ฐ€ ๋ฉ”์‹œ์ง€๋ฅผ ์ˆ˜์‹ ํ–ˆ๋Š”์ง€ ์—ฌ๋ถ€, ์†Œ๋น„์ž์˜ ์ƒํƒœ๋ฅผ ๋ชจ๋‹ˆํ„ฐ๋งํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, ์•„๋ž˜ ์ฐจํŠธ์—์„œ ํ™˜๋ถˆ ๋„๊ตฌ๋Š” ์ž˜ ์ž‘๋™ํ•˜์ง€๋งŒ BOB์—๋Š” ๋ถ„๋ช…ํžˆ ๋ช‡ ๊ฐ€์ง€ ๋ฌธ์ œ(ํŒŒ๋ž€์ƒ‰ ์ •์ )๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

Kafka์—์„œ ๋น„๋™๊ธฐ API๋ฅผ ํ™œ์šฉํ•œ Refund Tool ์„œ๋น„์Šค ๊ฐœ๋ฐœ ๊ฒฝํ—˜

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

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

Kafka์—์„œ ๋น„๋™๊ธฐ API๋ฅผ ํ™œ์šฉํ•œ Refund Tool ์„œ๋น„์Šค ๊ฐœ๋ฐœ ๊ฒฝํ—˜

API ์‘๋‹ต์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค. ๋‹ค์Œ์€ bob-live-fifa ๊ทธ๋ฃน, return.update.v1 ํŒŒํ‹ฐ์…˜, ์ƒํƒœ OK, ์ง€์—ฐ 0 - ๋งˆ์ง€๋ง‰ ์ตœ์ข… ์˜คํ”„์…‹ ๋“ฑ์ž…๋‹ˆ๋‹ค.

Kafka์—์„œ ๋น„๋™๊ธฐ API๋ฅผ ํ™œ์šฉํ•œ Refund Tool ์„œ๋น„์Šค ๊ฐœ๋ฐœ ๊ฒฝํ—˜

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

์š”์•ฝํ•˜์ž๋ฉด, ์ด๋ฒคํŠธ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๊ฒฝ์šฐ์— ํŽธ๋ฆฌํ•ฉ๋‹ˆ๋‹ค.:

  • ์—ฌ๋Ÿฌ ์‹œ์Šคํ…œ์—์„œ ์ •๋ณด๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.
  • ์ฒ˜๋ฆฌ ๊ฒฐ๊ณผ๋Š” ์ค‘์š”ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
  • ํ–‰์‚ฌ๋‚˜ ์ž‘์€ ํ–‰์‚ฌ๊ฐ€ ๊ฑฐ์˜ ์—†์Šต๋‹ˆ๋‹ค.

๊ธฐ์‚ฌ์—๋Š” Kafka์˜ ๋น„๋™๊ธฐ API๋ผ๋Š” ๋งค์šฐ ๊ตฌ์ฒด์ ์ธ ์ฃผ์ œ๊ฐ€ ์žˆ๋Š” ๊ฒƒ ๊ฐ™์ง€๋งŒ ์ด์™€ ๊ด€๋ จํ•˜์—ฌ ํ•œ ๋ฒˆ์— ๋งŽ์€ ๊ฒƒ์„ ์ถ”์ฒœํ•˜๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค.
์ฒซ์งธ, ๋‹ค์Œ HighLoad ++ XNUMX์›”๊นŒ์ง€ ๊ธฐ๋‹ค๋ ค์•ผ ํ•ฉ๋‹ˆ๋‹ค. XNUMX์›”์—๋Š” ์ƒํŠธํŽ˜ํ…Œ๋ฅด๋ถ€๋ฅดํฌ ๋ฒ„์ „์ด ๋‚˜์˜ฌ ์˜ˆ์ •์ด๋ฉฐ, XNUMX์›”์—๋Š” ๋…ธ๋ณด์‹œ๋น„๋ฅด์Šคํฌ์˜ ๋†’์€ ๋ถ€ํ•˜์— ๋Œ€ํ•ด ์ด์•ผ๊ธฐํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.
๋‘˜์งธ, ๋ณด๊ณ ์„œ ์ž‘์„ฑ์ž์ธ Sergei Zaika๋Š” ์ง€์‹ ๊ด€๋ฆฌ์— ๊ด€ํ•œ ์ƒˆ๋กœ์šด ์ปจํผ๋Ÿฐ์Šค์˜ ํ”„๋กœ๊ทธ๋žจ ์œ„์›ํšŒ ํšŒ์›์ž…๋‹ˆ๋‹ค. ์ง€์‹์ปจํผ๋Ÿฐ์Šค. ์ด ์ปจํผ๋Ÿฐ์Šค๋Š” 26์›” XNUMX์ผ ํ•˜๋ฃจ ๋™์•ˆ ์ง„ํ–‰๋˜์ง€๋งŒ ํ”„๋กœ๊ทธ๋žจ์€ ๋งค์šฐ ๊ฐ•๋ ฌํ•ฉ๋‹ˆ๋‹ค.
๊ทธ๋ฆฌ๊ณ  XNUMX์›”์ด๊ฒ ์ง€ PHP ๋Ÿฌ์‹œ์•„ ะธ RIT++ (DevOpsConf ํฌํ•จ) - ๊ฑฐ๊ธฐ์—์„œ ์ฃผ์ œ๋ฅผ ์ œ์•ˆํ•˜๊ณ , ๊ฒฝํ—˜์— ๋Œ€ํ•ด ์ด์•ผ๊ธฐํ•˜๊ณ , ์ฑ„์›Œ์ง„ ์›๋ฟ”์— ๋Œ€ํ•ด ๋ถˆํ‰ํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.

์ถœ์ฒ˜ : habr.com

์ฝ”๋ฉ˜ํŠธ๋ฅผ ์ถ”๊ฐ€