๋ณธ๋ฌธ์œผ๋กœ ๋ฐ”๋กœ๊ฐ€๊ธฐ

๐Ÿ“ ngrinder

ํ˜„์žฌ ์ง„ํ–‰ ์ค‘์ธ shoe-auction ํ”„๋กœ์ ํŠธ์˜ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง ๊ตฌํ˜„์ด 90% ์ด์ƒ ์™„๋ฃŒ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ํ˜„์žฌ Naver Cloud Platform์œผ๋กœ ํ”„๋กœ์ ํŠธ์˜ ์ธํ”„๋ผ ํ™˜๊ฒฝ์„ ๊ตฌ์ถ•ํ•ด๋†“์€ ์ƒํƒœ์—์„œ ์„ฑ๋Šฅ ํ…Œ์ŠคํŠธ ์ง€ํ‘œ๋ฅผ ์ด์šฉํ•ด Scale-out ๋ฐฉ์‹์œผ๋กœ ์„œ๋ฒ„ ํ™•์žฅ์„ ์ง„ํ–‰ํ•ด๋ณด๋ ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค.

 

์„ฑ๋Šฅ ํ…Œ์ŠคํŠธ ํˆด์€ ๋„ค์ด๋ฒ„์—์„œ ๋งŒ๋“  ngrinder ์‚ฌ์šฉํ•ด์„œ ์ง„ํ–‰ํ•˜์˜€์Šต๋‹ˆ๋‹ค. ์‹ฌํ”Œํ•œ UI๋ฅผ ์ œ๊ณตํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ดˆ๋ณด์ž๋„ ์‰ฝ๊ฒŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ณ  ํ…Œ์ŠคํŠธ ๊ฒฐ๊ณผ๋„ ๊ฒฐ๊ณผ ๋ณด๊ณ ์„œ๋ฅผ ํ†ตํ•ด ํ•œ๋ˆˆ์— ์•Œ์•„๋ณผ ์ˆ˜ ์žˆ์–ด์„œ ๊ตญ๋‚ด์—์„œ ๋งŽ์ด ์‚ฌ์šฉ๋˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

์„ค์น˜ ๋ฐฉ๋ฒ•์€ ์ด์ „ ๊ธ€์„ ์ฐธ๊ณ ํ•ด์ฃผ์„ธ์š”.

๐Ÿ“ ์‚ฌ์šฉ ๋ฐฉ๋ฒ•

๊ฐ€์žฅ ๋จผ์ € ์„ฑ๋Šฅํ…Œ์ŠคํŠธ๋ฅผ ์œ„ํ•œ ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์ž‘์„ฑํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ngrinder ๋ฉ”์ธ ํ™”๋ฉด์—์„œ ์Šคํฌ๋ฆฝํŠธ ์ƒ์„ฑ ํ™”๋ฉด์œผ๋กœ ์ด๋™ํ•ฉ๋‹ˆ๋‹ค.

 

์„ฑ๋Šฅ ํ…Œ์ŠคํŠธ๋ฅผ ์›ํ•˜๋Š” URL ์ž…๋ ฅํ•˜๊ณ , ์•„๋ž˜ ์‚ฌ์ง„์ฒ˜๋Ÿผ body์— ๋ฐ์ดํ„ฐ๋ฅผ ๋„ฃ์–ด์„œ ๋ณด๋‚ผ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.

์ž๋™์œผ๋กœ ๋งŒ๋“ค์–ด์ง„ groovy ์ฝ”๋“œ๋ฅผ ํ™˜๊ฒฝ์— ๋งž๊ฒŒ ์ ์ ˆํžˆ ์ˆ˜์ •ํ•˜๊ณ  ์˜ค๋ฅธ์ชฝ ์ƒ๋‹จ์— [๊ฒ€์ฆ] ๋ฒ„ํŠผ์„ ๋ˆŒ๋Ÿฌ ์ •์ƒ์ ์œผ๋กœ ์ž‘๋™ํ•˜๋Š”์ง€ ํ™•์ธํ•˜๊ณ  ์ €์žฅ๋ฒ„ํŠผ์„ ํด๋ฆญํ•ฉ๋‹ˆ๋‹ค.

 

์Šคํฌ๋ฆฝํŠธ๋ฌธ ์ž‘์„ฑ์ด ์™„๋ฃŒ๋˜์—ˆ์œผ๋ฉด ์„ฑ๋Šฅ ํ…Œ์ŠคํŠธ ํŽ˜์ด์ง€๋กœ ์ด๋™ํ•ด ํ…Œ์ŠคํŠธ ์ƒ์„ฑ ๋ฒ„ํŠผ์„ ํด๋ฆญํ•ฉ๋‹ˆ๋‹ค.

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

