Search

[TroubleShooting] DB socket timeout

Date
2025/12/15
Category
Devops
Tag
AWS
TroubleShooting
Goorm

ย ๋ฌธ์ œ ์ƒํ™ฉ

๋ถ€ํ•˜ ํ…Œ์ŠคํŠธ ์ค‘ 40์ดˆ ์ดํ›„๋ถ€ํ„ฐ ์‘๋‹ต์ง€์–ธ๊ณผ socket timeout์ด ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค. ํŠนํžˆ Ramp-up ์ข…๋ฃŒ ์‹œ์ (๋ชจ๋“  Thread ๋™์‹œ ํ™œ์„ฑ ๊ตฌ๊ฐ„)์— ์ง‘์ค‘์ ์œผ๋กœ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค.

ํ…Œ์ŠคํŠธ ๊ตฌ์„ฑ

โ€ข
๋ธ”๋ž™ ํ”„๋ผ์ด๋ฐ์ด ํŠธ๋ž˜ํ”ฝ ๊ธˆ์ฆ ์ƒํ™ฉ ๊ฐ€์ •
โ€ข
1์‹œ๊ฐ„ ๊ธฐ์ค€ Thread Pool 5000ea ๋™์‹œ ์š”์ฒญ (์ผ์ผ ํ‰๊ท  50,000 ํŠธ๋ž˜ํ”ฝ)
โ€ข
๋™์‹œ ์ ‘์†์ž์˜ ์•ฝ 2%๊ฐ€ ๋งค์ดˆ ์š”์ฒญ์„ ๋ฐœ์ƒ์‹œํ‚จ๋‹ค๊ณ  ๊ฐ€์ •
โ—ฆ
5000 * 0.02 = 100 (TPS)
โ—ฆ
100 TPS ์„ฑ๋Šฅ ์˜ˆ์ƒ
โ€ข
๋กœ๊ทธ์ธ โ†’ ์ƒํ’ˆ ์กฐํšŒ โ†’ ์ฃผ๋ฌธ ์‹œ๋‚˜๋ฆฌ์˜ค
โ€ข
์ „์ฒด ์กฐํšŒ์˜ 10%๊ฐ€ ์ฃผ๋ฌธ์œผ๋กœ ์ด์–ด์ง์„ ๊ฐ€์ •
โ—ฆ
๋กœ๊ทธ์ธ: 100 * 0.3 = 30 (TPS)
โ—ฆ
์ƒํ’ˆ ์กฐํšŒ: 100 * 0.6 = 60 (TPS)
โ—ฆ
์ฃผ๋ฌธ: 100 * 0.1 = 10 (TPS)
โ€ข
์ง€ํ”„ ๋ถ„ํฌ(Zipf Distribution)์„ ํ™œ์šฉํ•œ ํŠน์ • ์ƒํ’ˆ ์กฐํšŒ ์ง‘์ค‘ ๊ตฌํ˜„

ย RDS ์ธ์Šคํ„ฐ์Šค ํƒ€์ž…

๋‹น์‹œ RDS ์ธ์Šคํ„ด์Šค ํƒ€์ž…์€ t3.medium์ด์—ˆ์Šต๋‹ˆ๋‹ค.

ย ์ง„๋‹จ ์ˆœ์„œ

1.
โ€œDB ์ปค๋„ฅ์…˜ ํ’€โ€์„ ์›์ธ์œผ๋กœ ์ ‘๊ทผํ•˜์—ฌ
2.
SpringBoot ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ HikariCP ์„ค์ • ์ค‘ maxPoolSize์„ ์กฐ์ •ํ•ด๋ดค์ง€๋งŒ
3.
์•ฝ๊ฐ„์˜ ๋ณ€ํ™”๋งŒ ์žˆ์„ ๋ฟ ๊ทผ๋ณธ์ ์œผ๋กœ ํ•ด๊ฒฐ๋˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค.

ย ์›์ธ ๊ฐ€์ •

