Issue #2 - f-lab-edu/at_ticket GitHub Wiki

๋น„๋™๊ธฐ๋กœ ๋ฉ”์ผ ์•Œ๋ฆผ ๋ณด๋‚ด๊ธฐ

๊ฐœ์š”

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

๋ฉ”์ผ ์•Œ๋ฆผ๊ธฐ๋Šฅ์„ ๋งŒ๋“ค๋ฉด ๊ทธ ๊ณผ์ •์€ ๋‹ค์Œ๊ณผ ๊ฐ™์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

1. ์ฆ๊ฒจ์ฐพ๊ธฐ๋ฅผ ๋“ฑ๋กํ•œ ์‚ฌ์šฉ์ž๋ฅผ DB์—์„œ ์กฐํšŒํ•œ๋‹ค.
2. ๋ฐœ์†กํ•  ์ด๋ฉ”์ผ ์ฃผ์†Œ์™€ ๋ฉ”์ผ ๋‚ด์šฉ์„ ๋ฉ”์ผ ์„œ๋ฒ„๋กœ ์ „์†กํ•œ๋‹ค.
3. ๋ฉ”์ผ ์„œ๋ฒ„์—์„œ ์‘๋‹ต์ด ์˜ฌ๋•Œ๊นŒ์ง€ ๊ธฐ๋‹ค๋ฆฐ๋‹ค.
4. ๋‹ค์Œ ๋ฐœ์†กํ•  ์ด๋ฉ”์ผ ์ฃผ์†Œ์™€ ๋‚ด์šฉ์„ ๋ฉ”์ผ ์„œ๋ฒ„๋กœ ์ „์†กํ•œ๋‹ค.

์‚ฌ์šฉ์ž๊ฐ€ ๋ณ„๋กœ ์—†์„ ๋•Œ๋Š” ์ƒ๊ด€์ด ์—†๊ฒ ์ง€๋งŒ, ์‚ฌ์šฉ์ž๊ฐ€ ๋Š˜์–ด๋‚˜๋ฉด ์„ฑ๋Šฅ์ ์ธ ๋ถ€๋ถ„์—์„œ ๋ฌธ์ œ๋ฅผ ์ผ์œผํ‚ฌ ๊ฐ€๋Šฅ์„ฑ์ด ๋ณด์ž…๋‹ˆ๋‹ค.
๋ฉ”์ผ ์„œ๋ฒ„๋กœ์˜ ์š”์ฒญ๊ณผ ์‘๋‹ต ์ค‘์— ์Šค๋ ˆ๋“œ์— I/O Blocking์ด ๊ฑธ๋ฆฌ๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.

ํ•ด๋‹น ๋ฐฉ์‹์˜ ๋ฌธ์ œ์ ์€ ๋ฉ”์ผ ์„œ๋ฒ„๊ฐ€ ๋ฉ”์ผ์„ ๋ณด๋‚ด๊ณ , ๋‹ค์‹œ ์‘๋‹ต์„ ๋ณด๋‚ด์ค„ ๋•Œ๊นŒ์ง€ ๊ธฐ๋‹ค๋ฆฌ๋Š”๋ฐ ์‹œ๊ฐ„์ด ์†Œ์š” ๋œ๋‹ค๋Š” ์ ์ž…๋‹ˆ๋‹ค.

๋น„๋™๊ธฐ ๋ฐฉ์‹ ์‚ฌ์šฉ

์ €ํฌ๋Š” ๋น„๋™๊ธฐ ํ†ต์‹ ์˜ ๊ตฌํ˜„ ๋ฐฉ๋ฒ• ์ค‘ kafka๋ฅผ ์‚ฌ์šฉํ•ด๋ณด์•˜์Šต๋‹ˆ๋‹ค.

