๊ด€๋ฆฌ ๋ฉ”๋‰ด

Unfazedโ—๏ธ๐ŸŽฏ

์„ฑ๋Šฅ ํ…Œ์ŠคํŠธ(์ข…๋ฅ˜, ์ง€ํ‘œ, ๋„๊ตฌ) ๋ณธ๋ฌธ

Infrastructure & DevOps/์‹œ์Šคํ…œ ์„ค๊ณ„

์„ฑ๋Šฅ ํ…Œ์ŠคํŠธ(์ข…๋ฅ˜, ์ง€ํ‘œ, ๋„๊ตฌ)

9taetae9 2025. 7. 28. 23:37
728x90

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

 

1. ์„ฑ๋Šฅ ํ…Œ์ŠคํŠธ์˜ ์ข…๋ฅ˜

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

  • ๋ถ€ํ•˜ ํ…Œ์ŠคํŠธ (Load Testing): ์ถœํ‡ด๊ทผ ์‹œ๊ฐ„๋Œ€์˜ ๊ตํ†ต๋Ÿ‰ ํ…Œ์ŠคํŠธ
    • ๋ชฉํ‘œ: ์‹œ์Šคํ…œ์ด ์˜ˆ์ƒ๋˜๋Š” ์ตœ๋Œ€์น˜์˜ ์ •์ƒ์ ์ธ ๋ถ€ํ•˜(์˜ˆ: ํ”ผํฌ ํƒ€์ž„ ํŠธ๋ž˜ํ”ฝ)๋ฅผ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋Š”์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค. ์‹œ์Šคํ…œ์ด ์‚ฌ์ „์— ์ •์˜๋œ ์„ฑ๋Šฅ ๋ชฉํ‘œ์น˜(์‘๋‹ต ์‹œ๊ฐ„, ์ฒ˜๋ฆฌ๋Ÿ‰ ๋“ฑ)๋ฅผ ๋งŒ์กฑํ•˜๋Š”์ง€ ๊ฒ€์ฆํ•˜๋Š” ๊ฒƒ์ด ์ฃผ๋ชฉ์ ์ž…๋‹ˆ๋‹ค.
    • ex: ์ด ๋‹ค๋ฆฌ๊ฐ€ ํ‰์ผ ์˜คํ›„ 5์‹œ์˜ ์ถœํ‡ด๊ทผ ์‹œ๊ฐ„๋Œ€ ๊ตํ†ต๋Ÿ‰์„ ์ •์ฒด ์—†์ด ์†Œํ™”ํ•  ์ˆ˜ ์žˆ๋Š”๊ฐ€?
  • ์ŠคํŠธ๋ ˆ์Šค ํ…Œ์ŠคํŠธ (Stress Testing): ๋‹ค๋ฆฌ๊ฐ€ ๊ฒฌ๋”œ ์ˆ˜ ์žˆ๋Š” ํ•œ๊ณ„ ํŠธ๋Ÿญ ๋Œ€์ˆ˜ ํ…Œ์ŠคํŠธ
    • ๋ชฉํ‘œ: ์‹œ์Šคํ…œ์˜ ํ•œ๊ณ„์ ์„ ํŒŒ์•…ํ•˜๊ธฐ ์œ„ํ•ด ์˜๋„์ ์œผ๋กœ ์ •์ƒ ์ฒ˜๋ฆฌ ์šฉ๋Ÿ‰์„ ์ดˆ๊ณผํ•˜๋Š” ๋งค์šฐ ๋†’์€ ๋ถ€ํ•˜๋ฅผ ๊ฐ€ํ•ฉ๋‹ˆ๋‹ค. ์‹œ์Šคํ…œ์ด ์–ธ์ œ, ์–ด๋–ป๊ฒŒ ์‹คํŒจํ•˜๋Š”์ง€, ๊ทธ๋ฆฌ๊ณ  ๋ถ€ํ•˜๊ฐ€ ์ œ๊ฑฐ๋˜์—ˆ์„ ๋•Œ ์ •์ƒ์ ์œผ๋กœ ๋ณต๊ตฌ๋˜๋Š”์ง€๋ฅผ ํ™•์ธํ•˜์—ฌ ์‹œ์Šคํ…œ์˜ ์•ˆ์ •์„ฑ๊ณผ ํšŒ๋ณต์„ฑ์„ ์ธก์ •ํ•ฉ๋‹ˆ๋‹ค.
    • ex: ํ™”๋ฌผ์„ ๊ฐ€๋“ ์‹ค์€ ํŠธ๋Ÿญ์„ ๋ช‡ ๋Œ€๊นŒ์ง€ ์˜ฌ๋ ค์•ผ ๋‹ค๋ฆฌ๊ฐ€ ํœ˜๊ธฐ ์‹œ์ž‘ํ•˜๋Š”๊ฐ€? ๊ทธ๋ฆฌ๊ณ  ํŠธ๋Ÿญ์„ ์น˜์› ์„ ๋•Œ ๋‹ค๋ฆฌ๋Š” ์›๋ž˜ ์ƒํƒœ๋กœ ๋Œ์•„์˜ค๋Š”๊ฐ€?
  • ์ŠคํŒŒ์ดํฌ ํ…Œ์ŠคํŠธ (Spike Testing): ๊ฐ‘์ž‘์Šค๋Ÿฌ์šด ์ธํŒŒ๊ฐ€ ๋ชฐ๋ฆฌ๋Š” ์ƒํ™ฉ ํ…Œ์ŠคํŠธ
    • ๋ชฉํ‘œ: ๋งค์šฐ ์งง์€ ์‹œ๊ฐ„ ๋™์•ˆ ์‚ฌ์šฉ์ž๊ฐ€ ํญ๋ฐœ์ ์œผ๋กœ ๊ธ‰์ฆํ•˜๋Š” ์ƒํ™ฉ์„ ์‹œ๋ฎฌ๋ ˆ์ด์…˜ํ•ฉ๋‹ˆ๋‹ค. ํ‹ฐ์ผ“ ์˜ˆ๋งค, ์„ ์ฐฉ์ˆœ ์ด๋ฒคํŠธ, ๋Œ€๊ทœ๋ชจ ํ• ์ธ ํ–‰์‚ฌ์™€ ๊ฐ™์ด ์ˆœ๊ฐ„์ ์ธ ํŠธ๋ž˜ํ”ฝ ํญ์ฆ์ด ์˜ˆ์ƒ๋˜๋Š” ์‹œ์Šคํ…œ์˜ ๋Œ€์‘ ๋Šฅ๋ ฅ์„ ๊ฒ€์ฆํ•˜๋Š” ๋ฐ ํ•„์ˆ˜์ ์ž…๋‹ˆ๋‹ค.
    • ex: 1๋งŒ ๋ช…์˜ ์‚ฌ๋žŒ์ด ๊ฐ‘์ž๊ธฐ ๋‹ค๋ฆฌ ์œ„๋กœ ํ•œ๊บผ๋ฒˆ์— ๋›ฐ์–ด ์˜ฌ๋ผ๊ฐ”์„ ๋•Œ ๋‹ค๋ฆฌ๋Š” ์–ด๋–ป๊ฒŒ ๋ฐ˜์‘ํ•˜๋Š”๊ฐ€?
  • ๋‚ด๊ตฌ์„ฑ/๋‹ด๊ธˆ ํ…Œ์ŠคํŠธ (Endurance/Soak Testing): 24์‹œ๊ฐ„ ๋‚ด๋‚ด ๊ณ„์†๋˜๋Š” ๊ตํ†ต๋Ÿ‰ ํ…Œ์ŠคํŠธ
    • ๋ชฉํ‘œ: ๋น„๊ต์  ํ‰์ดํ•œ ์ˆ˜์ค€์˜ ๋ถ€ํ•˜๋ฅผ ์žฅ์‹œ๊ฐ„(์ˆ˜ ์‹œ๊ฐ„์—์„œ ์ˆ˜ ์ผ) ๋™์•ˆ ์ง€์†์ ์œผ๋กœ ๊ฐ€ํ•˜์—ฌ ์‹œ์Šคํ…œ์˜ ์žฅ๊ธฐ์ ์ธ ์•ˆ์ •์„ฑ์„ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค. ์ด ํ…Œ์ŠคํŠธ๋ฅผ ํ†ตํ•ด ๋ฉ”๋ชจ๋ฆฌ ๋ˆ„์ˆ˜(Memory Leak), ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์—ฐ๊ฒฐ ๋ฌธ์ œ, ์‹œ์Šคํ…œ ๋ฆฌ์†Œ์Šค ๊ณ ๊ฐˆ ๋“ฑ ์‹œ๊ฐ„์ด ์ง€๋‚˜์•ผ ๋“œ๋Ÿฌ๋‚˜๋Š” ๋ฌธ์ œ๋ฅผ ๋ฐœ๊ฒฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
    • ex: ์ถœํ‡ด๊ทผ ์‹œ๊ฐ„๋Œ€์˜ ๊ตํ†ต๋Ÿ‰์„ 48์‹œ๊ฐ„ ๋™์•ˆ ์‰ฌ์ง€ ์•Š๊ณ  ํ˜๋ ค๋ณด๋ƒˆ์„ ๋•Œ, ๋‹ค๋ฆฌ ๊ตฌ์กฐ์— ํ”ผ๋กœ ๊ท ์—ด์ด ์ƒ๊ธฐ์ง€๋Š” ์•Š๋Š”๊ฐ€?

