404 V1 limit analysis report outline - 100-hours-a-week/KTB4-3rd-CLOUD GitHub Wiki
404 V1 ํ๊ณ ๋ถ์ ๋ณด๊ณ ์ โ ๋ฌธ์ ๊ณจ๊ฒฉ
์ด ๋ฌธ์๋ ๋ด์ฉ์ ์ฐ๊ธฐ ์ ์ ๋ชฉ์ฐจ์ ๊ฐ ์ ์ด ๋ฌด์์ ์ฆ๋ช
ํด์ผ ํ๋์ง๋ฅผ ๊ณ ์ ํ
๊ฒ์ด๋ค. ๋ถํํ
์คํธ ์ค๊ณยท์คํ์ 403์,
V1/V2 ํ๋ฆ๋๋ KTB4-๋ชจ์ฌํ-v1-v2-lock-flow.drawio์ ์๋ค.
0. ์์ฑ ๊ท์น
0.1 ๋ชจ๋ ์ฅ์ ๊ฐ์ ์ฌ์ฌ์ ๋ฐ๋ฅธ๋ค
์๋น์ค ํน์ฑ๋ง ์ฐ๊ณ ๋๋ด๋ฉด ์ ๋๋ค. ๊ฐ ์ฅ์ ์์ธ ์์ด 7๊ฐ ์์ ์ ๊ฐ์ ์์๋ก ๊ฐ์ง๋ฉฐ, ์ ์์ ์ด ๋ค ์์ ์ ๊ทผ๊ฑฐ๊ฐ ๋๋ค.
โ ์๋น์ค ๋์ (์ ์ ํ๋ก์ฐ์ ์ด๋ ๊ตฌ๊ฐ)
โ ๊ทธ๋์ ์ผ๋ง๋ ๋ค์ด์ค๋๊ฐ
โก ์์ ํธ๋ํฝ ์งํ (์ซ์)
โ ๊ทธ๋์ ์ด๋ค ์ฑ๊ฒฉ์ ๋ถํ์ธ๊ฐ
โข ๋ถํ ํน์ฑ (์์ฒญ ์ ํ ยท ๋์์ฑ ยท ์ง์์๊ฐ ยท ๋ฐ์ดํฐ ํฌ๊ธฐ)
โ ๊ทธ๋์ ์ด๋ค ์์์ ์ฐ๋๊ฐ
โฃ ์ฌ์ฉํ๋ ์ธํ๋ผ ์์ (๊ฒฝ๋ก + ์์ ์ข
๋ฅ + V1 ๋ฐฐ์ ๋)
โ ๊ทธ๋์ ๋ฌด์์ ์ฌ์ผ ํ๋๊ฐ
โค ์ธก์ ์ค๊ณ (์๋๋ฆฌ์ค ยท ๋ถํ ๋จ๊ณ ยท control/treatment)
โ ์ค์ ๋ก ๋ฌด์์ด ๋ณํ๋๊ฐ
โฅ ์ธก์ ๊ฒฐ๊ณผ (์งํ ๋ณํ ยท ์ต์ด ํฌํ ์์ ยท C_knee)
โ ๊ทธ๋์ ๋ฌด์์ ๋ฐ๊พธ๋๊ฐ
โฆ ํ์ ๊ณผ ์ธํ๋ผ ๊ตฌ์ฑ ๋ณ๊ฒฝ
โฆ์ ์ธ ์ ์๋ ์ฅ์ โค๊ฐ ์๋ชป ์ค๊ณ๋ ๊ฒ์ด๋ค. ๋ฐ๋๋ก โก์ ์ซ์ ์์ด โฅ์ ๊ฒฐ๊ณผ๋ง ์์ผ๋ฉด "์ด ์ ๋๋ฉด ์ถฉ๋ถํ๊ฐ"๋ฅผ ํ๋จํ ์ ์๋ค.
0.2 ๊ฐ ์ฅ์ ์ฒซ ์ค์ ํ ์ค ๊ฒฐ๋ก
๋ ์๊ฐ ์ฌ์ฌ์ ๋จผ์ ๋ณด๊ฒ ํ๋ค.
๊ฒฐ๋ก . ์ฑํ ์ฐ๊ฒฐ N๊ฐ์์ heap์ด X MB/์ฐ๊ฒฐ๋ก ์ฆ๊ฐํด
-Xmx512m์ Y%๋ฅผ ์ ์ ํ๊ณ , ๊ฐ์ ์ปจํ ์ด๋์ REST p95๊ฐ Z% ์ ํ๋๋ค. โ WebSocket์ ๋ณ๋ ํ๋ก์ธ์ค๋ก ๋ถ๋ฆฌํ๋ค.
0.3 ์ซ์์๋ ์ถ์ฒ๋ฅผ ๋ถ์ธ๋ค
| ์ข ๋ฅ | ํ๊ธฐ ๋ฐฉ๋ฒ |
|---|---|
| ํธ๋ํฝ ๊ฐ์ | ๋ด๋ถ ๊ฐ์ ์ธ์ง ์ธ๋ถ ๊ณต๊ฐ๊ฐ์ธ์ง ๋ช ์, ๊ณ์ฐ์ ๋ ธ์ถ |
| ๋ถํํ ์คํธ ์ค์ธก | RUN_ID + ์ธก์ ์ฐฝ ๊ธธ์ด + ๋ฐ๋ณต ํ์ |
| ์ธํ๋ผ ์งํ | ์งํ ์ด๋ฆ(PromQL) + Grafana ํจ๋ ์ด๋ฆ |
| ํ์๊ฐ | ๊ณ์ฐ์ (403 ยง2.2) |
๋จ์ผ ์ธก์ (๋ฐ๋ณต ์์)์ ๊ทธ ์ฌ์ค์ ํ์ ๋จ๊ธฐ๊ณ , ์ง์ฐ ์ฐจ์ด๋ 30% ์ด์์ผ ๋๋ง ์ค์ฌ๋ก ์ธ์ ํ๋ค. CPU credit ์๋ชจ ๊ตฌ๊ฐ์ ์ ํ๋ ์ฉ๋ ํ๊ณ๋ก ์ฐ์ง ์๋๋ค.
1. ์๋น์ค ๊ฐ์์ ์ ์ ํ๋ก์ฐ
๋ชฉ์ : ์ดํ ๋ชจ๋ ์ฅ์ โ ์ด ์ฐธ์กฐํ ๊ตฌ๊ฐ ์ด๋ฆ์ ํ์ ํ๋ค.
- 1.1 ์๋น์ค ์ ์ โ ํ๊ต ์ถํด๊ทผ ๋งค์นญยท์ฑํ ยท์ ์ฐยท๊ฒ์๊ธ
- 1.2 ์ ์ ํ๋ก์ฐ (๋
ธ์
์ ์ ํ๋ก์ฐ ๋ค์ด์ด๊ทธ๋จ ์ฝ์
)
- ๊ฐ ๊ตฌ๊ฐ์ ์ด ๋ฌธ์์์ ์ธ ์ด๋ฆ์ ๋ถ์ธ๋ค:
ํ์ยท์กฐํ/ํ ์์ธ/์ฐธ์ฌ ์์ฒญ/์ข์ ์น์ธ/์ฑํ ์ฐ๊ฒฐ/์ฑํ ๋ฉ์์ง/์ ์ฐ/ํผ์ก๋ ์กฐํ
- ๊ฐ ๊ตฌ๊ฐ์ ์ด ๋ฌธ์์์ ์ธ ์ด๋ฆ์ ๋ถ์ธ๋ค:
- 1.3 ๊ตฌ๊ฐ๋ณ ๊ธฐ๋ฅ ์๊ตฌ์ ์ค์๊ฐ์ฑ ์๊ตฌ
- ์ด๋ ๊ตฌ๊ฐ์ด ๋๊ธฐ ์๋ต์ด์ด์ผ ํ๋์ง, ์ด๋ ๊ตฌ๊ฐ์ด ์ง์ฐ์ ํ์ฉํ๋์ง. ์ด ํ๋จ์ด 7์ฅยท8์ฅ์ "๋น๋๊ธฐํ ๊ฐ๋ฅ ์ฌ๋ถ" ๊ทผ๊ฑฐ๊ฐ ๋๋ค.
- 1.4 V1 ์ํคํ
์ฒ (drawio: AWS ์๋น์ค ๋ฐฐ์น)
- ๋จ์ผ AZ ยท Public Subnet ยท Prod/Dev EC2 2๋ ยท ์ปจํ ์ด๋ 4๊ฐ
โ ์ ์ธ ๋ฌธ์ฅ ํํ: "์ฌ์ฉ์๊ฐ
์ฑํ ์ฐ๊ฒฐ๊ตฌ๊ฐ์ ์ง์ ํ๋ฉด ํด๋ผ์ด์ธํธ๊ฐ Nginx๋ฅผ ๊ฑฐ์ณ Spring Boot์ WebSocket ํธ๋์ ฐ์ดํฌ๋ฅผ ๋ณด๋ด๊ณ , ๋งค์นญ ์ฑ์ฌ๊น์ง ์ฐ๊ฒฐ์ ์ ์งํ๋ค."
2. ์์ ํธ๋ํฝ ์งํ
๋ชฉ์ : ์ดํ ๋ชจ๋ ์ฅ์ โก๊ฐ ์ฐธ์กฐํ ๊ธฐ์ค ์ซ์๋ฅผ ํ๊ณณ์ ๋๋ค.
- 2.1 V1 ๊ท๋ชจ ๊ฐ์ โ DAU 1,500 / ํผํฌ ์กฐํ 1.25 RPS / ์ฐ๊ธฐ 0.27 RPS
- 2.2 V2 ์ฑ์ฅ ๊ฐ์ โ ์๋๊ถ ์ ๋ฌด์ง๊ตฌ 6๊ฐ ๊ฑฐ์ / MAU 115๋ง / DAU 3.6๋ง
- 2.3 DAU โ RPS ํ์ฐ์๊ณผ ๊ทผ๊ฑฐ (402 ยง2 ์ฌ์ฌ์ฉ, ์ธ๋ถ ๊ณต๊ฐ๊ฐ๊ณผ ๋ด๋ถ ๊ฐ์ ๋ถ๋ฆฌ)
- 2.4 ๊ตฌ๊ฐ๋ณ ํธ๋ํฝ ๋ถํดํ โ ๊ฐ ์ฅ์ โก๊ฐ ์ด ํ์ ํ ํ์ ๊ฐ์ ธ๊ฐ๋ค
| ๊ตฌ๊ฐ | ํผํฌ RPS ๋๋ ๋์์ฑ | ์ฐ์ถ ๊ทผ๊ฑฐ | ๊ด๋ จ ์ฅ |
|---|---|---|---|
| ํ์ยท์กฐํ | 14.0 RPS | ์ธ์ ๋น 4๊ฑด ร ํผํฌ ์ธ์ ๋ฅ | 9์ฅ |
| ํ ์์ธ | 14.0 RPS | ์ธ์ ๋น 4๊ฑด | 9์ฅ |
| ํผ์ก๋ ์กฐํ | 10.5 RPS | ์ธ์ ๋น 3๊ฑด | (๋ฒ์ ๋ฐ) |
| ์ฐธ์ฌยท์น์ธ ์ฐ๊ธฐ | 3.5 RPS, ์ธ๊ธฐํ ๋์ N๊ฑด | ์ธ์ ๋น 1๊ฑด + ์ธ๊ธฐํ ์ง์ค | 7์ฅ |
| ์ฑํ ์ฐ๊ฒฐ | ๋์ 1,800 (1,575~2,100) | ์ด๋ฒคํธ ์ฌ์ฉ์ 50% ์ ์ | 3ยท4ยท8์ฅ |
| ์ฑํ ๋ฉ์์ง | 36 msg/s (inbound) | ์ ์์ 10๋ถ๊ฐ 6๊ฑด | 5ยท6์ฅ |
| ํ์ฌ ์ข ๋ฃ burst | 180 RPS | ์ผ๊ฐํ ๋ถํ, 10๋ถ | (๋ฒ์ ๋ฐ) |
- 2.5 ์ด๋ฒ ์ธก์ ์์ ๋ค๋ฃจ์ง ์์ ๊ตฌ๊ฐ๊ณผ ์ด์ (ํผ์ก๋ ์ธ๋ถ API, burst)
3. ์ฑํ ์ฐ๊ฒฐ ์ ์ง โ ์ฐ๊ฒฐ ์๊ฐ Spring ์์์ ์ ์ ํ๋๊ฐ
- 3.1 ์๋น์ค ๋์ โ
์ฑํ ์ฐ๊ฒฐ๊ตฌ๊ฐ, ๋งค์นญ ์ฑ์ฌ๊น์ง ์ฐ๊ฒฐ ์ ์ง, 1์๊ฐ ๋ฌดํ๋ ์ ์ข ๋ฃ - 3.2 ์์ ํธ๋ํฝ โ ๋์ 1,800 ์ฐ๊ฒฐ (ํ์ ๋ฒ์ 3,000)
- 3.3 ๋ถํ ํน์ฑ โ ์ฅ์๊ฐ ์ ์ง๋๋ ์ํ ๋ณด์ ํ ๋ถํ. ์์ฒญ๋์ด ์๋๋ผ ์ธ์ ์๊ฐ ์์์ ์ ์ ํ๋ค. ๋ฉ์์ง๊ฐ ์์ด๋ ๋น์ฉ์ด 0์ด ์๋๋ค.
- 3.4 ์ฌ์ฉํ๋ ์ธํ๋ผ ์์
ํด๋ผ์ด์ธํธ โ Nginx(0.25 CPU/128MB, FD 2๊ฐ/์ฐ๊ฒฐ) โ Spring Boot(0.75 CPU/768MB, -Xmx512m, Tomcat max-connections 8192, FD 16384) ์์: JVM heap(์ธ์ ๊ฐ์ฒด) ยท direct buffer(NIO) ยท FD ยท Tomcat ์ปค๋ฅ์ ์ฌ๋กฏ - 3.5 ์ธก์ ์ค๊ณ โ
ws-connect.js, 0โ3,000 ์ ํ ๋จํ. ๋จํ๋ฅผ ๋ ๋ฆฝ๋ณ์๋ก ์จ์lab_ws_connections๋๋น ์์์ ํ๊ทํ๋ค. REST ์์(์์ ๋จ๊ฐ).RUN_ID=a-ramp3000 - 3.6 ์ธก์ ๊ฒฐ๊ณผ
์งํ ์ถ์ฒ ๊ฐ ์ฐ๊ฒฐ๋น heap collect-window.py๋จํ ํ๊ทheap_bytes_per_conn์ฐ๊ฒฐ๋น direct ๋ direct_bytes_per_conn1,000 ์ฐ๊ฒฐ๋น CPU ๋ cpu_cores_per_1k_conn์ฐ๊ฒฐ 3,000์์ working set backend_ws_mb(ํ๊ณ 768MB)์์ฉ ๊ฐ๋ฅ ์ฐ๊ฒฐ ์ํ (512MBร0.7 โ ๊ธฐ์ heap) รท ์ฐ๊ฒฐ๋น heap - ๊ทธ๋ํ:
JVM heap used,Container working-set memory,Container CPU cores
- ๊ทธ๋ํ:
- 3.7 ํ์ ๊ณผ ๋ณ๊ฒฝ โ ์ํ์ด ์์ธก ํผํฌ 2,100์ ๋ฐ๋๋ฉด ์ฐ๊ฒฐ ์ ์์ฒด๊ฐ V1 ํ๊ณ. ์ ํ์ง: WS ํ๋ก์ธ์ค ๋ถ๋ฆฌ / backend ๋ฉ๋ชจ๋ฆฌ ์ฆ์ค / ์ธ์ ์ํ ์ถ์. ์ฌ๊ฒ์ฆ ๋ฐฉ๋ฒ๋ ํจ๊ป ์ ๋๋ค.
4. ์ฑํ ๋ฐฉ ์ง์ ํญ์ฃผ โ ์ฐ๊ฒฐ ์๋์จ์ด ์ง์ ๊ณ์ธต์ ํฌํ์ํค๋๊ฐ
- 4.1 ์๋น์ค ๋์ โ ๋งค์นญ ์ฑ์ฌยทํ์ฌ ์ข ๋ฃ ์งํ ๋ค์๊ฐ ๋์์ ์ฑํ ๋ฐฉ ์ง์
- 4.2 ์์ ํธ๋ํฝ โ 6 conn/s (peak 7), ํ์ 20ยท50ยท100ยท200 conn/s
- 4.3 ๋ถํ ํน์ฑ โ ์งง๊ณ ๋น์ผ ์๊ฐ ๋ถํ. ์ฐ๊ฒฐ ์๋ฆฝ๋ง๋ค TLS ํธ๋์ ฐ์ดํฌ๊ฐ ๋ฐ์ํ๋ค
- 4.4 ์ธํ๋ผ ์์ โ Nginx 0.25 CPU ยท
worker_processes 1ยท accept queue ยท listen backlog. ์ด ๊ณ์ธต์ด Spring๋ณด๋ค ๋จผ์ ํฌํ๋ ์ ์๋ค - 4.5 ์ธก์ ์ค๊ณ โ ์ฐ๊ฒฐ 1,000 ๊ณ ์ ,
CONNECT_RATE20/100/200. ์ธก์ ์ฐฝ์ ramp ๊ตฌ๊ฐ.RUN_ID=b-rate20|100|200 - 4.6 ๊ฒฐ๊ณผ โ handshake(
ws_connecting) p95/p99, 101 ์ฑ๊ณต๋ฅ ,nginx_cpu_cores, Nginx active/reading/writing/waiting, listen overflow - 4.7 ํ์ โ Nginx CPU๊ฐ ๋จผ์ quota๋ฅผ ์ฑ์ฐ๋ฉด ํ๊ณ๋ ์ง์ ๊ณ์ธต์ด๋ค. ๋ณ๊ฒฝ: Nginx CPUยทworker ์ฌ๋ฐฐ๋ถ / TLS ์ข ๋ฃ ์์น ๋ณ๊ฒฝ / ALB ๋์ ๊ฒํ
5. ์ฑํ ๋ฉ์์ง ์ ํ โ ๋ฌด์์ด CPU์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ๋ ๋จน๋๊ฐ
- 5.1 ์๋น์ค ๋์ โ
์ฑํ ๋ฉ์์ง๊ตฌ๊ฐ. ๊ธด ์๋ดยท์ ์ฐ ๋ด์ญ๊ณผ ์งง์ ๋ํ๊ฐ ์์ธ๋ค - 5.2 ์์ ํธ๋ํฝ โ 36 msg/s (ํ์ 120), 4์ธ ํ
- 5.3 ๋ถํ ํน์ฑ โ ๋ ์ถ์ด ์์ธ ๋ถํ. ๋ฉ์์ง ๊ฑด์์ payload ๋ฐ์ดํธ๊ฐ ๊ฐ๊ฐ ๋ค๋ฅธ ๋น์ฉ์ ๋ง๋ ๋ค. ๋์ ๋ถ๋ฆฌํ์ง ์์ผ๋ฉด ์์ธ์ ๋ชป ์ฐพ๋๋ค
- 5.4 ์ธํ๋ผ ์์ โ Spring ์ค๋ ๋ยทํ๋ ์ ์ฒ๋ฆฌยท์ญ์ง๋ ฌํ(๊ฑด์) / ๋ฒํผยท์ง๋ ฌํยท๋คํธ์ํฌ(๋ฐ์ดํธ) / heap allocation rate์ GC
- 5.5 ์ธก์ ์ค๊ณ โ 2ร2 ์์ธ ์ค๊ณ, 120 msg/s ๊ณ ์ , echo ๊ฒฝ๋ก(์ ์ฅ ์์)
์ ์ฐ๊ฒฐ payload RUN_ID ๊ธฐ์ค 200 256 B c1-200c-256bํฐ ์ปจํ ์คํธยท์ ์ ์ฐ๊ฒฐ 200 8,000 B c2-200c-8000b์งง์ ๋ฉ์์งยท๋ง์ ์ฐ๊ฒฐ 1,800 256 B c3-1800c-256b๊ต์ฐจ 1,800 8,000 B c4-1800c-8000b - 5.6 ๊ฒฐ๊ณผ โ ํ๊ท
CPU โ a + bยทR + cยท(RรS)๋ก ๋ฉ์์ง๋น CPU-ms์ KB๋น CPU-ms๋ฅผ ๋ถ๋ฆฌ. GC pauseยทallocation rate ๋น๊ต. ๋ฐ๋ณต์g-c3-repeat - 5.7 ํ์ โ
b์ง๋ฐฐ โ ๋ฐฐ์นญยทACK ๊ฒฝ๋ํ /c์ง๋ฐฐ โ payload ์ํยท์์ถยท๋ณธ๋ฌธ ๋ถ๋ฆฌ
6. ์ฑํ ๋ฉ์์ง ์์ํ โ ๋น๋๊ธฐยท์บ์๊ฐ ํ์ํ๊ฐ
- 6.1 ์๋น์ค ๋์ โ ๋ฉ์์ง ์ ์ฅ ํ ์ ๋ฌ(ํ์ฌ๋ ์ปค๋ฐ ํ ACK)
- 6.2 ์์ ํธ๋ํฝ โ 36 msg/s (ํ์ 120)
- 6.3 ๋ถํ ํน์ฑ โ ์๋ต ๊ฒฝ๋ก๊ฐ DB ํธ๋์ญ์ ์ ๋ฌถ์ธ ๋ถํ. ์ปค๋ฅ์ ์ ์ ์๊ฐ์ด ๊ณง ์ฒ๋ฆฌ๋ ์ํ์ ๋ง๋ ๋ค
- 6.4 ์ธํ๋ผ ์์ โ HikariCP 10๊ฐ(์ฐ๊ฒฐ ํ๋ ํ์์์ 1s) ยท MySQL 0.5 CPU ยท redoยทfsync ยท EBS. ์ด ํ์ REST ์กฐํยท์น์ธ๊ณผ ๊ณต์ ํ๋ค
- 6.5 ์ธก์ ์ค๊ณ โ ์ ์ฅ ์์(5์ฅ
c3) โ ์ ์ฅ(d1-save-h50) โ ์ ์ฅ+REST(d2-*, controld0-rest-control).chat_hold_ms๋ก ์ ์ ์๊ฐ ์กฐ์ - 6.6 ๊ฒฐ๊ณผ โ
chat_commit_p95_ms,hikari_pending_max,hikari_acquire_p95_ms,chat_errors, ๋ณํ REST p95ยท5xx. ์์ธก(10 รท ์ ์ ์๊ฐ)๊ณผ ์ค์ธก ๋น๊ตํ - 6.7 ํ์ โ ํ ๋๊ธฐ ์ง๋ฐฐ โ ์ ์ฅ ๋น๋๊ธฐํ(ํ+๋ฐฐ์น insert) / MySQL I/O ์ง๋ฐฐ โ ๋ฐฐ์น ์ปค๋ฐยทDB ๋ถ๋ฆฌ / ์กฐํ ์ ํ โ ์บ์ยท์ฝ๊ธฐ ํ ๋ถ๋ฆฌ
7. ์ธ๊ธฐ ํ ์ข์ ์น์ธ ๊ฒฝํฉ โ ์ฌ์ฉ์ ์ฆ๊ฐ๊ฐ ๋ค๋ฅธ API๋ฅผ ๋ฌด๋๋จ๋ฆฌ๋๊ฐ
drawio์ "V2 ํธ๋ํฝ ์๋๋ฆฌ์ค โ ์ธ๊ธฐํ ์ข์ Lock ๊ฒฝํฉ" ๊ฒฝ๋ก๋ฅผ ๊ทธ๋๋ก ๊ฒ์ฆํ๋ ์ฅ.
- 7.1 ์๋น์ค ๋์ โ
์ข์ ์น์ธ๊ตฌ๊ฐ. ๋์ผpod_id์ ์์ฒญ์ด ์ง์ค๋๋ค - 7.2 ์์ ํธ๋ํฝ โ ์ฐ๊ธฐ 3.5 RPS์ด์ง๋ง ์ธ๊ธฐํ์ ๊ฐ์ ํ์ ๋์ N๊ฑด
- 7.3 ๋ถํ ํน์ฑ โ ์ง๋ ฌํ๋๋ ๊ฒฝํฉ ๋ถํ. RPS๊ฐ ์๋๋ผ ๋์ ๋์ฐฉ ์๊ฐ ๋ณ์. ๋๊ธฐ ์ค์๋ ์ปค๋ฅ์ ์ ์ ์ ํ๋ค
- 7.4 ์ธํ๋ผ ์์ โ
SELECT ... FOR UPDATErow lock ยทinnodb_lock_wait_timeout 3sยท ๊ณต์ฉ Hikari 10 ยท Spring ์ค๋ ๋ - 7.5 ์ธก์ ์ค๊ณ โ
hot-row.js๋์ผ ํ ๋์์ฑ 5/20/50/100(e-same-c*), ๋ถ์ฐ ํ ๋์กฐ๊ตฐ(e-dist-c50), REST ๋ณํ(e-mix-*), controle0-rest-control - 7.6 ๊ฒฐ๊ณผ โ ๋ ์คํจ ๋ชจ๋๋ฅผ ๋ถ๋ฆฌํด์ ์ ์
์ ํฉ์ฑ:ํ timeout : ๋์์ฑ > 10 โ ํ๋ 1s ์ด๊ณผ โ 503 ์ฆ๊ฑฐ hikari_pending_max, hikari_acquire_p95_ms โ 1000ms lock wait : ๋์์ฑ ร lock_hold > 3s โ 503 ์ฆ๊ฑฐ innodb_row_lock_current_waits, seat_lock_p95_ms โ 3000msapproved + remaining == capacity, ์์ ์ข์ยท์ค๋ณต ์น์ธ 0๊ฑด - 7.7 ํ์ โ ๋์ผ ํ๋ง ์ ํ๋๊ณ ๋ถ์ฐ์ ํํ โ hot-row ๊ตฌ์กฐ ๋ณ๊ฒฝ (Redis ์์ ์นด์ดํฐยท๋ฉฑ๋ฑํคยท๋๊ธฐ์ด). ๋ณํ REST๊น์ง ์ ํ โ ํ ๋ถ๋ฆฌยทํ์์์ ์กฐ์
8. ์ค์๊ฐ ์ฐ๊ฒฐ์ด ์ผ๋ฐ API์ ์ฃผ๋ ๊ฐ์ญ โ REST์ WS๋ฅผ ๋ถ๋ฆฌํด์ผ ํ๋๊ฐ
V2 ์ค๊ณ์ ํต์ฌ ๊ฒฐ์ ์ด ๊ฑธ๋ฆฐ ์ฅ.
- 8.1 ์๋น์ค ๋์ โ ์ฑํ ์ฐ๊ฒฐ์ ์ ์งํ ์ฌ์ฉ์๊ฐ ๋์์ ์กฐํยท์์ธ๋ฅผ ํธ์ถ
- 8.2 ์์ ํธ๋ํฝ โ WS 1,800~2,100 ์ ์ง + REST 50 RPS
- 8.3 ๋ถํ ํน์ฑ โ ์์ ๊ณต์ ํ ๊ฐ์ญ. ๋ ๋ถํ๊ฐ ๊ฐ์ ์ปจํ ์ด๋์ ์๋ค
- 8.4 ์ธํ๋ผ ์์ โ ๊ฐ์ 0.75 CPU ยท ๊ฐ์ 512MB heap ยท ๊ฐ์ Tomcat ์ค๋ ๋ ยท ๊ฐ์ Hikari 10. frontendยทmysql์ ๋ณ๋ quota์ด๋ฏ๋ก ํจ๊ป ์ ํ๋๋ฉด ์์ธ์ด ๋ค๋ฅด๋ค
- 8.5 ์ธก์ ์ค๊ณ โ control(
f1c-rest-control) โ WS 2,100 ์ ์ง + ๋์ผ REST(f1c-rest-treatment). ๋ ์คํ์ ์ฐ์ ๋ฐฐ์นํด credit ์กฐ๊ฑด์ ๋ง์ถค - 8.6 ๊ฒฐ๊ณผ
ํญ๋ชฉ control treatment ๋ณํ์จ REST p95 / p99 / ์ค๋ฅ์จ backend CPU ยท throttling heap ยท GC pause ยท Tomcat busy frontend ยท mysql CPU (๊ฒฉ๋ฆฌ ํ์ธ) CPU credit balance (ํธํฅ ํ์ธ) - 8.7 ํ์ โ p95 20% ์ด์ ์ ํ + backend ์์ ์๊ด โ WS ๋ถ๋ฆฌ. frontendยทmysql ๋๋ฐ ์ ํ โ ํธ์คํธ CPUยทcredit ๋ฌธ์ ๋ก ์ฌํด์
9. ์ผ๋ฐ ์กฐํ ํธ๋ํฝ ์ฆ๊ฐ โ t3.medium ์ปจํ ์ด๋๋ ์ด๋์ ๊บพ์ด๋๊ฐ
- 9.1 ์๋น์ค ๋์ โ
ํ์ยท์กฐํ,ํ ์์ธ - 9.2 ์์ ํธ๋ํฝ โ ์กฐํ 14 RPS + ์์ธ 14 RPS, ํผํฉ ํผํฌ 45.5 RPS
- 9.3 ๋ถํ ํน์ฑ โ ์ ์ ์ํ์ ์ฒ๋ฆฌ๋ ๋ถํ. ์์ฒญ๋น ๋น์ฉ์ด ๊ณง ์ฉ๋์ ์ ํ๋ค
- 9.4 ์ธํ๋ผ ์์ โ DB ๋ฏธ์ฌ์ฉ ๊ฒฝ๋ก(Spring CPUยทTomcat) vs DB ์ฌ์ฉ ๊ฒฝ๋ก(+HikariยทMySQL)
- 9.5 ์ธก์ ์ค๊ณ โ
light50โ700,detail50โ300, ๊ฐ 90์ด ๋จ๊ณ, WS ์์.RUN_ID=f-light-*,f-detail-* - 9.6 ๊ฒฐ๊ณผ โ RPSโp95 ๊ณก์ , ์์ฒญ๋น CPU-ms,
quota ์ด๋ก ์ํ = 750 รท ์์ฒญ๋น CPU-ms, throttling ์์ RPS,C_knee/C_safe, credit balance ์ถ์ด - 9.7 ํ์ โ ๋ชฉํ ํผํฌ ๋๋น ์ฌ์ ์จ.
light๋ง ํํํ๊ณdetail์ด ๊บพ์ด๋ฉด ํ๊ณ๋ DB ๊ฒฝ๋ก. ๋ณ๊ฒฝ: ์ธ์คํด์ค ์ํฅ / quota ์ฌ๋ฐฐ๋ถ / ์ฟผ๋ฆฌยท์ธ๋ฑ์คยท์บ์
10. V1 ํ๊ณ ์ข ํฉ
- 10.1 ์ต์ด ํฌํ ์์ ์์ํ โ ์ด๋ ๋ถํ๊ฐ ์ด๋ ์์์ ๊ฐ์ฅ ๋จผ์ ํฌํ์์ผฐ๋๊ฐ | ์์ | ๋ถํ ํน์ฑ | ์ต์ด ํฌํ ์์ | C_knee | ๋ชฉํ ํผํฌ ๋๋น ์ฌ์ | ๊ทผ๊ฑฐ RUN_ID |
- 10.2 ์ฅ์ ์ ํ ์ง๋ โ drawio ๊ฒฝ๋ก์ ์ค์ธก๊ฐ์ ์น์ ๊ทธ๋ฆผ (์ด๋ ์งํ๊ฐ ๋ช์์ ๋ค๋ฅธ ๊ธฐ๋ฅ์ ๋ฌด๋๋จ๋ ธ๋๊ฐ)
- 10.3 V1์ด ๊ฐ๋น ๊ฐ๋ฅํ ๊ท๋ชจ ์ฌ์ฐ์ โ DAUยท๋์ ์ฐ๊ฒฐยทRPS ๊ธฐ์ค์ผ๋ก
11. V2 ์ธํ๋ผ ๊ตฌ์ฑ ๋ณ๊ฒฝ ๊ฒฐ์
- 11.1 ๊ฒฐ์ ํ โ ์ฆ๊ฑฐ โ ๋ณ๊ฒฝ โ ๊ธฐ๋ํจ๊ณผ โ ๊ฒ์ฆ ๋ฐฉ๋ฒ | ๊ด์ธก ์ฆ๊ฑฐ(์ฅยท์งํ) | ๊ตฌ์ฑ ๋ณ๊ฒฝ | ๊ธฐ๋ํจ๊ณผ | ์ฌ๊ฒ์ฆ ์๋๋ฆฌ์ค |
- 11.2 ๋ณ๊ฒฝ์ ์์ธ โ ๊ฐ ํญ๋ชฉ๋ง๋ค ๋์๊ณผ ํ๋ฝ ์ด์ ๊น์ง (RESTยทWS ๋ถ๋ฆฌ / ๋ฉ์์ง ๋ธ๋ก์ปค / ์ ์ฅ ๋น๋๊ธฐํ / hot-row ๊ตฌ์กฐ / DB ๋ถ๋ฆฌยทRDS / scale-outยทLB / ์ธ์คํด์ค ํ์ )
- 11.3 ์ ์ฉ ์์์ ๊ธฐ์ค โ ํ ๋ฒ์ ํ๋๋ง ์ ์ฉํ๊ณ ๋์ผ ์๋๋ฆฌ์ค๋ก ์ฌ์ธก์
- 11.4 V2 ๋ชฉํ SLO์ ์์ฉ ๊ธฐ์ค
12. ์ธก์ ์ ํ๊ณ
๊ฒฐ๋ก ์ ์ ๋ขฐ ๋ฒ์๋ฅผ ์ค์ค๋ก ๋ฐํ๋ ์ฅ. ์ด๊ฑธ ๋นผ๋ฉด ์์ ์ซ์๊ฐ ๊ณผ๋ํ๊ฐ๋๋ค.
- 12.1 ํฝ์ค์ฒ์ ์ค์ ์๋น์ค์ ์ฐจ์ด โ fan-outยท๋ฐฉ ๊ฐ๋
์์, ์ธ์ฆ ์์,
์ฟผ๋ฆฌ ๋ณต์ก๋ ์ฐจ์ด, ํฉ์ฑ ์ง์ฐ(
chat_hold_msยทlock_hold_ms) - 12.2 ์ธก์ ์ฐฝ๊ณผ ๋ฐ๋ณต โ ๋จ์ผ ์ธก์ , 90~150์ด ์ฐฝ, 30๋ถ idle hold ์์, soak ์์
- 12.3 CPU credit โ ์ธก์ ๊ตฌ๊ฐ๋ณ credit ์ํ์ ๋ณด์ ๋ฐฉ๋ฒ
- 12.4 ๋ถํ ๋ฐ์๊ธฐ ํ๊ณ โ ๋ก์ปฌ 1๋, ๋ชฉํ ์ ๋ฌ๋ฅ ยทdropped iterations
- 12.5 ๋ค์ ์ฐฝ์์ ์ธก์ ํ ํญ๋ชฉ โ ํ ํฌ๊ธฐ ๋์กฐ(10โ20),
WS_PER_CONNECTION_BYTES, ํผ์ก๋ ์ธ๋ถ API, ํ์ฌ burst, ์ฅ์ ยท๋ณต๊ตฌ(RTO/RPO)
๋ถ๋ก
- A. ์คํ ๋ช
๋ น๊ณผ
RUN_ID๋ชฉ๋ก (403 ยง13.3) - B. ์งํ ์ ์์ PromQL (403 ยง2.1)
- C. ํ์๊ฐ ๊ณ์ฐ์ (403 ยง2.2)
- D. ์์ ๊ฒฐ๊ณผ ์์น โ
loadtest-scenarios/results/,runs.tsv,derived-*.csv, Grafana ๊ตฌ๊ฐ ๋งํฌ, TSDB ๋ณด๊ด ์์น - E. ํ
์คํธ ํ๊ฒฝ ๊ณ ์ ๊ฐ โ
target.env, ์ด๋ฏธ์ง digest, ์ปจํ ์ด๋ ์์ ์์ฐ, ํฝ์ค์ฒ run ์ค์
์ด ๊ณจ๊ฒฉ์ ์ฑ์ฐ๋ ์์
- 1ยท2์ฅ์ ๋จผ์ ํ์ ํ๋ค. ์ฌ๊ธฐ์ ์ ํ ๊ตฌ๊ฐ ์ด๋ฆ๊ณผ ์ซ์๋ฅผ 3~9์ฅ์ด ๊ณ์ ์ฐธ์กฐํ๋ค.
- 3~9์ฅ์ โคโฅ์ ๋จผ์ ์ฑ์ด๋ค(์ธก์ ๋ฐ์ดํฐ๊ฐ ์ด๋ฏธ ์์ผ๋ฏ๋ก). ๊ทธ๋ค์ โ โกโขโฃ๋ฅผ ์ญ๋ฐฉํฅ์ผ๋ก ๊ฒ์ฐํ๋ฉด "์ธก์ ํ์ง ์์ ์์์ ๊ทผ๊ฑฐ๋ก ์ด ์ฅ"์ด ๋๋ฌ๋๋ค.
- โฆ์ 10ยท11์ฅ์ ์ฐ๋ฉด์ ํ์ ํ๋ค. ์ฅ๋ณ โฆ์ด ์๋ก ์ถฉ๋ํ๋ฉด 11.3์ ์ ์ฉ ์์๋ก ํด์ํ๋ค.
- 12์ฅ์ ๋ง์ง๋ง์ด ์๋๋ผ 3~9์ฅ์ ์ฐ๋ ๋์ค์ ํจ๊ป ์ฑ์ด๋ค. ๊ทธ ์ฅ์์ ๋ชป ๋ณธ ๊ฒ์ ๊ทธ๋ ์ ์ด์ผ ๋น ์ง์ง ์๋๋ค.