์Šค๋ ˆ๋“œ ์ž…์žฅ์—์„œ๋Š” ๊ทธ์ € kafka์—๊ฒŒ ๋ฉ”์ผ์„ ๋ฐœ์†กํ•˜๋ผ๋Š” ๋ฉ”์„ธ์ง€๋ฅผ ๋„˜๊ฒจ์ฃผ๋ฉด ๋ฉ๋‹ˆ๋‹ค.
kafka๋Š” ๋ฉ”์ผ ๋ฐœ์†ก ๋ฐ ๋ฉ”์ผ ์„œ๋ฒ„์™€์˜ ์‘๋‹ต์„ ๊ธฐ๋‹ค๋ฆฌ๋Š” ์—ญํ• ์—๊ฒŒ ๋ฉ”์ผ์„ ๋ฐœ์†กํ•˜๋ผ๋Š” ๋ฉ”์„ธ์ง€๋ฅผ ์ „๋‹ฌํ•ด์ค„ ๊ฒƒ์ž…๋‹ˆ๋‹ค.
๊ทธ๋Ÿฌ๋ฉด ์Šค๋ ˆ๋“œ๊ฐ€ blocking ๋˜์ง€ ์•Š์œผ๋ฉด์„œ ๋ฉ”์ผ์„ ์ „์†กํ•˜๋Š” ๋™์•ˆ์—๋„ ๋‹ค๋ฅธ ์ž‘์—…์„ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๋ณ€๊ฒฝ ์ „

์ €ํฌ At_ticket ํ”„๋กœ์ ํŠธ๋Š” ํ•˜๋‚˜์˜ ํ”„๋กœ์ ํŠธ์— ๋ชจ๋“ˆ์ด ์—ฌ๋Ÿฌ๊ฐœ๋กœ ๋‚˜๋ˆ„์–ด์ ธ ์žˆ๋Š” ๋ฉ€ํ‹ฐ๋ชจ๋“ˆ๋กœ ๊ตฌ์„ฑ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.
๊ฐ๊ฐ์˜ ๋ชจ๋“ˆ์ด ๊ฐ๊ฐ์˜ ๊ธฐ๋Šฅ์„ ์ฒ˜๋ฆฌํ•˜์ฃ .
์ด๋ฒˆ์— ๊ณต์—ฐ ๋“ฑ๋ก ์•Œ๋ฆผ์„ ๋‹ด๋‹นํ•  ๋ชจ๋“ˆ์€ ์ƒํ’ˆ๊ณผ ๊ณต์—ฐ ๊ธฐ๋Šฅ์„ ๋‹ด๋‹นํ•˜๋Š” Product ๋ชจ๋“ˆ์ž…๋‹ˆ๋‹ค.

๊ณผ์ •์€ ๋‹ค์Œ ๊ทธ๋ฆผ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

1. Product๋ชจ๋“ˆ์—์„œ ๋Œ€์ƒ ํšŒ์›์„ ์กฐํšŒํ•ด์„œ
2. ๋ฉ”์ผ ์„œ๋ฒ„์— ๋ฉ”์ผ ๋ฐœ์†ก ์š”์ฒญ์„ ๋ณด๋ƒ…๋‹ˆ๋‹ค. 

๋ฉ”์ผ ์„œ๋ฒ„์—์„œ ๋ฉ”์ผ์„ ๋ฐœ์†กํ•˜๊ณ  Product ๋ชจ๋“ˆ์— ๋‹ค์‹œ ์‘๋‹ต์„ ๋Œ๋ ค์ค„ ๋•Œ๊นŒ์ง€,
Product ๋ชจ๋“ˆ์˜ ์Šค๋ ˆ๋“œ๋Š” blocking๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๋ณ€๊ฒฝ ํ›„

์ถ”ํ›„ ํ™•์žฅ์„ฑ์„ ๊ณ ๋ คํ•˜์—ฌ, kafka-app ๋ชจ๋“ˆ ์ด๋ผ๋Š” kafka๋ฅผ ํ†ตํ•˜์—ฌ ์ฒ˜๋ฆฌํ•  ๊ธฐ๋Šฅ์„ ์ฒ˜๋ฆฌํ•ด์ค„ ๋ชจ๋“ˆ์„ ์ถ”๊ฐ€ํ•˜์˜€์Šต๋‹ˆ๋‹ค. kafka-app ๋ชจ๋“ˆ์—์„œ ๋ฉ”์ผ ์„œ๋ฒ„๋กœ์˜ ์š”์ฒญ๊ณผ ๋Œ€๊ธฐ๋ฅผ ๋‹ด๋‹นํ•ด์ค๋‹ˆ๋‹ค.

kafka๋ฅผ ์ ์šฉํ•˜์—ฌ ๋น„๋™๊ธฐ ์‹์œผ๋กœ ๋ณ€๊ฒฝ ํ•œ ๋ฉ”์ผ ์•Œ๋ฆผ ๊ธฐ๋Šฅ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