์ด ์™ธ์—๋„ ๋Œ€์šฉ๋Ÿ‰์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์ฒ˜๋ฆฌํ•  ๋•Œ์˜ ์„ฑ๋Šฅ์„ ์ธก์ •ํ•˜๋Š” ๋ณผ๋ฅจ ํ…Œ์ŠคํŠธ(Volume Testing), ์‚ฌ์šฉ์ž๋‚˜ ๋ฐ์ดํ„ฐ ๋ณผ๋ฅจ ์ฆ๊ฐ€์— ๋”ฐ๋ฅธ ์‹œ์Šคํ…œ์˜ ํ™•์žฅ ๋Šฅ๋ ฅ์„ ํ‰๊ฐ€ํ•˜๋Š” ํ™•์žฅ์„ฑ ํ…Œ์ŠคํŠธ(Scalability Testing) ๋“ฑ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

 ์„ฑ๋Šฅ ํ…Œ์ŠคํŠธ ์œ ํ˜•๋ณ„ ์š”์•ฝ

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

2. ํ•ต์‹ฌ ์ง€ํ‘œ

์‹œ์Šคํ…œ์˜ ์ƒํƒœ๋ฅผ ๋ชจ๋‹ˆํ„ฐ๋งํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋˜๋Š” ๋„ค ๊ฐ€์ง€ ํ•ต์‹ฌ ์ง€ํ‘œ๋ฅผ SRE์˜ Four Golden Signals์„ ํ†ตํ•ด ์•Œ์•„๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