Socket Timeout์˜ ๋ฐœ์ƒ ์›์ธ์„ ํฌ๊ฒŒ ๋‘ ๊ฐ€์ง€๋กœ ์žก๊ณ , ์ง„ํ–‰ํ•˜์˜€์Šต๋‹ˆ๋‹ค.
1.
DB ๋ ˆ๋ฒจ ๋ณ‘๋ชฉ
2.
๋น„ํšจ์œจ์  ์ฟผ๋ฆฌ(N+1 / ์ธ๋ฑ์Šค ๋ฏธ๋น„)๋กœ ์ธํ•œ ์ฟผ๋ฆฌ ์ฒ˜๋ฆฌ ์‹œ๊ฐ„ ์ฆ๊ฐ€
ํ”„๋กœ์ ํŠธ ๋งˆ๊ฐ ๊ธฐํ•œ๊นŒ์ง€ ํ•˜๋ฃจ๋ฐ–์— ๋‚จ์ง€ ์•Š์€ ์ƒํ™ฉ์ด๋ผ ์ฝ”๋“œ ๋ ˆ๋ฒจ ๋ฆฌํŒฉํ† ๋ง์„ ๋๊นŒ์ง€ ๋ฐ€์–ด๋ถ™์ด๊ธฐ๋ณด๋‹ค๋Š”, ๋จผ์ € โ€œDB ๋ ˆ๋ฒจ ๋ณ‘๋ชฉ ์—ฌ๋ถ€โ€๋ฅผ ์ง€ํ‘œ๋กœ ๋น ๋ฅด๊ฒŒ ํŒ๋ณ„ํ•˜๋Š” ์ชฝ์„ ์„ ํƒํ–ˆ์Šต๋‹ˆ๋‹ค.

ย ์›์ธ ๋ถ„์„

ย Pool ๋ฌธ์ œ

์™œ maxPoolSize ํŠœ๋‹์ด ํšจ๊ณผ์ ์ด์ง€ ์•Š์•˜์„๊นŒ?
Pool์€ โ€œ๋™์‹œ์— ์žก์„ ์ˆ˜ ์žˆ๋Š” ์ปค๋„ฅ์…˜์˜ ์ˆ˜โ€๋ฅผ ๋Š˜๋ ค์ค„ ์ˆ˜ ์žˆ์ง€๋งŒ, DB๊ฐ€ ์ปค๋„ฅ์…˜์„ ๋ฐ˜ํ™˜ํ•˜๋Š” ์†๋„๋ฅผ ์˜ฌ๋ ค์ฃผ์ง„ ์•Š์•˜์Šต๋‹ˆ๋‹ค.
DB์˜ ์„ฑ๋Šฅ ์ €ํ•˜์˜ ํ๋ฆ„์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.
โ€ข
์ฟผ๋ฆฌ ์ฒ˜๋ฆฌ ์‹œ๊ฐ„์ด ๋Š˜์–ด๋‚จ
โ€ข
ํŠธ๋žœ์žญ์…˜ ์ ์œ  ์‹œ๊ฐ„์ด ๊ธธ์–ด์ง
โ€ข
์ปค๋„ฅ์…˜ ๋ฐ˜ํ™˜์ด ์ง€์—ฐ๋จ
โ€ข
ํ’€์˜ active๊ฐ€ ๊ณ ์ •๋˜๊ณ  ์š”์ฒญ์ด ๋Œ€๊ธฐํ•จ
โ€ข
๊ฒฐ๊ตญ timeout์œผ๋กœ ์ด์–ด์ง
๋”ฐ๋ผ์„œ Pool์„ ํ‚ค์›Œ๋„ ์กฐ๊ธˆ ์™„ํ™”๋˜๋Š” ๋“ฏํ•˜๋‹ค๊ฐ€ ๊ฒฐ๊ตญ ๋‹ค์‹œ ๋ณ‘๋ชฉ์ด ๋ฐœ์ƒํ•˜๋Š” ํ˜„์ƒ์ด ๋ฐ˜๋ณต๋˜์—ˆ์„ ๊ฒƒ์ด๋ผ๊ณ  ํŒ๋‹จํ–ˆ์Šต๋‹ˆ๋‹ค.

ย Credit ๊ณ ๊ฐˆ

โ€ข
CPUUtilization: ํŠน์ • ๊ตฌ๊ฐ„์—์„œ CPU๊ฐ€ 90~100%์— ์œ ์ง€๋˜๋Š” ํŒจํ„ด์„ ๋ณด์ž„
โ€ข
CPUCreditUsage: Credit Burst ๊ตฌ๊ฐ„์ด ๋ณด์ž„ (t๊ณ„์—ด์˜ ์ธ์Šคํ„ด์Šค ํƒ€์ž…์€ Credit์„ ์‚ฌ์šฉ)
์ด ํŒจํ„ด์€ โ€œPoolโ€๋ณด๋‹ค๋Š” DB ์ฒ˜๋ฆฌ ์„ฑ๋Šฅ ์ชฝ์— ๊ฐ€๊นŒ์› ์Šต๋‹ˆ๋‹ค.
t ๊ณ„์—ด์€ โ€œ๋ฒ„์ŠคํŠธ๋กœ ์ž ๊น ๋ฒ„ํ‹ธ ์ˆ˜๋Š” ์žˆ์ง€๋งŒโ€, ๋ถ€ํ•˜๊ฐ€ ์ง€์†๋˜๋ฉด ํฌ๋ ˆ๋”ง ์†Œ๋ชจ โ†’ ์„ฑ๋Šฅ ์ €ํ•˜๋กœ ์ด์–ด์งˆ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
๋˜ํ•œ ํฌ๋ ˆ๋”ง ๊ณ ๊ฐˆ ์‹œ์ ๊ณผ timeout ๊ตฌ๊ฐ„์ด ์ผ์น˜ํ–ˆ์Šต๋‹ˆ๋‹ค.