๋ชจ๋“  ์„ค์ •์„ ์™„๋ฃŒํ•˜๊ณ  ์˜ค๋ฅธ์ชฝ ์ƒ๋‹จ์— [์ €์žฅ ํ›„ ์‹œ์ž‘] ๋ฒ„ํŠผ์„ ํด๋ฆญํ•˜๋ฉด ํ…Œ์ŠคํŠธ๊ฐ€ ์‹œ์ž‘๋ฉ๋‹ˆ๋‹ค.

 

์ฃผ์˜์‚ฌํ•ญ

์„ฑ๋Šฅ ํ…Œ์ŠคํŠธ ์‹œ ๊ธฐ๋ณธ์ ์œผ๋กœ Agent๋Š” 12000~ port๋ฅผ ์ด์šฉํ•˜๊ธฐ ๋•Œ๋ฌธ์— ํ•ด๋‹น ํฌํŠธ ๋ฒˆํ˜ธ๋ฅผ ์‚ฌ์ „์— ์—ด์–ด๋†“์•„์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๐Ÿ“ ํ…Œ์ŠคํŠธ ์ง„ํ–‰ - ๋‹จ์ผ ์„œ๋ฒ„ ํ™˜๊ฒฝ

์ด์ œ ๋ณธ๊ฒฉ์ ์œผ๋กœ ์„ฑ๋Šฅํ…Œ์ŠคํŠธ๋ฅผ ์ง„ํ–‰ํ•ด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. ์ดˆ๊ธฐ ์„œ๋ฒ„ ๊ตฌ์„ฑ์€ [Compact] 1vCPU, 2GB Mem, 50GB ๊ธ‰ WAS ์„œ๋ฒ„ 1๋Œ€์™€ Master/Slave๋กœ ๊ตฌ์„ฑ๋œ ๋™์ผํ•œ ์ŠคํŽ™์˜ MySQL ์„œ๋ฒ„๋กœ ์ด๋ฃจ์–ด์ ธ ์žˆ์Šต๋‹ˆ๋‹ค.

1. ๋กœ๊ทธ์ธ ํ…Œ์ŠคํŠธ

๊ฐ€์žฅ ๋จผ์ € ๋กœ๊ทธ์ธ ํ…Œ์ŠคํŠธ๋ฅผ ์ง„ํ–‰ํ•ด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

์œ„ ํ…Œ์ŠคํŠธ๋Š” ๊ฐ€์ƒ ์‚ฌ์šฉ์ž 1000๋ช…์„ ๊ธฐ์ค€์œผ๋กœ ์ง„ํ–‰ํ•œ ํ…Œ์ŠคํŠธ์ž…๋‹ˆ๋‹ค. ์ดˆ๋‹น ์ฒ˜๋ฆฌ ๊ฐ€๋Šฅํ•œ ์š”์ฒญ์ธ TPS๋Š” ํ‰๊ท  632 ์ •๋„๊ฐ€ ๋‚˜์™”๊ณ , ์ง€์—ฐ ์‹œ๊ฐ„์€ 1500ms ์ •๋„๊ฐ€ ๋‚˜์™”์Šต๋‹ˆ๋‹ค. ๋˜ํ•œ ํ•ด๋‹น ์„œ๋ฒ„์˜ CPU ์‚ฌ์šฉ๋Ÿ‰ ์กฐํšŒ ๊ฒฐ๊ณผ ์•ฝ 90% ์ด์ƒ์„ ์ ์œ ํ•˜๊ณ  ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.

ํ•˜์ง€๋งŒ ํ…Œ์ŠคํŠธ ์„ฑ๊ณต๋ฅ ์ด 100%์˜€๊ธฐ ๋•Œ๋ฌธ์— ์ด๋ฒˆ์—๋Š” ๊ฐ€์ƒ ์‚ฌ์šฉ์ž๋ฅผ 3000๋ช… ํˆฌ์ž…์‹œ์ผœ ํ…Œ์ŠคํŠธ๋ฅผ ์ง„ํ–‰ํ•ด๋ณด์•˜์Šต๋‹ˆ๋‹ค.

 