4๊ฐ€์ง€ ๊ณจ๋“  ์‹œ๊ทธ๋„

  1. ์ฒ˜๋ฆฌ๋Ÿ‰ (Throughput): "์–ผ๋งˆ๋‚˜ ๋งŽ์ด" ์ฒ˜๋ฆฌํ•˜๋Š”๊ฐ€?
    • ์ •์˜: ๋‹จ์œ„ ์‹œ๊ฐ„๋‹น ์‹œ์Šคํ…œ์ด ์„ฑ๊ณต์ ์œผ๋กœ ์ฒ˜๋ฆฌํ•œ ์š”์ฒญ์˜ ์ˆ˜๋ฅผ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค.
    • ์ฃผ๋กœ TPS(Transactions Per Second) ๋˜๋Š” RPS(Requests Per Second)๋กœ ํ‘œํ˜„๋ฉ๋‹ˆ๋‹ค. ํ•˜๋‚˜์˜ ์‚ฌ์šฉ์ž ํŠธ๋žœ์žญ์…˜(์˜ˆ: '์ƒํ’ˆ ๊ตฌ๋งค')์€ ์—ฌ๋Ÿฌ ๊ฐœ์˜ HTTP ์š”์ฒญ(์˜ˆ: ์žฅ๋ฐ”๊ตฌ๋‹ˆ ์ถ”๊ฐ€, ๊ฒฐ์ œ ์ •๋ณด ์ „์†ก, ์ฃผ๋ฌธ ์™„๋ฃŒ ํŽ˜์ด์ง€ ์š”์ฒญ)์œผ๋กœ ๊ตฌ์„ฑ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
    • Four Golden Signals์˜ ์›๋ฌธ์€ ํ•ต์‹ฌ ์‹œํ‘œ๋ฅผ Traffic ์„ค๋ช…ํ•˜๋‚˜, "์„ฑ๋Šฅ์„ ์ธก์ •ํ•˜๊ณ  ๊ฐœ์„ "ํ•˜๊ธฐ ์œ„ํ•œ ๋ชฉ์ ์— ๋ถ€ํ•ฉํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” '์‹œ์Šคํ…œ์ด ์‹ค์ œ๋กœ ์–ผ๋งˆ๋‚˜ ๋งŽ์€ ์š”์ฒญ์„ ๊ฐ๋‹นํ•ด๋ƒˆ๋Š”๊ฐ€', ์ฆ‰, Traffic(๋“ค์–ด์˜ค๋Š” ์š”์ฒญ์˜ ์–‘, ๋ถ€ํ•˜)์„ ์„ฑ๊ณต์ ์œผ๋กœ ์ฒ˜๋ฆฌํ•ด ๋‚ด๋Š” ๋น„์œจ์„ ์˜๋ฏธํ•˜๋Š” Throughput์ด ์ ํ•ฉํ•˜๋‹ค ์ƒ๊ฐใ…Ž
  2. ์ง€์—ฐ ์‹œ๊ฐ„ / ์‘๋‹ต ์‹œ๊ฐ„ (Latency / Response Time): "์–ผ๋งˆ๋‚˜ ๋นจ๋ฆฌ" ์‘๋‹ตํ•˜๋Š”๊ฐ€?
    • ์ •์˜: ์š”์ฒญ์ด ์‹œ์ž‘๋œ ์‹œ์ ๋ถ€ํ„ฐ ์‘๋‹ต์ด ์™„๋ฃŒ๋  ๋•Œ๊นŒ์ง€ ๊ฑธ๋ฆฌ๋Š” ์‹œ๊ฐ„์ž…๋‹ˆ๋‹ค.
    • ํ‰๊ท ๊ฐ’์˜ ํ•จ์ •: 'ํ‰๊ท  ์‘๋‹ต ์‹œ๊ฐ„'์€ ์„ฑ๋Šฅ์„ ํ‰๊ฐ€ํ•  ๋•Œ ์ข‹์ง€ ๋ชปํ•œ ์ง€ํ‘œ์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ˆ˜์ฒœ ๊ฐœ์˜ ๋น ๋ฅธ ์‘๋‹ต ์† ๋ช‡ ๊ฐœ์˜ ๋งค์šฐ ๋А๋ฆฐ ์‘๋‹ต์ด ํ‰๊ท ๊ฐ’์— ์˜ํ•ด ํฌ์„๋˜์–ด ๋ฌธ์ œ๋ฅผ ์ธ์ง€ํ•˜์ง€ ๋ชปํ•  ์ˆ˜ ์žˆ๊ธฐ์— ์ฃผ์˜ํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค.
    • ๋ฐฑ๋ถ„์œ„์ˆ˜(Percentile)์˜ ํž˜: ์‹ค์ œ ์‚ฌ์šฉ์ž ๊ฒฝํ—˜์„ ๋” ์ •ํ™•ํ•˜๊ฒŒ ํŒŒ์•…ํ•˜๊ธฐ ์œ„ํ•ด ๋ฐฑ๋ถ„์œ„์ˆ˜ ์ง€ํ‘œ๋ฅผ ์‚ฌ์šฉํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
      • P95 (95th Percentile): "95%์˜ ์‚ฌ์šฉ์ž๋Š” ์‘๋‹ต ์‹œ๊ฐ„์ด X ms ์ดํ•˜์ž…๋‹ˆ๋‹ค." ๊ทน๋‹จ์ ์ธ ์˜ˆ์™ธ๋ฅผ ์ œ์™ธํ•œ ๋Œ€๋‹ค์ˆ˜ ์‚ฌ์šฉ์ž์˜ ๊ฒฝํ—˜์„ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค.
      • P99 (99th Percentile): "99%์˜ ์‚ฌ์šฉ์ž๋Š” ์‘๋‹ต ์‹œ๊ฐ„์ด Y ms ์ดํ•˜์ž…๋‹ˆ๋‹ค." ๊ฐ„ํ—์ ์œผ๋กœ ๋ฐœ์ƒํ•˜๋Š” ์‹ฌ๊ฐํ•œ ์„ฑ๋Šฅ ์ €ํ•˜๋ฅผ ํŒŒ์•…ํ•˜๋Š” ๋ฐ ๋งค์šฐ ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค.
      • ex: 100๊ฐœ์˜ ์š”์ฒญ ์ค‘ 98๊ฐœ๊ฐ€ 50ms, 2๊ฐœ๊ฐ€ 2000ms ๊ฑธ๋ ธ๋‹ค๊ณ  ๊ฐ€์ •ํ–ˆ์„ ๋•Œ, ํ‰๊ท  ์‘๋‹ต ์‹œ๊ฐ„์€ ((98*50) + (2*2000)) / 100 = 89ms๋กœ ์–‘ํ˜ธํ•ด ๋ณด์ž…๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ P99 ์‘๋‹ต ์‹œ๊ฐ„์€ 2000ms๋กœ, ์ผ๋ถ€ ์‚ฌ์šฉ์ž๋Š” ์ข‹์ง€ ์•Š์€ ๊ฒฝํ—˜์„ ํ•˜๊ณ  ์žˆ์Œ์„ ํŒŒ์•…ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  3. ์—๋Ÿฌ์œจ (Error Rate): "์–ผ๋งˆ๋‚˜ ์ž์ฃผ" ์‹คํŒจํ•˜๋Š”๊ฐ€?
    • ์ •์˜: ์ „์ฒด ์š”์ฒญ ์ค‘ ์‹คํŒจํ•œ ์š”์ฒญ(์˜ˆ: HTTP 5xx ์„œ๋ฒ„ ์—๋Ÿฌ)์˜ ๋น„์œจ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค.
    • ๋ถ€ํ•˜๊ฐ€ ์ฆ๊ฐ€ํ•จ์— ๋”ฐ๋ผ ์—๋Ÿฌ์œจ์ด 0%๋ฅผ ๋„˜์–ด์„œ๊ธฐ ์‹œ์ž‘ํ•˜๋Š” ๊ฒƒ์€ ์‹œ์Šคํ…œ์ด ํ•œ๊ณ„์— ๋„๋‹ฌํ–ˆ๋‹ค๋Š” ์‹ ํ˜ธ์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  4. ํฌํ™”๋„ (Saturation): "์–ผ๋งˆ๋‚˜ ๊ฐ€๋“ ์ฐผ๋Š”๊ฐ€?"
    • ์ •์˜: CPU, ๋ฉ”๋ชจ๋ฆฌ, ๋””์Šคํฌ I/O, ๋„คํŠธ์›Œํฌ ๋Œ€์—ญํญ ๋“ฑ ์‹œ์Šคํ…œ์˜ ์ฃผ์š” ์ž์›์ด ์šฉ๋Ÿ‰ ํ•œ๊ณ„์— ์–ผ๋งˆ๋‚˜ ๊ทผ์ ‘ํ–ˆ๋Š”์ง€๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ์ง€ํ‘œ์ž…๋‹ˆ๋‹ค.
    • ํฌํ™”๋„๋Š” ๋ฏธ๋ž˜์˜ ์ง€์—ฐ ์‹œ๊ฐ„ ์ฆ๊ฐ€์™€ ์—๋Ÿฌ ๋ฐœ์ƒ์„ ์˜ˆ์ธกํ•˜๋Š” ์„ ํ–‰ ์ง€ํ‘œ์ž…๋‹ˆ๋‹ค. ํฌํ™”๋„๊ฐ€ ๋†’๋‹ค๋Š” ๊ฒƒ์€ ๊ณง ์„ฑ๋Šฅ ์ €ํ•˜๊ฐ€ ์ž„๋ฐ•ํ–ˆ์Œ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค.