ย ํ•ด๊ฒฐ ๊ณผ์ •

์ž„์‹œ ์กฐ์น˜(์˜๋„์  ๊ฒ€์ฆ): RDS ์ธ์Šคํ„ด์Šค ํƒ€์ž…์„ ๊ณผํ•˜๊ฒŒ ํ–ฅ์ƒ

โ€œ์ •๋ง DB์˜ ์„ฑ๋Šฅ์ด ์›์ธ์ธ๊ฐ€?โ€๋ฅผ ํ™•์‹คํžˆ ๊ทœ๋ช…ํ•˜๊ธฐ ์œ„ํ•ด, RDS ์ธ์Šคํ„ด์Šค๋ฅผ m5g.8large๋กœ ์˜๋„์ ์œผ๋กœ ํฌ๊ฒŒ ์˜ฌ๋ ค ๊ฒ€์ฆํ–ˆ์Šต๋‹ˆ๋‹ค.
โ€œ๋„ˆ๋ฌด ํฐ ์‚ฌ์–‘ ์•„๋‹Œ๊ฐ€?โ€ ํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ํฐ ์‚ฌ์–‘์ด ์‚ฌ์‹ค์ž„์—๋„ ์ธ๊ณผ๊ด€๊ณ„๋ฅผ ํ™•์ •์‹œํ‚ค๊ธฐ ์œ„ํ•œ ๊ฒ€์ฆ์ด๋ผ๊ณ  ํŒ๋‹จํ–ˆ์Šต๋‹ˆ๋‹ค. ๊ฒ€์ฆ ์ดํ›„์—๋Š” ์‚ฌ์ด์ฆˆ๋ฅผ ์ค„์—ฌ ๊ณผ๋„ํ•œ ๋น„์šฉ์ด ๋ฐœ์ƒํ•˜์ง€ ์•Š๋„๋ก ํ–ˆ์Šต๋‹ˆ๋‹ค.

ย ๊ฒฐ๊ณผ:

Transaction per Second
โ€ข
์ƒํ’ˆ ์กฐํšŒ TPS: 120 TPS ์ „ํ›„
โ€ข
Error Rate 1% ๋ฏธ๋งŒ

ย ๊ฐœ์„ ์ 

์ธ์Šคํ„ด์Šค์˜ ์ŠคํŽ™์—…์„ ํ†ตํ•ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ–ˆ์ง€๋งŒ, ๊ทผ๋ณธ์ ์ธ ํ•ด๊ฒฐ ๋ฐฉ์•ˆ์ด๋ผ๊ณ  ์ƒ๊ฐํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋ฌผ๋ก  ์ธ์Šคํ„ด์Šค์˜ ์ŠคํŽ™์„ ํ‚ค์›Œ์•ผ ํ•˜๋Š” ์ƒํ™ฉ์ด ์žˆ๊ฒ ์ง€๋งŒ, ์ง€๊ธˆ ์ƒํ™ฉ์—์„œ ์ธ์Šคํ„ด์Šค ์ŠคํŽ™์—…์€ ์žฅ์• ๋ฅผ ๋ฉˆ์ถ”๋Š” ์‘๊ธ‰ ์กฐ์น˜์˜€์„ ๋ฟ์ผ ๊ฒƒ์ž…๋‹ˆ๋‹ค.
๋ชฉํ‘œ๋Š” ํฐ DB๋กœ ๋ฒ„ํ‹ฐ๊ธฐ๊ฐ€ ์•„๋‹ˆ๋ผ, ๋‚ฎ์€ ์ŠคํŽ™์—์„œ๋„ ์šด์˜ ๊ฐ€๋Šฅํ•œ ๊ตฌ์กฐ๋กœ ๋ฐ”๊พธ๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.
๋”ฐ๋ผ์„œ ์ •๋ฆฌํ•œ ๊ฐœ์„  ๋ฐฉํ–ฅ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค:
โ€ข
์บ์‹ฑ ์ ์šฉ์œผ๋กœ DB ์˜์กด๋„ ๊ฐ์†Œ
โ€ข
fetch join / N+1 ์ œ๊ฑฐ
โ€ข
DB Replicas ํ™•์žฅ ๋ฐ ๋ถ€ํ•˜ ๋ถ„์‚ฐ
โ€ข
CQRS ํŒจํ„ด ์ ์šฉ