ํ…Œ์ŠคํŠธ ๊ฒฐ๊ณผ TPS๋Š” 1000๋ช…์˜ ๊ฐ€์ƒ์œ ์ €๋ฅผ ํˆฌ์ž…ํ–ˆ์„๋•Œ์™€ ๋น„์Šทํ•˜์ง€๋งŒ ์ง€์—ฐ์‹œ๊ฐ„๊ณผ ์—๋Ÿฌ ๋ฐœ์ƒ๋ฅ ์ด ์ฆ๊ฐ€ํ•œ ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. ๋˜ํ•œ WAS์˜ CPU ์‚ฌ์šฉ๋ฅ ์„ ์กฐํšŒํ•ด๋ณธ ๊ฒฐ๊ณผ ๊ฑฐ์˜ 100%์— ์œก๋ฐ•ํ•˜๋Š” ์‚ฌ์šฉ๋ฅ ์„ ๋ณด์ด๊ณ  ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ์ ์ ˆํ•œ ์กฐ์น˜๊ฐ€ ํ•„์š”ํ•˜๋‹ค๊ณ  ์ƒ๊ฐํ–ˆ์Šต๋‹ˆ๋‹ค.

 

2. ์ƒํ’ˆ ์กฐํšŒ ํ…Œ์ŠคํŠธ

๋‹ค์Œ์œผ๋กœ ํ•ด๋‹น ํ”„๋กœ์ ํŠธ์—์„œ ๊ฐ€์žฅ ๋งŽ์€ ํŠธ๋ž˜ํ”ฝ์ด ๋ฐœ์ƒ๋  ๊ฒƒ์œผ๋กœ ์˜ˆ์ƒ๋˜๋Š” ์ƒํ’ˆ ์กฐํšŒ ๊ธฐ๋Šฅ์„ ํ…Œ์ŠคํŠธํ•ด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. ํ•ด๋‹น ํ…Œ์ŠคํŠธ๋Š” ๋‹จ์ผ WAS ์„œ๋ฒ„์—์„œ ์บ์‹œ๋ฅผ ์ €์žฅํ•˜๊ธฐ ์ „๊ณผ ํ›„์˜ ์ˆ˜์น˜๋ฅผ ๋น„๊ตํ•ด๋ณผ ์˜ˆ์ •์ž…๋‹ˆ๋‹ค.

์บ์‹œ ์‚ฌ์šฉ ์ „์˜ ์„œ๋ฒ„ ๊ตฌ์„ฑ์„ ๊ฐ„๋žตํ•˜๊ฒŒ ํ‘œํ˜„ํ•˜์ž๋ฉด ์•„๋ž˜์™€ ๊ฐ™์Šต๋‹ˆ๋‹ค.

๋จผ์ € ๋™์ผํ•œ ์„œ๋ฒ„ ์ŠคํŽ™ ๊ธฐ์ค€์œผ๋กœ ๋ฌผํ’ˆ ์กฐํšŒ์‹œ ์บ์‹œ๋ฅผ ์ ์šฉํ•˜์ง€ ์•Š์€ ์ƒํƒœ์—์„œ 3000๋ช…์˜ ๊ฐ€์ƒ์‚ฌ์šฉ์ž๋ฅผ ํˆฌ์ž…ํ•œ ํ…Œ์ŠคํŠธ ๊ฒฐ๊ณผ์ž…๋‹ˆ๋‹ค.

ํ‰๊ท  TPS๋Š” 500์ •๋„๋ฅผ ๋ณด์ด๊ณ  ์žˆ์œผ๋ฉฐ ์•ฝ 5200ms์˜ ์ง€์—ฐ์‹œ๊ฐ„๊ณผ ์—๋Ÿฌ ๋ฐœ์ƒ ํ™•๋ฅ ๋„ 1% ์ด์ƒ์œผ๋กœ ์ƒ๋‹นํžˆ ๋ถˆ์•ˆ์ •ํ•œ ๋ชจ์Šต์„ ๋ณด์ด๊ณ  ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.

 

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

๋งˆ์ฐฌ๊ฐ€์ง€๋กœ 3000๋ช…์˜ ๊ฐ€์ƒ์‚ฌ์šฉ์ž๋ฅผ ๊ธฐ์ค€์œผ๋กœ ์„ฑ๋Šฅํ…Œ์ŠคํŠธ๋ฅผ ์ง„ํ–‰ํ•ด๋ณด์•˜์Šต๋‹ˆ๋‹ค.

์บ์‹œ๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ์ „๊ณผ ํ›„์˜ ์„ฑ๋Šฅ ์ง€ํ‘œ ์ฐจ์ด๋ฅผ ์‚ดํŽด๋ณด๋ฉด TPS๋Š” ์•ฝ 5๋ฐฐ ์ •๋„ ์ฆ๊ฐ€ํ•˜์˜€๊ณ , ์ง€์—ฐ ์‹œ๊ฐ„ ๋˜ํ•œ 5๋ฐฐ ์ •๋„ ๊ฐ์†Œํ•˜์˜€์Šต๋‹ˆ๋‹ค. ๋˜ํ•œ ์—๋Ÿฌ ๋ฐœ์ƒ๋ฅ ๋„ 0.01% ๋ฏธ๋งŒ์œผ๋กœ ๊ฐ์†Œํ•œ ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.

 