์šฉ์–ด ์ •๋ฆฌ

  • ๊ฐ€์ƒ ์‚ฌ์šฉ์ž (Virtual User, VU): ์‹ค์ œ ์‚ฌ์šฉ์ž์˜ ํ–‰๋™์„ ์‹œ๋ฎฌ๋ ˆ์ด์…˜ํ•˜๋Š” ๊ฐ€์ƒ์˜ ๊ฐœ์ฒด๋กœ, ๋ถ€ํ•˜ ํ…Œ์ŠคํŠธ์—์„œ๋Š” VU์˜ ์ˆ˜๋ฅผ ์กฐ์ ˆํ•˜์—ฌ ์‹œ์Šคํ…œ์— ๊ฐ€ํ•ด์ง€๋Š” ๋ถ€ํ•˜ ์ˆ˜์ค€์„ ์ œ์–ดํ•ฉ๋‹ˆ๋‹ค.
  • ๋žจํ”„์—… (Ramp-Up): ํ…Œ์ŠคํŠธ ์‹œ์ž‘ ์‹œ VU์˜ ์ˆ˜๋ฅผ 0์—์„œ ๋ชฉํ‘œ ์ˆ˜์ค€๊นŒ์ง€ ์ ์ง„์ ์œผ๋กœ ๋Š˜๋ฆฌ๋Š” ๊ตฌ๊ฐ„์ž…๋‹ˆ๋‹ค. ์ด๋Š” ์‹œ์Šคํ…œ์— ๊ฐ‘์ž‘์Šค๋Ÿฌ์šด ์ถฉ๊ฒฉ์„ ์ฃผ๋Š” ๊ฒƒ์„ ๋ฐฉ์ง€ํ•˜๊ณ , ๋ถ€ํ•˜๊ฐ€ ์ฆ๊ฐ€ํ•จ์— ๋”ฐ๋ผ ์„ฑ๋Šฅ์ด ์–ด๋–ป๊ฒŒ ๋ณ€ํ™”ํ•˜๋Š”์ง€ ๊ด€์ฐฐํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด ์ค๋‹ˆ๋‹ค.
  • ๋ณ‘๋ชฉ (Bottleneck): ์‹œ์Šคํ…œ ์ „์ฒด์˜ ์ฒ˜๋ฆฌ๋Ÿ‰์„ ์ œํ•œํ•˜๋Š” ํŠน์ • ๊ตฌ์„ฑ ์š”์†Œ๋‚˜ ๋ฆฌ์†Œ์Šค๋ฅผ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค. ์„ฑ๋Šฅ ํ…Œ์ŠคํŠธ ๋ถ„์„์˜ ์ตœ์ข… ๋ชฉํ‘œ๋Š” ๋ฐ”๋กœ ์ด ๋ณ‘๋ชฉ ์ง€์ ์„ ์ฐพ์•„๋‚ด๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์ง€ํ‘œ๋“ค์€ ๊ฐœ๋ณ„์ ์œผ๋กœ๋งŒ ์ธก์ •ํ•˜๊ธฐ๋ณด๋‹ค, ๊ฐ€์ƒ ์‚ฌ์šฉ์ž(VU)๊ฐ€ ์ฆ๊ฐ€ํ•จ์— ๋”ฐ๋ผ ์ฒ˜๋ฆฌ๋Ÿ‰(TPS)์ด ์–ด๋–ป๊ฒŒ ๋ณ€ํ•˜๊ณ , ์–ด๋А ์‹œ์ ๋ถ€ํ„ฐ ์‘๋‹ต ์‹œ๊ฐ„(Latency)์ด ๊ธ‰์ฆํ•˜๋ฉฐ ์—๋Ÿฌ์œจ(Error Rate)์ด ๋‚˜ํƒ€๋‚˜๋Š”์ง€๋ฅผ ํ•จ๊ป˜ ๋ถ„์„ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ด ์ƒ๊ด€๊ด€๊ณ„๋ฅผ ํ†ตํ•ด ์‹œ์Šคํ…œ์˜ ์„ฑ๋Šฅ ๊ณก์„ ์„ ๊ทธ๋ฆฌ๊ณ , '์ •์ƒ ๊ตฌ๊ฐ„', 'ํฌํ™” ๊ตฌ๊ฐ„', '๊ณผ๋ถ€ํ•˜ ๊ตฌ๊ฐ„'์„ ๋ช…ํ™•ํžˆ ๊ตฌ๋ถ„ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋ฅผ ํ†ตํ•ด, "์ด ์‹œ์Šคํ…œ์€ 200๋ช…์˜ ๋™์‹œ ์‚ฌ์šฉ์ž๊ฐ€ ์ ‘์†ํ–ˆ์„ ๋•Œ ์ตœ๋Œ€ 500 TPS๋ฅผ ์ฒ˜๋ฆฌํ•˜๋ฉฐ, ์ด ์ง€์ ์„ ๋„˜์–ด์„œ๋ฉด ์‘๋‹ต ์‹œ๊ฐ„์ด ๊ธ‰๊ฒฉํžˆ ์ €ํ•˜๋˜๊ธฐ ์‹œ์ž‘ํ•œ๋‹ค"์™€ ๊ฐ™์€ ๊ตฌ์ฒด์ ์ด๊ณ  ์˜๋ฏธ ์žˆ๋Š” ๊ฒฐ๋ก ์„ ๋‚ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.