1. Product๋ชจ๋“ˆ์—์„œ ๋Œ€์ƒ ํšŒ์›์„ ์กฐํšŒํ•ฉ๋‹ˆ๋‹ค.  
2. Product๋ชจ๋“ˆ์˜ kafka์˜ producer๋ฅผ ํ†ตํ•˜์—ฌ kafka์˜ broker์— ๋ฉ”์„ธ์ง€(๋ฉ”์ผ ์ฃผ์†Œ, ๋ฉ”์ผ ๋ฉ”์„ธ์ง€)๋ฅผ ์ „๋‹ฌํ•ฉ๋‹ˆ๋‹ค.
3. kafka-app ๋ชจ๋“ˆ์€ kafka consumer๋ฅผ ํ†ตํ•ด ํ•ด๋‹น ๋ฉ”์„ธ์ง€๋ฅผ ์ „๋‹ฌ๋ฐ›์Šต๋‹ˆ๋‹ค.
4. kafka-app ๋ชจ๋“ˆ์€ ๋ฉ”์ผ ์„œ๋ฒ„์— ๋ฉ”์ผ ๋ฐœ์†ก์„ ์š”์ฒญํ•ฉ๋‹ˆ๋‹ค.

๋ฉ”์ผ ์„œ๋ฒ„์— ์š”์ฒญ์„ ๋ณด๋‚ด๊ณ  ์š”์ฒญ์„ ๊ธฐ๋‹ค๋ฆฌ๋Š” ์—ญํ• ์€ kafka-app ๋ชจ๋“ˆ์ด ๋งก์•„์„œ ์ฒ˜๋ฆฌํ•˜๊ฒŒ ๋จ์œผ๋กœ์จ Product ๋ชจ๋“ˆ์€ ๋” ์ด์ƒ ๋ฉ”์ผ ์„œ๋ฒ„์˜ ์‘๋‹ต์„ ๊ธฐ๋‹ค๋ฆฌ์ง€ ์•Š์•„๋„ ๋ฉ๋‹ˆ๋‹ค.

ํ…Œ์ŠคํŠธ

๊ทธ๋Ÿฌ๋ฉด, ์ง์ ‘ ๋ฉ”์ผ ์•Œ๋ฆผ์„ ๋ณด๋‚ด๋Š” ๋ฐฉ์‹๊ณผ, ์นดํ”„์นด๋ฅผ ์ด์šฉํ•˜์—ฌ ๋น„๋™๊ธฐ ๋ฐฉ์‹์œผ๋กœ ๋ฉ”์ผ ์•Œ๋ฆผ์„ ๋ณด๋‚ด๋Š” ๊ฐ๊ฐ์˜ ๋ฐฉ์‹์„ ํ…Œ์ŠคํŠธ ํ•ด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

ํ…Œ์ŠคํŠธ ๋ฐฉ์‹

* DB์— ํŠน์ • ์ƒํ’ˆ์„ ์ฆ๊ฒจ์ฐพ๊ธฐ ํ•œ ์œ ์ €๋ฅผ ๊ฐ€์ •ํ•˜์—ฌ ๋ฐœ์†กํ•  ์ด๋ฉ”์ผ ์ฃผ์†Œ ์ •๋ณด๋ฅผ ๋งŽ์ด(200๊ฐœ) ์ค€๋น„ํ•œ๋‹ค.  
* Postman์œผ๋กœ ๋ฉ”์ผ ์•Œ๋ฆผ ๋ฐœ์†ก api๋ฅผ ํ˜ธ์ถœํ•œ๋‹ค.

1. Product ๋ชจ๋“ˆ์—์„œ ์ง์ ‘ ๋ฉ”์ผ ์„œ๋ฒ„๋ฅผ ํ˜ธ์ถœํ•˜์—ฌ ์ด๋ฉ”์ผ์„ 200ํ†ต ์ „์†กํ•œ๋‹ค.
2. ์นดํ”„์นด๋ฅผ ์ด์šฉํ•˜์—ฌ ๋ฉ”์ผ ์„œ๋ฒ„๋ฅผ ํ˜ธ์ถœํ•˜์—ฌ ์ด๋ฉ”์ผ์„ 200ํ†ต ์ „์†กํ•œ๋‹ค.

1. Product ๋ชจ๋“ˆ์—์„œ ์ง์ ‘ ๋ฉ”์ผ์„ ์ „์†กํ•˜๊ธฐ