๋ฌผ๋ก  ์‹ค์ œ ์šด์˜ ํ™˜๊ฒฝ์—์„œ๋Š” ํ•ด๋‹น Product(๋ฌผํ’ˆ)์— ๋Œ€ํ•œ Trade(๊ฑฐ๋ž˜)๊ฐ€ ์ถ”๊ฐ€๋  ๋•Œ๋งˆ๋‹ค ์บ์‹œ ๋งŒ๋ฃŒ(CacheEvict)๊ฐ€ ๋ฐœ์ƒํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์œ„ ์„ฑ๋Šฅ ์ง€ํ‘œ๋ณด๋‹ค๋Š” ์กฐ๊ธˆ ๋‚ฎ์€ ์„ฑ๋Šฅ์„ ๋ณด์ผ ๊ฒƒ์œผ๋กœ ์˜ˆ์ƒ๋ฉ๋‹ˆ๋‹ค.

๐Ÿ“ ํ…Œ์ŠคํŠธ ์ง„ํ–‰ - nginx๋ฅผ ํ†ตํ•œ ๋กœ๋“œ๋ฒจ๋Ÿฐ์‹ฑ

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

 

๋”ฐ๋ผ์„œ nginx ์›น์„œ๋ฒ„๋ฅผ ๋„์šฐ๊ณ  ํ•˜๋‚˜์˜ WAS๋ฅผ ๋” ์ถ”๊ฐ€์‹œ์ผœ ๋กœ๋“œ๋ฐธ๋Ÿฐ์‹ฑ์„ ํ†ตํ•ด ์ ์ ˆํ•˜๊ฒŒ ๋ถ€ํ•˜๋ฅผ ๋ถ„์‚ฐ์‹œํ‚ค๋„๋ก Scale-out๋ฐฉ์‹์œผ๋กœ ์„œ๋ฒ„ ํ™•์žฅ์„ ์ง„ํ–‰ํ•˜์˜€์Šต๋‹ˆ๋‹ค.

 

ํ•ด๋‹น ํ”„๋กœ์ ํŠธ๋Š” ์ดˆ๊ธฐ ์„ค๊ณ„ ์‹œ Scale-out ๋ฐฉ์‹์œผ๋กœ ์„œ๋ฒ„๋ฅผ ํ™•์žฅํ•  ์ˆ˜ ์žˆ๋Š” ํ™˜๊ฒฝ์„ ๊ตฌ์„ฑํ–ˆ๊ธฐ ๋•Œ๋ฌธ์— ๋น„๊ต์  ๊ฐ„๋‹จํ•˜๊ฒŒ ์„œ๋ฒ„๋ฅผ ํ™•์žฅ์‹œํ‚ฌ ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.

 

nginx๋ฅผ ์ด์šฉํ•œ ๋กœ๋“œ๋ฐธ๋Ÿฐ์‹ฑ ๋ฐฉ๋ฒ•์€ ์•„๋ž˜ ํฌ์ŠคํŒ…์„ ์ฐธ๊ณ ํ•ด ์ฃผ์„ธ์š”.

 

[Server] Nginx๋ฅผ ์ด์šฉํ•ด ๋กœ๋“œ๋ฐธ๋Ÿฐ์‹ฑ(Load Balancing) ๊ตฌํ˜„ํ•˜๊ณ  HTTPS ์ ์šฉํ•˜๊ธฐ

 ํ˜„์žฌ ์ง„ํ–‰์ค‘์ธ ํ”„๋กœ์ ํŠธ shoe-auction์€ ์ง€์†์ ์ธ ์‚ฌ์šฉ์ž ์ฆ๊ฐ€๋ฅผ ๊ฐ€์ •ํ•˜๊ณ  ์ง„ํ–‰ํ•˜์˜€๊ธฐ ๋•Œ๋ฌธ์— ํ™•์žฅ์„ฑ์˜ ํ•œ๊ณ„๊ฐ€ ์ ์€ Scale-out ๋ฐฉ์‹์˜ ํ™•์žฅ์„ ์ฑ„ํƒํ•˜์˜€๋‹ค. ๋”ฐ๋ผ์„œ 2๊ฐœ ์ด์ƒ์˜ WAS๋ฅผ ๋‘๊ณ  ์žˆ๊ณ , Session

kerobero.tistory.com

 

๋กœ๊ทธ์ธ ํ…Œ์ŠคํŠธ