3. ๋ถ€ํ•˜ ํ…Œ์ŠคํŠธ ๋„๊ตฌ

Java/Spring Boot ์ƒํƒœ๊ณ„์—์„œ ๋„๋ฆฌ ์‚ฌ์šฉ๋˜๋Š” ๋ถ€ํ•˜ ํ…Œ์ŠคํŠธ ์˜คํ”ˆ์†Œ์Šค ๋„๊ตฌ๋Š” JMeter, nGrinder, Gatling ์„ธ ๊ฐ€์ง€๊ฐ€ ๋Œ€ํ‘œ์ ์ž…๋‹ˆ๋‹ค.

  • Apache JMeter
    • ์˜ค๋žซ๋™์•ˆ ์—…๊ณ„ ํ‘œ์ค€์œผ๋กœ ์ž๋ฆฌ ์žก์•„์˜จ ์ˆœ์ˆ˜ Java ๊ธฐ๋ฐ˜์˜ GUI ๋„๊ตฌ์ž…๋‹ˆ๋‹ค.
    • ์žฅ์ : ๋ฐฉ๋Œ€ํ•œ ์ปค๋ฎค๋‹ˆํ‹ฐ์™€ ํ’๋ถ€ํ•œ ๋ฌธ์„œ, ์ˆ˜๋งŽ์€ ํ”Œ๋Ÿฌ๊ทธ์ธ์„ ํ†ตํ•ด HTTP, JDBC, JMS ๋“ฑ ๋‹ค์–‘ํ•œ ํ”„๋กœํ† ์ฝœ์„ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค. ์ง๊ด€์ ์ธ GUI ๋•๋ถ„์— ์ดˆ๋ณด์ž๋„ ๊ฐ„๋‹จํ•œ ํ…Œ์ŠคํŠธ ์‹œ๋‚˜๋ฆฌ์˜ค๋ฅผ ์‰ฝ๊ฒŒ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
    • ๋‹จ์ : GUI ์ž์ฒด๊ฐ€ ์ƒ๋‹นํ•œ ์‹œ์Šคํ…œ ์ž์›์„ ์†Œ๋ชจํ•˜๋ฏ€๋กœ, ๋Œ€๊ทœ๋ชจ ๋ถ€ํ•˜ ํ…Œ์ŠคํŠธ ์‹œ์—๋Š” CLI ๋ชจ๋“œ ์‚ฌ์šฉ์ด ๊ถŒ์žฅ๋ฉ๋‹ˆ๋‹ค. ํ…Œ์ŠคํŠธ ๊ณ„ํš์ด XML ํŒŒ์ผ๋กœ ์ €์žฅ๋˜์–ด ๋ฒ„์ „ ๊ด€๋ฆฌ๋‚˜ ์ฝ”๋“œ ๋ฆฌ๋ทฐ์— ๋ถˆํŽธํ•จ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ์Šค๋ ˆ๋“œ ๊ธฐ๋ฐ˜ ๋ชจ๋ธ์€ ์ตœ์‹  ๋„๊ตฌ์— ๋น„ํ•ด ๋ฉ”๋ชจ๋ฆฌ ํšจ์œจ์ด ๋–จ์–ด์งˆ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • nGrinder
    • ๋„ค์ด๋ฒ„์—์„œ The Grinder๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ๊ฐœ๋ฐœํ•œ ์˜คํ”ˆ์†Œ์Šค ๋„๊ตฌ๋กœ, ์ค‘์•™ ์›น ์ปจํŠธ๋กค๋Ÿฌ๋ฅผ ํ†ตํ•ด ์—์ด์ „ํŠธ, ์Šคํฌ๋ฆฝํŠธ, ํ…Œ์ŠคํŠธ ์‹คํ–‰์„ ํ†ตํ•ฉ ๊ด€๋ฆฌํ•˜๋Š” ๊ฒƒ์ด ํŠน์ง•์ž…๋‹ˆ๋‹ค.
    • ์žฅ์ : ์ปจํŠธ๋กค๋Ÿฌ-์—์ด์ „ํŠธ ์•„ํ‚คํ…์ฒ˜ ๋•๋ถ„์— ์†์‰ฝ๊ฒŒ ํ…Œ์ŠคํŠธ ๊ทœ๋ชจ๋ฅผ ํ™•์žฅํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์›น UI๋Š” ํ…Œ์ŠคํŠธ ๊ด€๋ฆฌ, ์Šค์ผ€์ค„๋ง, ๋ชจ๋‹ˆํ„ฐ๋ง์„ ๊ฐ„์†Œํ™”ํ•ฉ๋‹ˆ๋‹ค. ์Šคํฌ๋ฆฝํŠธ๋ฅผ Groovy(JUnit ์Šคํƒ€์ผ)๋‚˜ Jython์œผ๋กœ ์ž‘์„ฑํ•˜๋ฏ€๋กœ XML๋ณด๋‹ค ๊ฐœ๋ฐœ์ž ์นœํ™”์ ์ด๋ฉฐ, IDE์—์„œ ์‚ฌ์ „ ๋””๋ฒ„๊น…์ด ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.
    • ๋‹จ์ : JMeter์— ๋น„ํ•ด ์ปค๋ฎค๋‹ˆํ‹ฐ ๊ทœ๋ชจ๊ฐ€ ์ž‘๊ณ , ๊ตฌํ˜• ์Šค๋ ˆ๋“œ ๊ธฐ๋ฐ˜ ์—”์ง„์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.
  • Gatling
    • 'Test as Code' ์ฒ ํ•™์„ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•œ ํ˜„๋Œ€์ ์ธ ๋„๊ตฌ์ž…๋‹ˆ๋‹ค. ํ…Œ์ŠคํŠธ ์‹œ๋‚˜๋ฆฌ์˜ค๋ฅผ Scala, Java, Kotlin ๊ฐ™์€ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด๋กœ ์ž‘์„ฑํ•ฉ๋‹ˆ๋‹ค.
    • ์žฅ์ : Akka/Netty ๊ธฐ๋ฐ˜์˜ ๋น„๋™๊ธฐ ๋ฉ”์‹œ์ง€ ๊ตฌ๋™ ์•„ํ‚คํ…์ฒ˜ ๋•๋ถ„์— ์ ์€ ์ž์›์œผ๋กœ ๋งค์šฐ ๋†’์€ ๋ถ€ํ•˜๋ฅผ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ์–ด ์„ฑ๋Šฅ์ด ๋›ฐ์–ด๋‚ฉ๋‹ˆ๋‹ค. ์ฝ”๋“œ๋กœ ํ…Œ์ŠคํŠธ๋ฅผ ๊ด€๋ฆฌํ•˜๋ฏ€๋กœ Git, ์ฝ”๋“œ ๋ฆฌ๋ทฐ, CI/CD ํŒŒ์ดํ”„๋ผ์ธ๊ณผ ์™„๋ฒฝํ•˜๊ฒŒ ํ†ตํ•ฉ๋ฉ๋‹ˆ๋‹ค. ๊ธฐ๋ณธ์ ์œผ๋กœ ์ƒ์„ฑ๋˜๋Š” HTML ๋ฆฌํฌํŠธ์˜ ๊ฐ€๋…์„ฑ๊ณผ ์ •๋ณด๋Ÿ‰์ด ๋งค์šฐ ๋›ฐ์–ด๋‚ฉ๋‹ˆ๋‹ค.
    • ๋‹จ์ : ์ฝ”๋“œ ์ž‘์„ฑ์— ์ต์ˆ™ํ•ด์•ผ ํ•˜๋ฉฐ, ํŠนํžˆ Scala DSL์— ๋Œ€ํ•œ ์•ฝ๊ฐ„์˜ ํ•™์Šต ๊ณก์„ ์ด ์กด์žฌํ•ฉ๋‹ˆ๋‹ค. ๊ธฐ๋ณธ ์ง€์› ํ”„๋กœํ† ์ฝœ์˜ ์ข…๋ฅ˜๋Š” JMeter๋ณด๋‹ค ์ ์Šต๋‹ˆ๋‹ค.

