์Šคํƒ€ํŠธ์—…์˜ ๋ถ€ํ•˜ ํ…Œ์ŠคํŠธ AtoZ

seonhyung
  • #๋ถ€ํ•˜ํ…Œ์ŠคํŠธ
  • #aws
  • #ecs
  • #rds
  • #elasticache

๋“ค์–ด๊ฐ€๋ฉฐ

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

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

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

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

๋ถ€ํ•˜ ํ…Œ์ŠคํŠธ ์ง„ํ–‰ ์ ˆ์ฐจ


๋ถ€ํ•˜ ํ…Œ์ŠคํŠธ๋ฅผ ์ง„ํ–‰ํ•˜๋Š” ์ˆœ์„œ๋ฅผ ํฌ๊ฒŒ ๋‚˜๋ˆ„๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

0. ํ…Œ์ŠคํŠธ ํˆด ์„ ์ •

1. ํ…Œ์ŠคํŠธ ์‹œ๋‚˜๋ฆฌ์˜ค ์ •์˜

2. ๋ชฉํ‘œ ์ง€ํ‘œ ์ •๋ฆฌ ( ์‘๋‹ต ์†๋„, ์œ ์ €์ˆ˜ )

3. ์ธํ”„๋ผ ํŒŒ์•…

4. ํ…Œ์ŠคํŠธ ์ค€๋น„

5. ํ…Œ์ŠคํŠธ ์ง„ํ–‰ & ๊ฒฐ๊ณผ ๊ธฐ๋ก

6. ๊ฐœ์„  ๋ฐฉํ–ฅ ์ •๋ฆฌ & ๊ฒฐ๊ณผ ์ ์šฉ

๋‹ค์Œ์—๋Š” ๊ฐ๊ฐ์˜ ํ•ญ๋ชฉ์— ๋Œ€ํ•˜์—ฌ ๊ฐ„๋‹จํžˆ ์†Œ๊ฐœํ•ด ๋“œ๋ฆฌ๊ฒ ์Šต๋‹ˆ๋‹ค.

0. ํ…Œ์ŠคํŠธ ํˆด ์„ ์ •

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

์ค‘์š”ํ•œ ๊ฒƒ

  • ์š”๊ตฌ๋˜๋Š” ํŠธ๋ž˜ํ”ฝ์ด ๋†’์œผ๋ฉด Cloud ํ™˜๊ฒฝ์—์„œ ์‰ฝ๊ฒŒ ํ™•์žฅ ๊ฐ€๋Šฅํ•œ์ง€ ํ™•์ธ
  • ์‚ฌ์šฉ์ž๊ฐ€ ๋งŽ์€ ํˆด์ธ์ง€ (JMeter, nGrinder, locust, k6 ๋“ฑ)

๋†“์น˜๊ธฐ ์‰ฌ์šด ๊ฒƒ

  • ํž™์Šคํ„ฐ ํˆด ์‚ฌ์šฉ ์ง€์–‘ํ•˜๊ธฐ

1. ํ…Œ์ŠคํŠธ ์‹œ๋‚˜๋ฆฌ์˜ค ์ •์˜