๋‹จ์ผ ์„œ๋ฒ„ ํ™˜๊ฒฝ์—์„œ 3000๋ช… ์ด์ƒ์ด ์ ‘๊ทผํ–ˆ์„๋•Œ ์„œ๋ฒ„๊ฐ€ ๋ถˆ์•ˆ์ •ํ•œ ์ƒํƒœ๋ฅผ ๋ณด์ด๋Š”๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. ์ด๋ฒˆ์—๋Š” ์›น์„œ๋ฒ„๋ฅผ ๊ฑฐ์ณ 2๊ฐœ์˜ ์„œ๋ฒ„๋กœ ๋ถ€ํ•˜๋ฅผ ๋ถ„์‚ฐ์‹œ์ผฐ์„ ๋•Œ ์„ฑ๋Šฅ ์ง€ํ‘œ๊ฐ€ ์–ด๋–ป๊ฒŒ ๋ณ€๊ฒฝ๋˜์—ˆ๋Š”์ง€ ์•Œ์•„๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

ํ…Œ์ŠคํŠธ ๊ฒฐ๊ณผ ๋‹จ์ผ ์„œ๋ฒ„ ํ™˜๊ฒฝ์—์„œ๋ณด๋‹ค ๋ชจ๋“  ๋ฉด์—์„œ ํ–ฅ์ƒ๋œ ์ง€ํ‘œ๋ฅผ ๋ณด์˜€์Šต๋‹ˆ๋‹ค. ํŠนํžˆ ๋ˆˆ์— ๋„๋Š” ๊ฒƒ์€ ํ‰๊ท  ํ…Œ์ŠคํŠธ ์‹œ๊ฐ„์ด 4400ms์—์„œ ์•ฝ 300ms๋กœ ๊ฐ์†Œํ–ˆ๋‹ค๋Š” ์ ๊ณผ ํ‰๊ท  TPS๋„ ๊ฑฐ์˜ 20๋ฐฐ ๊ฐ€๊น๊ฒŒ ์ฆ๊ฐ€ํ–ˆ๋‹ค๋Š” ์  ์ž…๋‹ˆ๋‹ค.

๋˜ํ•œ nginx์˜ CPU ์‚ฌ์šฉ๋ฅ ์„ ์กฐํšŒํ•œ ๊ฒฐ๊ณผ 50~60% ์ •๋„๋กœ, 3000๋ช…์šธ ์ดˆ๊ณผํ•˜๋Š” ํ™˜๊ฒฝ์—์„œ๋„ ๋น„๊ต์  ์•ˆ์ •์ ์œผ๋กœ ์„œ๋ฒ„ ์šด์˜์ด ๊ฐ€๋Šฅํ•˜๋‹ค๋Š” ์ ์„ ์˜ˆ์ƒํ•  ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.

 

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

์ƒํ’ˆ ์กฐํšŒ ํ…Œ์ŠคํŠธ

์„œ๋ฒ„ ํ™•์žฅ์ด ์ง„ํ–‰๋œ ์ƒํƒœ์—์„œ ์œ„์™€ ๋™์ผํ•˜๊ฒŒ Redis๋ฅผ ์ด์šฉํ•œ ์บ์‹ฑ ๊ธฐ๋Šฅ์„ ์ ์šฉํ•œ ์ƒํƒœ๋กœ ์ƒํ’ˆ ์กฐํšŒ ์„ฑ๋Šฅ ํ…Œ์ŠคํŠธ๋ฅผ ์ง„ํ–‰ํ•ด๋ณด์•˜์Šต๋‹ˆ๋‹ค.

ํ‰๊ท  TPS๊ฐ€ 12000๊นŒ์ง€ ์ฆ๊ฐ€ํ•˜์˜€๊ณ , ํ‰๊ท  ํ…Œ์ŠคํŠธ ์‹œ๊ฐ„ ๋˜ํ•œ ์•ฝ 240ms๋กœ ๊ฐ์†Œํ•˜์˜€์Šต๋‹ˆ๋‹ค. ๋˜ํ•œ ํ•ด๋‹น ํ…Œ์ŠคํŠธ๊ฐ€ ์ง„ํ–‰๋˜๋Š” ๋™์•ˆ nginx์˜ CPU ์‚ฌ์šฉ๋ฅ ์„ ์‚ดํŽด๋ณธ ๊ฒฐ๊ณผ ์•ฝ 60% ์ •๋„๋กœ ๋งค์šฐ ์•ˆ์ •์ ์ธ ์„ฑ๋Šฅ์„ ๋ณด์˜€์Šต๋‹ˆ๋‹ค.

 

๋กœ๊ทธ์ธ -> ์ƒํ’ˆ ๊ฒ€์ƒ‰ -> ์ƒํ’ˆ ์กฐํšŒ ํ…Œ์ŠคํŠธ