๋ถ€ํ•˜ ํ…Œ์ŠคํŠธ ๋„๊ตฌ๋ณ„ ๋น„๊ต

ํŠน์ง• JMeter nGrinder Gatling
์ฃผ์š” ์‚ฌ์šฉ ๋ฐฉ์‹ GUI ๊ธฐ๋ฐ˜ (CLI ์‹คํ–‰ ๊ถŒ์žฅ) ์›น UI ๊ธฐ๋ฐ˜ ์ฝ”๋“œ ๊ธฐ๋ฐ˜ (DSL)
์Šคํฌ๋ฆฝํŠธ ์–ธ์–ด XML (GUI ์„ค์ •) Groovy, Jython Scala, Java, Kotlin
๋ฆฌ์†Œ์Šค ๋ชจ๋ธ ์Šค๋ ˆ๋“œ/์‚ฌ์šฉ์ž ์Šค๋ ˆ๋“œ/์‚ฌ์šฉ์ž ๋น„๋™๊ธฐ/๋ฉ”์‹œ์ง€ ๊ตฌ๋™
CI/CD ์นœํ™”์„ฑ ๋ณดํ†ต (XML ๊ด€๋ฆฌ ๋ถˆํŽธ) ์ข‹์Œ (์Šคํฌ๋ฆฝํŠธ ํŒŒ์ผ ๊ด€๋ฆฌ) ๋งค์šฐ ์ข‹์Œ (์ฝ”๋“œ ๊ธฐ๋ฐ˜)
๋ฆฌํฌํŒ… ํ’ˆ์งˆ ๋ณดํ†ต (ํ”Œ๋Ÿฌ๊ทธ์ธ ํ•„์š”) ์ข‹์Œ (์›น UI ํ†ตํ•ฉ) ๋งค์šฐ ์ข‹์Œ (๊ธฐ๋ณธ HTML ๋ฆฌํฌํŠธ)
์ถ”์ฒœ ๋Œ€์ƒ GUI ํ™˜๊ฒฝ ์„ ํ˜ธ, ๋‹ค์–‘ํ•œ ํ”„๋กœํ† ์ฝœ ํ…Œ์ŠคํŠธ ํ•„์š” ์‹œ ์ค‘์•™ ๊ด€๋ฆฌํ˜• ํ…Œ์ŠคํŠธ, ์‰ฌ์šด ํ™•์žฅ์„ฑ, ์ฝ”๋“œ์™€ UI์˜ ๊ท ํ˜• ํ•„์š” ์‹œ ๊ฐœ๋ฐœ์ž ์นœํ™”์  ํ™˜๊ฒฝ, CI/CD ํ†ตํ•ฉ, ๊ณ ์„ฑ๋Šฅ ๋ถ€ํ•˜ ์ƒ์„ฑ ํ•„์š” ์‹œ

 

 

 

์ฐธ๊ณ ์ž๋ฃŒ:

https://engineering-skcc.github.io/performancetest/Performance-Testing-Terminologies/

 

์„ฑ๋Šฅ ํ…Œ์ŠคํŠธ ์œ ํ˜• ์•Œ์•„๋ณด๊ธฐ

SK ์ฃผ์‹ํšŒ์‚ฌ C&C์˜ ๊ธฐ์ˆ  ๋ธ”๋กœ๊ทธ์ž…๋‹ˆ๋‹ค.

engineering-skcc.github.io

https://sre.google/sre-book/monitoring-distributed-systems/#xref_monitoring_golden-signals

 

Google SRE monitoring ditributed system - sre golden signals

Monitoring Distributed Systems Written by Rob EwaschukEdited by Betsy Beyer Google’s SRE teams have some basic principles and best practices for building successful monitoring and alerting systems. This chapter offers guidelines for what issues should in

sre.google

https://firehydrant.com/blog/4-sre-golden-signals-what-they-are-and-why-they-matter/

 

4 SRE Golden Signals (What they are and why they matter)

SRE’s Golden Signals are four key metrics used to monitor the health of your service and underlying systems. We will explain what they are, and how they can help you improve service performance.

firehydrant.com

 

728x90