Product ๋ชจ๋“ˆ์—์„œ ์ง์ ‘ ๋ฉ”์ผ ์•Œ๋ฆผ์„ ์ „์†กํ•˜๋„๋ก ๋ฉ”์ผ ์ „์†ก ๋กœ์ง์„ ์ˆ˜์ •ํ•˜๊ณ ,
postman์œผ๋กœ ๋ฉ”์ผ ์•Œ๋ฆผ API๋ฅผ ํ˜ธ์ถœํ•˜์—ฌ ๋ณด์•˜์Šต๋‹ˆ๋‹ค.

img โ–ฒ Product ๋ชจ๋“ˆ์—์„œ ์ง์ ‘ ๋ฉ”์ผ์„ ์ „์†กํ•˜๋Š” ์ค‘

Product ๋ชจ๋“ˆ์—์„œ ์ง์ ‘ ๋ฉ”์ผ์„ ๋ณด๋‚ด๊ณ  ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ๋ฉ”์ผ ์ „์†ก api๋ฅผ ํ˜ธ์ถœํ•˜์˜€์„ ๋•Œ response๊ฐ€ ๋ฐ”๋กœ ๋Œ์•„์˜ค์ง€ ๋ชปํ•ฉ๋‹ˆ๋‹ค.
I/O ์ฒ˜๋ฆฌ์ค‘์ด๊ธฐ ๋•Œ๋ฌธ์— ์Šค๋ ˆ๋“œ์— blocking์ด ๊ฑธ๋ฆฌ๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.

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

img
โ–ฒ ์ง์ ‘ ๋ฉ”์ผ์„ ์ „์†กํ•˜์˜€์„ ๋•Œ ์‘๋‹ต์— ๊ฑธ๋ฆฐ ์‹œ๊ฐ„

Product ๋ชจ๋“ˆ์ด ๋ฉ”์ผ์„ ์ „๋ถ€ ์ „์†กํ•˜๊ณ  ๋‚˜์„œ์•ผ api ํ˜ธ์ถœ์— ๊ด€ํ•œ response๋ฅผ ๋ฐ›์„ ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.
200ํ†ต์„ ์ „์†กํ•˜๋Š”๋ฐ 1๋ถ„ 22์ดˆ์˜ ์‹œ๊ฐ„์ด ๊ฑธ๋ ธ์Šต๋‹ˆ๋‹ค.
๋ณด๋‚ด์•ผ ํ•  ์‚ฌ๋žŒ์ด ๋Š˜์–ด๋‚˜๋ฉด ๋Š˜์–ด๋‚  ์ˆ˜๋ก ์‘๋‹ต์‹œ๊ฐ„์€ ์ ์  ๊ธธ์–ด์งˆ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

2. ์นดํ”„์นด๋ฅผ ์ด์šฉํ•˜์—ฌ ๋ฉ”์ผ ์ „์†กํ•˜๊ธฐ


์ด๋ฒˆ์—” ์นดํ”„์นด๋ฅผ ์ด์šฉํ•˜์—ฌ ๋ฉ”์ผ์„ ์ „์†กํ•ด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

img
โ–ฒ ์นดํ”„์นด๋ฅผ ์ด์šฉํ•˜์—ฌ ๋ฉ”์ผ ์„œ๋ฒ„์— ๋ฉ”์ผ ์ „์†ก ์š”์ฒญ

img
โ–ฒ ์นดํ”„์นด๋ฅผ ์ด์šฉํ•˜์—ฌ ๋ฉ”์ผ์„ ์ „์†ก ์‘๋‹ต์— ๊ฑธ๋ฆฐ ์‹œ๊ฐ„

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

์นดํ”„์นด๊ฐ€ ๋ฉ”์ผ์„ ์ „๋ถ€ ์ „์†กํ•˜๋Š” ๋ฐ ๊ฑธ๋ฆฐ ์‹œ๊ฐ„์€ ์ง์ ‘ ์ „์†กํ•˜๋Š” ๊ฒƒ๊ณผ ๋น„์Šทํ•œ 1๋ถ„ 20์ดˆ ์ •๋„๊ฐ€ ๊ฑธ๋ ธ์Šต๋‹ˆ๋‹ค. ์„ค์ •์— ๋”ฐ๋ผ์„œ ์ „์†ก์ด ์™„๋ฃŒ๋˜๋Š” ์‹œ๊ฐ„์„ ๋‹ฌ๋ผ์งˆ ์ˆ˜ ์žˆ์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

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