๋งˆ์ง€๋ง‰์œผ๋กœ, ์ด๋ฒˆ ํ”„๋กœ์ ํŠธ์—์„œ ๊ฐ€์žฅ ๋นˆ๋ฒˆํ•˜๊ฒŒ ์‚ฌ์šฉ๋  ๊ฒƒ์œผ๋กœ ์˜ˆ์ƒ๋˜๋Š” ๋กœ์ง์„ ๋ฌถ์–ด์„œ ์„ฑ๋Šฅ ํ…Œ์ŠคํŠธ๋ฅผ ์ง„ํ–‰ํ•ด๋ณด์•˜์Šต๋‹ˆ๋‹ค. ๊ณผ์ •์€ ๋Œ€๋žต ์•„๋ž˜ ๊ทธ๋ฆผ๊ณผ ๋น„์Šทํ•  ๊ฒƒ์œผ๋กœ ์˜ˆ์ƒ๋ฉ๋‹ˆ๋‹ค. (๋กœ๊ทธ์ธ -> ์ƒํ’ˆ ๊ฒ€์ƒ‰ -> ์ƒํ’ˆ ์กฐํšŒ)

๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ์›น์„œ๋ฒ„๋ฅผ ๊ฑฐ์ณ 2๋Œ€์˜ WAS์— ๋ผ์šด๋“œ๋กœ๋นˆ ๋ฐฉ์‹์œผ๋กœ ๋กœ๋“œ๋ฐธ๋Ÿฐ์‹ฑ์ด ์ง„ํ–‰๋˜๋Š” ๋ฐฉ์‹์ด๋ฉฐ, ์บ์‹ฑ ๋˜ํ•œ ์ ์šฉ๋œ ์ƒํƒœ์ž…๋‹ˆ๋‹ค.

์‚ฌ์ „์— 3000๋ช…์˜ ๊ฐ€์ƒ ์‚ฌ์šฉ์ž๋กœ ํ…Œ์ŠคํŠธ๋ฅผ ์ง„ํ–‰ํ•ด๋ณธ ๊ฒฐ๊ณผ nginx์˜ CPU์‚ฌ์šฉ๋ฅ ์ด ํ‰๊ท  98%~100%์„ ๊ธฐ๋กํ–ˆ์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ 2000๋ช…์„ ๊ธฐ์ค€์œผ๋กœ ํ…Œ์ŠคํŠธ๋ฅผ ์ง„ํ–‰ํ•ด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

ํ…Œ์ŠคํŠธ ๊ฒฐ๊ณผ ํ‰๊ท  TPS๋Š” 5600, ํ‰๊ท  ํ…Œ์ŠคํŠธ ์‹œ๊ฐ„์€ ์•ฝ 340ms ์ •๋„๊ฐ€ ๋‚˜์™”์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ์•ž์—์„œ๋„ ์–ธ๊ธ‰ํ–ˆ๋“ฏ์ด ์ƒํ’ˆ๊ณผ ์—ฐ๊ด€๋˜์–ด ์žˆ๋Š” Trade๊ฐ€ ์ถ”๊ฐ€๋  ๋•Œ๋งˆ๋‹ค ์บ์‹œ๊ฐ€ ๋งŒ๋ฃŒ๋˜๊ธฐ ๋•Œ๋ฌธ์— ์‹ค์ œ ์šด์˜ ํ™˜๊ฒฝ์—์„œ๋Š” ํ•ด๋‹น ์„ฑ๋Šฅ ํ…Œ์ŠคํŠธ ๊ฒฐ๊ณผ์—์„œ ๋ณด์ธ ํผํฌ๋จผ์Šค๋ณด๋‹ค๋Š” ์กฐ๊ธˆ ๋” ๋‚ฎ์€ ์„ฑ๋Šฅ์„ ๋ณด์ด๊ฒŒ ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

 

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

๐Ÿ“ ์„œ๋ฒ„ ๊ตฌ์„ฑ

์ด๋ฒˆ ํ”„๋กœ์ ํŠธ์—์„œ ์„œ๋ฒ„ ๊ตฌ์„ฑ์€ AWS S3์™€ Lambda๋ฅผ ์ œ์™ธํ•˜๊ณ  ๋ชจ๋‘ ๋„ค์ด๋ฒ„ ํด๋ผ์šฐ๋“œ ํ”Œ๋žซํผ์„ ์ด์šฉํ•ด์„œ ๊ตฌ์„ฑํ•˜์˜€์Šต๋‹ˆ๋‹ค.

1. Redis Server

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

โœ… FCM ํ† ํฐ ์ €์žฅ์†Œ : [Compact] 1vCPU, 2GB Mem, 50GB Disk