locust๋กœ ์ž‘์„ฑํ•œ ์‹œ๋‚˜๋ฆฌ์˜ค (https://github.com/locustio/locust/blob/master/examples/locustfile.py)

locust๋กœ ์ž‘์„ฑํ•œ ์‹œ๋‚˜๋ฆฌ์˜ค (https://github.com/locustio/locust/blob/master/examples/locustfile.py)

๋ถ€ํ•˜ ํ…Œ์ŠคํŠธ์˜ ์‹œ์ž‘์ž…๋‹ˆ๋‹ค. ํ…Œ์ŠคํŠธ ์‹œ๋‚˜๋ฆฌ์˜ค๋ฅผ ์ •์˜ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์•ฑ ์„œ๋น„์Šค๋ฅผ ์šด์˜ํ•˜๋Š” API ์„œ๋ฒ„๋ฅผ ์˜ˆ๋กœ ๋“ค๋ฉด ์•ฑ์—์„œ ํ˜ธ์ถœํ•˜๋Š” API๋ฅผ ์ •๋ฆฌํ•ด ๋ด…๋‹ˆ๋‹ค. ๋Œ€๋ถ€๋ถ„์˜ ๋ถ€ํ•˜ ํ…Œ์ŠคํŠธ ํˆด์€ ์‹œ๋‚˜๋ฆฌ์˜ค ์„ค์ •์„ ์ง€์›ํ•˜๋‹ˆ ํˆด์— ์‹œ๋‚˜๋ฆฌ์˜ค๋ฅผ ์…‹ํŒ…ํ•˜๋ฉฐ ์‹œ๋‚˜๋ฆฌ์˜ค๋ฅผ ์ •๋ฆฌํ•˜๋Š” ๊ฒƒ๋„ ์ข‹์€ ๋ฐฉ๋ฒ•์ž…๋‹ˆ๋‹ค.

์ค‘์š”ํ•œ ๊ฒƒ

  • ๋˜๋„๋ก ํ•˜๋‚˜๋„ ๋นผ๋†“์ง€ ์•Š๊ณ  ๋ชจ๋“  ๊ฒฝ์šฐ ๊ณ ๋ คํ•˜๊ธฐ
  • ์‹œ๋‚˜๋ฆฌ์˜ค๊ฐ€ ์–ด๋–ค ์—ญํ• ์„ ํ•˜๋Š”์ง€ 90% ์ด์ƒ ์ดํ•ด ํ•„์ˆ˜

2. ๋ชฉํ‘œ ์ง€ํ‘œ ์ •๋ฆฌ ( ์‘๋‹ต ์†๋„, ์œ ์ €์ˆ˜ )

์‹œ๋‚˜๋ฆฌ์˜ค ์„ค์ •์ด ์™„๋ฃŒ๋˜์—ˆ์œผ๋ฉด ์‘๋‹ต ์†๋„๋‚˜ ๋ชฉํ‘œ ๋™์‹œ ์ ‘์†์ž ์ˆ˜์™€ ๊ฐ™์€ ์ง€ํ‘œ๋ฅผ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค. ์ ‘์†์ž ์ˆ˜๋Š” ๋ณดํ†ต VU(Virtual User)๋กœ ๋งŽ์ด ํ‘œ๊ธฐํ•ฉ๋‹ˆ๋‹ค. ์‘๋‹ต ์†๋„๋Š” ๋ณดํ†ต p50, p95, p99 ๊ฐ™์€ ์ง€ํ‘œ ์•ˆ์— ๋ช‡ ms๋ฅผ ๋ชฉํ‘œํ•˜๋Š”์ง€ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค. ํŒ€์›๊ณผ ์ถฉ๋ถ„ํ•œ ๋…ผ์˜๋ฅผ ๊ฑฐ์ณ โ€œ์ดˆ๋‹น VU 10๋งŒ๋ช…์ด 10์ดˆ๋™์•ˆ ๋“ค์–ด์™”์„ ๋•Œ latency p95 200msโ€ ๋“ฑ์œผ๋กœ ๋…ผ์˜ํ•ด ๋ด…์‹œ๋‹ค.

์ค‘์š”ํ•œ ๊ฒƒ

  • ํ˜„์žฌ ์„œ๋น„์Šค๊ฐ€ ์›ํ™œํ•  ๋•Œ ์‘๋‹ต ์†๋„๋ฅผ ํŒŒ์•…ํ•˜๋ฉฐ ๊ธฐ์ค€ ์žก์•„๋ณด๊ธฐ
  • ๊ธฐ์กด ๋ฐ์ดํ„ฐ ๊ธฐ๋ฐ˜์œผ๋กœ ๊ธฐ์ค€ ๊ณ„์‚ฐํ•˜๊ธฐ

3. ์ธํ”„๋ผ ํŒŒ์•…

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

์ค‘์š”ํ•œ ๊ฒƒ

  • ๋ชจ๋“  ์ธํ”„๋ผ ๋ฆฌ์†Œ์Šค ์ฒดํฌํ•ด๋‘๊ธฐ

๋†“์น˜๊ธฐ ์‰ฌ์šด ๊ฒƒ

  • ์ด๊ฑด ๋‹น์—ฐํžˆ ๋ฌธ์ œ์—†์ง€! ๋ผ๊ณ  ์ƒ๊ฐํ•œ ๋ถ€๋ถ„์—์„œ ๋ณ‘๋ชฉ์ด ๋”ฑ ์ƒ๊น€

4. ํ…Œ์ŠคํŠธ ์ค€๋น„

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

์ค‘์š”ํ•œ ๊ฒƒ

  • ์‹ค์ œ ์šด์˜ ํ™˜๊ฒฝ ๋ณต์ œ (API ์„œ๋ฒ„, DB ๋“ฑ)
  • ํ…Œ์ŠคํŠธ์šฉ ์œ ์ € ๋ฐ์ดํ„ฐ ์ถ”๊ฐ€

5. ํ…Œ์ŠคํŠธ ์ง„ํ–‰ & ๊ฒฐ๊ณผ ๊ธฐ๋ก

ํ…Œ์ŠคํŠธ ๊ฒฐ๊ณผ ๊ธฐ๋ก ์˜ˆ์‹œ

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

์ค‘์š”ํ•œ ๊ฒƒ

  • ํ…Œ์ŠคํŠธ ๋Œ€์ƒ ๋ฆฌ์†Œ์Šค ๋ณ€๊ฒฝ์ด ๋น ๋ฅด๊ฒŒ ์ด๋ค„์งˆ ์ˆ˜ ์žˆ๋Š” ํ™˜๊ฒฝ ๊ตฌ์ถ•ํ•˜๊ธฐ
  • ๋ฆฌ์†Œ์Šค์˜ ๋ชจ๋“  ํ•˜๋“œ์›จ์–ด๋ฅผ ๋ณ‘๋ชฉ ๋Œ€์ƒ ํ›„๋ณด๋กœ ๋‘๊ธฐ ( CPU, Memory, Network, Storage ๋“ฑ )

๋†“์น˜๊ธฐ ์‰ฌ์šด ๊ฒƒ

  • ๋ถ€ํ•˜ ๋ฐœ์ƒ๊ธฐ ๋ณธ์ธ์ด ๋ณ‘๋ชฉ์ธ ๊ฒฝ์šฐ๊ฐ€ ์ž์ฃผ ์žˆ์œผ๋ฏ€๋กœ ๋ชจ๋‹ˆํ„ฐ๋ง ํ•ญ์ƒ ์ง„ํ–‰
  • Network๋Š” ๊ดœ์ฐฎ๊ฒ ์ง€? ํ•˜๋ฉด ๋งค์šฐ ์•ˆ ๊ดœ์ฐฎ์Œ

6. ๊ฐœ์„  ๋ฐฉํ–ฅ ์ •๋ฆฌ & ๊ฒฐ๊ณผ ์ ์šฉ

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

์œ ์šฉํ•œ ํŒ

๋งˆ์ง€๋ง‰์œผ๋กœ ๋ถ€ํ•˜ ํ…Œ์ŠคํŠธ๋ฅผ ์ง„ํ–‰ํ•˜๋ฉฐ ์–ป์€ ์—ฌ๋Ÿฌ ๊ฐ€์ง€ ์œ ์šฉํ•œ ํŒ์„ ์ •๋ฆฌํ•ด๋ณด์•˜์Šต๋‹ˆ๋‹ค. ์ €ํฌ๋Š” AWS ํ™˜๊ฒฝ์—์„œ Node.js API ์„œ๋ฒ„๋ฅผ ๋Œ€์ƒ์œผ๋กœ ํ…Œ์ŠคํŠธ๋ฅผ ์ง„ํ–‰ํ•˜์˜€๊ณ , ECS Fargate, RDS Aurora, Elasticache Redis ๋“ฑ์„ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ํŠธ๋ž˜ํ”ฝ ์ข…๋ฅ˜๋Š” ๋‹จ์‹œ๊ฐ„์— ๋Œ€๋Ÿ‰์˜ ํŠธ๋ž˜ํ”ฝ์ด ๋“ค์–ด์˜ค๋Š” ์ŠคํŒŒ์ดํฌ์„ฑ ํŠธ๋ž˜ํ”ฝ์„ ์ค‘์ ์ ์œผ๋กœ ํ…Œ์ŠคํŠธํ•˜์˜€์Šต๋‹ˆ๋‹ค.

๊ณตํ†ต

  • ํด๋ผ์šฐ๋“œ ์‚ฌ์šฉ์ž์˜ ๊ฒฝ์šฐ ๋ฌธ์ œ ์›์ธ์„ ์ฐพ๊ธฐ ์–ด๋ ค์šธ ๋•Œ ์„œํฌํŠธ ํ”Œ๋žœ์„ ์ตœ๋Œ€ํ•œ ํ™œ์šฉํ•˜๋Š” ๊ฒƒ์ด ์ค‘์š” (๋ณธ์ธ์˜ ๊ฒฝ์šฐ AWS๊ณผ ๋ฏธํŒ…๋งŒ 3์ฐจ๋ก€ ์ง„ํ–‰)
  • ์ผ๋ฐ˜์ ์ธ ๊ฒฝ์šฐ, ํ…Œ์ŠคํŠธ 1ํšŒ๋‹น 1๊ฐœ์˜ ๋ณ€์ˆ˜๋งŒ ๋ฐ”๊พธ๋Š” ๊ฒƒ ์ถ”์ฒœ
  • ๋ˆ ์•„๋ผ์ง€ ๋ง๊ณ  ๋น ๋ฅด๊ฒŒ ์ง„ํ–‰ํ•˜๋Š” ๊ฒƒ์ด ์˜คํžˆ๋ ค ์ตœ์ข…์ ์œผ๋กœ ๋ˆ๊ณผ ์‹œ๊ฐ„์„ ์•„๋ผ๋Š” ๊ธธ
  • Scale up: ํ•˜๋“œ์›จ์–ด ์„ฑ๋Šฅ ์—…๊ทธ๋ ˆ์ด๋“œ (์ˆ˜์ง ํ™•์žฅ), Scale out: ํ•˜๋“œ์›จ์–ด ๊ฐœ์ˆ˜ ๋Š˜๋ฆฌ๊ธฐ (์ˆ˜ํ‰ ํ™•์žฅ)

AWS ECS Fargate

  • ์ฃผ์š” ๋ณ€์ˆ˜: CPU, Memory, (Network)
  • Fargate๊ฐ€ ๋‚ด๋ถ€์ ์œผ๋กœ ec2๋ฅผ ๋„์šฐ๋Š” ๊ตฌ์กฐ๋ผ ํ™•์ธํ•  ์ˆ˜ ์—†๋Š” Network Bandwidth limt์„ ์ ์šฉ๋ฐ›์Œ (AWS Support ๋ฌธ์˜ ๋‹ต๋ณ€ ๊ฒฐ๊ณผ)
  • ๋น ๋ฅธ ํ…Œ์ŠคํŠธ ์ง„ํ–‰์„ ์œ„ํ•ด ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ๋น ๋ฅด๊ฒŒ ๋œจ๋„๋ก ์„ค์ • (์ฐธ๊ณ ์ž๋ฃŒ)

AWS RDS Aurora (Postgres)

  • ์ฃผ์š” ๋ณ€์ˆ˜: CPU, Memory, DB Connection count, Network
  • Serverless ์ฃผ์š” ๋ณ€์ˆ˜: Serverless Capacity
  • ๋ชจ๋‹ˆํ„ฐ๋ง์€ Performance Insight(์ดํ•˜ PI)์™€ Monitoring ํƒญ์—์„œ ์ฃผ๋กœ ์ง„ํ–‰
  • PI์— LWLock:lock_manager์ด ๊ด€์ธก๋  ๊ฒฝ์šฐ connection pool์ด ๋ฌธ์ œ๊ฐ€ ๋˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ์žˆ์œผ๋ฏ€๋กœ RDS Proxy ์ ์šฉ ๊ณ ๋ ค
  • PI CPU ๋Œ€๊ธฐ๊ฐ€ ๊ธธ๋‹ค๋ฉด ๋ฌธ์ œ๊ฐ€ ๋˜๋Š” ์ฟผ๋ฆฌ์˜ ์ตœ์ ํ™” ์ง€์ ์„ ์‚ดํŽด๋ณด๊ฑฐ๋‚˜ Scale up/out ์ง„ํ–‰
  • ๋Œ€๋Ÿ‰์˜ ํ…Œ์ŠคํŠธ ๋ฐ์ดํ„ฐ๊ฐ€ ๋“ค์–ด๊ฐ”๋‹ค๋ฉด vacuum analyze ์ฟผ๋ฆฌ ์‹คํ–‰

AWS Elasticache (Redis)

  • ์ฃผ์š” ๋ณ€์ˆ˜: Memory, CPU, Network
  • ์ŠคํŒŒ์ดํฌ ํ…Œ์ŠคํŠธ ์ค‘ ์ƒ์ƒ์น˜ ๋ชปํ•˜๊ฒŒ Network ์ง€์—ฐ์ด ํฌ๊ฒŒ ๋ฐœ์ƒํ•ด ๋ฌธ์ œ ์›์ธ์„ ์ฐพ๊ธฐ ํž˜๋“  ๊ฒฝ์šฐ๊ฐ€ ์žˆ์—ˆ์Œ

Appendix. ๋ถ€ํ•˜ ํ…Œ์ŠคํŠธ ํˆด

1. LOCUST (https://locust.io)

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

๊ทธ๋ฆฌ๊ณ  ECS Spot Fargate๋ฅผ ์‚ฌ์šฉํ•ด ์ €๋ ดํ•œ ๊ฐ€๊ฒฉ์œผ๋กœ Distributed load testing์ด ๊ฐ€๋Šฅํ•œ example์ด AWS ๊ณต์‹ ๋ ˆํฌ์— ์˜ฌ๋ผ์™€ ์žˆ์Šต๋‹ˆ๋‹ค. ๋งˆ์ง€๋ง‰์œผ๋กœ ์ƒ๋‹จ ์ด๋ฏธ์ง€์ฒ˜๋Ÿผ ๋นŒํŠธ์ธ์œผ๋กœ Web UI๋ฅผ ์ œ๊ณตํ•ด ํŠธ๋ž˜ํ”ฝ์„ ๋ณ€๊ฒฝํ•ด๊ฐ€๋ฉฐ ์ง€ํ‘œ๋“ค์„ ์‚ดํŽด๋ณด๊ธฐ ์ข‹๊ฒŒ ์ œ๊ณตํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

2. k6 (https://k6.io)

JavaScript๋กœ ์‹œ๋‚˜๋ฆฌ์˜ค ์ž‘์„ฑ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  Grafana์—์„œ ์ œ๊ณตํ•˜๋Š” k6 Cloud ํ™˜๊ฒฝ์—์„œ ๋น„์šฉ์„ ์ง€๋ถˆํ•˜๊ณ  ํ…Œ์ŠคํŠธ๋ฅผ ์ง„ํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋‹ค๋งŒ k6 Cloud ํ•œ์ •์œผ๋กœ ๋Œ€๋Ÿ‰ ๋ถ€ํ•˜ ๋ฐœ์ƒ ์‹œ k6 Cloud์—์„œ ๋‹จ์ผ๋จธ์‹ ์„ ํ™œ์šฉํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋ถ€ํ•˜๋ฐœ์ƒ๊ธฐ์˜ ์„ฑ๋Šฅ์ด ๋”ฐ๋ผ์˜ค์ง€ ๋ชปํ•˜๋Š” ์ด์Šˆ๊ฐ€ ๊ฐ„ํ˜น ์žˆ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

3. Artillery (https://www.artillery.io)

Yaml๊ณผ JavaScript๋กœ ์‹œ๋‚˜๋ฆฌ์˜ค ์ž‘์„ฑ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค. AWS Lambda์™€ Fargate๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ํƒœ์ƒ์ ์œผ๋กœ Distributed load testing์ด ๊ฐ€๋Šฅํ•œ ์ข‹์€ ์ปจ์…‰์˜ ํˆด์ด์ง€๋งŒ ์•„์ง ์žฆ์€ ์˜ค๋ฅ˜ ๋“ฑ์œผ๋กœ ์ธํ•ด ์„ฑ์ˆ™ํ•จ์ด ๊ฐ–์ถฐ์ง€์ง€๋Š” ์•Š์€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. (24.01.31 ๊ธฐ์ค€)


๊ทธ์™ธ ์œ ๋ช…ํ•œ ํˆด์€ Apache JMeter, nGrinder, Gatling ๋“ฑ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

๋งˆ์น˜๋ฉฐ

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

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

โ† ๋ชฉ๋ก์œผ๋กœ ๋Œ์•„๊ฐ€๊ธฐ

Art Changes Life

๋…ธ๋จธ์Šค์™€ ํ•จ๊ป˜ ์—”ํ„ฐํ…Œํฌ ์‚ฐ์—…์„ ํ˜์‹ ํ•ด๋‚˜๊ฐˆ ๋ฉค๋ฒ„๋ฅผ ์ฐพ์Šต๋‹ˆ๋‹ค.

์ฑ„์šฉ ์ค‘์ธ ๊ณต๊ณ  ๋ณด๊ธฐ