โœ… Login Session ์ €์žฅ์†Œ : [Compact] 1vCPU, 2GB Mem, 50GB Disk

โœ… ์บ์‹œ ๋ฐ์ดํ„ฐ ์ €์žฅ์†Œ : [Compact] 1vCPU, 2GB Mem, 50GB Disk

2. WAS

๋กœ๊ทธ์ธ ํ…Œ์ŠคํŠธ์—์„œ 3000๋ช…์˜ ์‚ฌ์šฉ์ž ์ ‘์† ์‹œ ๋ถˆ์•ˆ์ •ํ•œ ์„ฑ๋Šฅ์ง€ํ‘œ๋ฅผ ๋ณด์˜€์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ๊ธฐ์กด์— WAS 1๋Œ€๋งŒ ์ด์šฉํ•˜๋˜ ๋ฐฉ์‹์—์„œ ์›น์„œ๋ฒ„ nginx์™€ WAS1๋Œ€๋ฅผ ์ถ”๊ฐ€๋กœ ๋„์–ด์„œ ๋กœ๋“œ๋ฐธ๋Ÿฐ์‹ฑ์„ ํ†ตํ•œ ๋ถ€ํ•˜ ๋ถ„์‚ฐ์ด ๊ฐ€๋Šฅํ•˜๋„๋ก ์„œ๋ฒ„ ๊ตฌ์„ฑ์„ ๋ณ€๊ฒฝํ•˜์˜€์Šต๋‹ˆ๋‹ค.

โœ… WAS 1 : [Compact] 1vCPU, 2GB Mem, 50GB Disk

โœ… WAS 2 : [Compact] 1vCPU, 2GB Mem, 50GB Disk

โœ… nginx :  [Standard] 2vCPU , 4GB Mem, 50GB Disk

3. MySQL

์„ฑ๋Šฅ ํ…Œ์ŠคํŠธ ์ด์ „์— DB์—์„œ ๋ฐœ์ƒํ•˜๋Š” ๋ณ‘๋ชฉํ˜„์ƒ์„ ๊ฐœ์„ ํ•˜๊ณ ์ž ์‚ฌ์ „์— Master/Slave ๊ตฌ์กฐ์˜ Replication์„ ๊ตฌ์„ฑํ–ˆ์—ˆ์Šต๋‹ˆ๋‹ค. ์ผ๋‹จ Slave์„œ๋ฒ„๋Š” 1๊ฐœ๋งŒ ๊ตฌ์„ฑํ•˜์˜€๊ณ , Master ์„œ๋ฒ„์™€ Slave ์„œ๋ฒ„ ๋ชจ๋‘ ๋™์ผํ•œ ์ŠคํŽ™์˜ ์„œ๋ฒ„๋ฅผ ์‚ฌ์šฉํ–ˆ์Šต๋‹ˆ๋‹ค. (๊ธฐ๋ณธ์ ์œผ๋กœ Master์„œ๋ฒ„๋Š” Slave ์„œ๋ฒ„ ์ŠคํŽ™๊ณผ ๋™์ผํ•˜๊ฑฐ๋‚˜ ๋” ๋†’๊ฒŒ ๊ตฌ์„ฑํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.)

โœ… MySQL Master : [Compact] 1vCPU, 2GB Mem, 50GB Disk

โœ… MySQL Slave : [Compact] 1vCPU, 2GB Mem, 50GB Disk

4. Jenkins

์ฒ˜์Œ Jenkins ์„œ๋ฒ„๋ฅผ ๋„์—ˆ์„ ๋•Œ๋Š” NCP์—์„œ 1๋…„๊ฐ„ ๋ฌด๋ฃŒ๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” micro ์„œ๋ฒ„๋ฅผ ์‚ฌ์šฉํ–ˆ์—ˆ์Šต๋‹ˆ๋‹ค. git push ๋˜๋Š” pull request๊ฐ€ ๋ฐœ์ƒ ํ•  ๋•Œ๋งˆ๋‹ค ์ž๋™ ํ…Œ์ŠคํŠธ์™€ ๋นŒ๋“œ๊ฐ€ ์ง„ํ–‰๋˜๋„๋ก ์„ค์ •ํ–ˆ์—ˆ๋Š”๋ฐ, ํ…Œ์ŠคํŠธ๊ฐ€ ์ง„ํ–‰๋  ๋•Œ๋งˆ๋‹ค 20๋ถ„์—์„œ ์ตœ๋Œ€ 1์‹œ๊ฐ„๊นŒ์ง€ ๊ฑธ๋ฆฌ๊ณ  ์‹ฌํ•  ๊ฒฝ์šฐ Timeout์œผ๋กœ ์ธํ•ด ๋นŒ๋“œ๊ฐ€ ์‹คํŒจํ•˜๋Š” ๋ฌธ์ œ๊ฐ€ ์ƒ๊ฒผ์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ Jenkins ์„œ๋ฒ„์˜ ์ŠคํŽ™์€ ๋‹ค๋ฅธ ์„œ๋ฒ„๋“ค๋ณด๋‹ค ์กฐ๊ธˆ ๋” ๋†’์€ ์‚ฌ์–‘์„ ์„ ํƒํ–ˆ์Šต๋‹ˆ๋‹ค.

โœ… Jenkins : [Standard] 2vCPU , 4GB Mem, 50GB Disk

5. AWS S3 & Lambda

ํ”„๋กœ์ ํŠธ์— ์‚ฌ์šฉ๋˜๋Š” ์ด๋ฏธ์ง€๋ฅผ ์ €์žฅํ•˜๊ธฐ ์œ„ํ•ด AWS S3์™€, ์ด๋ฏธ์ง€ ๋ฆฌ์‚ฌ์ด์ง•์„ ์œ„ํ•ด AWS Lambda๋ฅผ ์„ ํƒํ–ˆ์Šต๋‹ˆ๋‹ค. ํ•ด๋‹น ํ”„๋กœ์ ํŠธ์—์„œ ์ด๋ฏธ์ง€๋ฅผ ์—…๋กœ๋“œํ•  ์ˆ˜ ์žˆ๋Š” ์‚ฌ์šฉ์ž๋Š” ๊ด€๋ฆฌ์ž ๋ฟ์ด๊ธฐ ๋•Œ๋ฌธ์— ์‚ฌ์šฉ๋Ÿ‰์ด ๊ทธ๋ฆฌ ๋†’์ง€ ์•Š์„ ๊ฒƒ์ด๋ผ๊ณ  ํŒ๋‹จํ–ˆ์Šต๋‹ˆ๋‹ค. ์ถ”ํ›„ ์ปค๋ฎค๋‹ˆํ‹ฐ์„ฑ ๊ฒŒ์‹œํŒ์„ ์ถ”๊ฐ€ ๊ตฌํ˜„ํ•œ๋‹ค๋ฉด ํ•ด๋‹น ์„œ๋ฒ„ ์ŠคํŽ™๋„ Sacle -UP์„ ์ง„ํ–‰ํ•  ์˜ˆ์ •์ž…๋‹ˆ๋‹ค.

โœ… AWS S3 & Lambda : AWS ํ”„๋ฆฌ ํ‹ฐ์–ด (์ด๋ฏธ์ง€ ์ €์žฅ ๊ธฐ๋ณธ 50GB, Lambda ์›”๋ณ„ ๋ฌด๋ฃŒ์š”์ฒญ 100๋งŒ)

6. ngrinder

์ตœ๋Œ€ํ•œ ์ •ํ™•ํ•œ ํ…Œ์ŠคํŠธ ๊ฒฐ๊ณผ ์ง€ํ‘œ๋ฅผ ์–ป๊ธฐ ์œ„ํ•ด Controller์™€ Agent, ๊ทธ๋ฆฌ๊ณ  ํ…Œ์ŠคํŠธ Target์ด ๋˜๋Š” Server๋ฅผ ๋ชจ๋‘ ๊ฐ๊ฐ ๋„์–ด์„œ ์„ฑ๋Šฅ ํ…Œ์ŠคํŠธ๋ฅผ ์ง„ํ–‰ํ•˜์˜€์Šต๋‹ˆ๋‹ค. Controller์˜ ๋ช…๋ น์„ ๋ฐ›์•„ Agent์—์„œ ์‹ค์ œ ๋ถ€ํ•˜๋ฅผ ๋ฐœ์ƒ์‹œํ‚ค๊ธฐ ๋•Œ๋ฌธ์— Agent์˜ ์„œ๋ฒ„ ์ŠคํŽ™์„ ๊ฐ€์žฅ ๋†’๊ฒŒ ๊ตฌ์„ฑํ•˜์˜€์Šต๋‹ˆ๋‹ค.

โœ… Controller server : [Standard] 2vCPU, 4GB Mem, 50GB Disk

โœ… Agent server : [Standard] 4vCPU, 8GB Mem, 50GB Disk


Shoe-auction 1์ฐจ ์„œ๋ฒ„ ๊ตฌ์กฐ๋„

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

 

 

 

f-lab-edu/shoe-auction

๊ฐœ์ธ ๊ฐ„ ์‹ ๋ฐœ ๊ฑฐ๋ž˜ ์„œ๋น„์Šค. Contribute to f-lab-edu/shoe-auction development by creating an account on GitHub.

github.com