Web Programming

95% ์‹คํŒจ์œจ ๊ฐ์†Œ๋ฅผ ์ด๋ˆ Timeout·Retry·Fallback ์‹คํŒจ ์ฒ˜๋ฆฌ ์ฒด๊ณ„์™€ ๋ฉ”์„œ๋“œ ๋ฐ์ฝ”๋ ˆ์ดํ„ฐ๋ฅผ ํ™œ์šฉํ•œ Global Exception Handling

ํ”„๋กœ๊ทธ๋ž˜๋จธ ์˜ค์›” 2026. 1. 17.

 

์™ธ๋ถ€ Open API์™€ ํ†ต์‹ ํ•˜๋Š” ์„œ๋น„์Šค์—์„œ “์‹คํŒจ”๋Š” ํ”ผํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ๋ฌธ์ œ๋Š” ์‹คํŒจ๊ฐ€ ๋ฐœ์ƒํ–ˆ์„ ๋•Œ, ์‹œ์Šคํ…œ์ด ๊ทธ ์‹คํŒจ๋ฅผ ์–ด๋–ป๊ฒŒ ๋‹ค๋ฃจ๋А๋ƒ์ž…๋‹ˆ๋‹ค.

ํ† ์Šค Runner's High ์ฒซ๋ฒˆ์งธ ์„ธ์…˜์ด ๋“ฃ๊ณ  ๊ทธ ๋‹ค์Œ๋‚  12์›” 17์ผ, ์˜คํ”ˆ๋งˆ์ผ“ ์™ธ๋ถ€ ์ˆ˜์ง‘์ฒ˜์ธ SSG์— ์žฅ์• ๊ฐ€ ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค. SSG ์™€ ๊ด€๋ จ๋œ ๋ชจ๋“  ์‚ฌ๋‚ด ๊ธฐ๋Šฅ์ด ๋งˆ๋น„ ๋๊ณ , ์—๋Ÿฌ ๋กœ๊ทธ๋Š” ๋ฌด์ˆ˜ํžˆ ์Œ“์—ฌ ํŒ€ ์—๋Ÿฌ ๋ฉ”์‹ ์ € ๋ฐฉ์— ์•Œ๋Ÿฟ์ด ์™”์Šต๋‹ˆ๋‹ค.

 

2025.12.17 SSG Open API ๋ฆฌ์†Œ์Šค ์„œ๋ฒ„ ์žฅ์•  ๋ฐœ์ƒ

 

 

์žฅ์•  ์ž์ฒด๋Š” ์™ธ๋ถ€ ์‚ฌ์ •์ด์—ˆ์ง€๋งŒ, ๋ฌธ์ œ๋Š” “์™ธ๋ถ€ ์žฅ์• ” ๊ทธ ์ž์ฒด๊ฐ€ ์•„๋‹ˆ๋ผ, ์žฅ์•  ์ƒํ™ฉ์—์„œ ์šฐ๋ฆฌ ์‹œ์Šคํ…œ์ด ์‹คํŒจ๋ฅผ ๋‹ค๋ฃจ๋Š” ๋ฐฉ์‹์ด์—ˆ์Šต๋‹ˆ๋‹ค.

 


์ด๋ฒˆ ๊ธ€์€ ๊ทธ๋•Œ์˜ ์žฅ์• ๋ฅผ ๊ณ„๊ธฐ๋กœ, HTTP Client timeout์„ ์žฌ์„ค์ •ํ•˜๊ณ , ์‹คํŒจ ์‹œ retry ๊ตฌ์กฐ์™€ backoff/jitter ์ •์ฑ…์„ ๋„์ž…ํ–ˆ์œผ๋ฉฐ, ์™ธ๋ถ€ ์žฅ์• ๊ฐ€ ์˜์‹ฌ๋  ๋•Œ ์‹œ์Šคํ…œ์ด ์ž๋™์œผ๋กœ ๊ธฐ๋Šฅ์„ ์ฐจ๋‹จํ•˜๋Š” fallback(์„œํ‚ท ๋ธŒ๋ ˆ์ด์ปค) ํ”„๋กœ์„ธ์Šค๋ฅผ ๋งŒ๋“  ๊ฒฝํ—˜์„ ์ •๋ฆฌํ•œ ๊ธ€์ž…๋‹ˆ๋‹ค. 

 

 

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

 

 

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

 

 

์ฆ‰, ์ด๋ฒˆ ๊ฐœ์„ ์€ ๋‹จ๊ธฐ์ ์ธ ์žฅ์•  ๋Œ€์‘์„ ๋„˜์–ด, ๋™์ผํ•œ ๋ฌธ์ œ๊ฐ€ ์žฌ๋ฐœํ•˜๋”๋ผ๋„ ํ”๋“ค๋ฆฌ์ง€ ์•Š๋Š” ๊ตฌ์กฐ๋ฅผ ๋ฏธ๋ฆฌ ๋งˆ๋ จํ•œ ์ž‘์—…์ด์—ˆ์Šต๋‹ˆ๋‹ค.

 

 

 

โš ๏ธSituation - ๋ฌธ์ œ ์ƒํ™ฉ ๋ฐ ๋ฐฐ๊ฒฝ

์žฅ์• ๋Š” ์™ธ๋ถ€์—์„œ ์‹œ์ž‘๋์ง€๋งŒ, ๋ฌธ์ œ๋Š” ๋‚ด๋ถ€์—์„œ ์ฆํญ๋๋‹ค.

 

 

“HTTP ์š”์ฒญ timeout ์„ค์ •์ด ๋น ์ง”

์ฒซ ๋ฒˆ์งธ ๋ฌธ์ œ๋Š” SSG ์žฅ์•  ๋ฐœ์ƒ์‹œ ๋กœ๊ทธ๋ฅผ ํŒŒ์•…ํ•ด ๋ณด๋‹ˆ, HTTP timeout์ด ์•„๋‹ˆ๋ผ Action timeout์œผ๋กœ ํ„ฐ์ง€๊ณ  ์žˆ์—ˆ๋‹ค๋Š” ์ ์ž…๋‹ˆ๋‹ค.

์‚ฌ๋‚ด ์Šคํฌ๋ž˜ํ•‘ ๋ชจ๋“ˆ์€ ํ† ํ”ฝ์„ ๊ตฌ๋…ํ•ด ์‹คํ–‰๋˜๋Š” Action์ด ์žˆ๊ณ , Action์€ ์ „์ฒด ์‹คํ–‰์— ๋Œ€ํ•œ ํƒ€์ž„์•„์›ƒ(์•ก์…˜ ํƒ€์ž„์•„์›ƒ)์„ ๊ฐ–์Šต๋‹ˆ๋‹ค. ์ •์ƒ์ ์ธ ๊ตฌ์กฐ๋ผ๋ฉด, ์™ธ๋ถ€ ์‘๋‹ต์ด ์ง€์—ฐ๋˜๊ฑฐ๋‚˜ ๋Š๊ฒผ์„ ๋•Œ๋Š” HTTP Client timeout์ด ๋จผ์ € ๋ฐœ์ƒํ•˜๊ณ  “๋„คํŠธ์›Œํฌ ์‹คํŒจ”๋กœ ๋ถ„๋ฅ˜๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

 

SSG ์„œ๋ฒ„ ์žฅ์• ๋กœ ์ธํ•œ ์„œ๋น„์Šค ์—๋Ÿฌ ๋กœ๊ทธ

 

๊ทธ๋Ÿฐ๋ฐ ์‹ค์ œ ๋กœ๊ทธ๋Š” ๊ทธ๋ ‡์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค. ํ†ต์‹ ์ด ๋Š๊ธด ๊ฒŒ ์•„๋‹ˆ๋ผ “Action ๋‚ด๋ถ€ ๋กœ์ง์ด ์˜ค๋ž˜ ๊ฑธ๋ ค์„œ ์‹คํŒจ”์ฒ˜๋Ÿผ ๊ธฐ๋ก๋˜๊ณ  ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.

 

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

 

 

“๊ฐ„ํ—์ ์ธ ๋‹จ์ˆœ ์‘๋‹ต ์˜ค๋ฅ˜์—๋„ ๊ทธ๋Œ€๋กœ ์‹คํŒจ ์ฒ˜๋ฆฌํ•จ.”

timeout ๊ด€๋ จํ•ด ๋กœ์ง์„ ํŒŒ์•…ํ•˜๋ฉด์„œ ํ™•์ธํ•œ ๋˜ ํ•˜๋‚˜์˜ ์ค‘์š”ํ•œ ์‚ฌ์‹ค์€ ์š”์ฒญ ์‹คํŒจ ์‹œ ์ฆ‰์‹œ ์‹คํŒจ ํ™•์ •ํ•˜๊ณ  ์žˆ์—ˆ๊ณ , ๋ฆฌํŠธ๋ผ์ด ๊ตฌ์กฐ๊ฐ€ ์žกํ˜€ ์žˆ์ง€ ์•Š๋‹ค๋Š” ์ ์ž…๋‹ˆ๋‹ค. ๋„คํŠธ์›Œํฌ๋Š” ์–ธ์ œ๋“  ํ”๋“ค๋ฆฌ๊ณ , ์™ธ๋ถ€ Open API๋„ ๊ฐ„ํ—์ ์œผ๋กœ 500 ๋Œ€ ์—๋Ÿฌ๋‚˜ 429(Too Many Request)๋ฅผ ๋ฐ˜ํ™˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

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

 

 

“์™ธ๋ถ€ ์žฅ์•  ๋ฐœ์ƒ์‹œ์—๋„ ์‚ฌ์šฉ์ž์˜ ์š”์ฒญ์€ ๊ณ„์† ๋“ค์–ด์™€ ์‹คํŒจ๊ฐ€ ํญ๋ฐœํ•˜๋Š” ๊ตฌ์กฐ

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

 

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

 

 

 

“์˜ˆ์™ธ ์ฒ˜๋ฆฌ ๋ˆ„์ˆ˜๋กœ ์ธํ•ด ์‚ฌ์šฉ์ž ๊ฒฝํ—˜์ด ์ง์ ‘์ ์œผ๋กœ ๊นจ์ง€๊ณ  ์žˆ์—ˆ์Œ.

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

 

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

 

์—๋Ÿฌ ๋ฉ”์„ธ์ง€๊ฐ€ ๊ทธ๋Œ€๋กœ ๋…ธ์ถœ

 

์‹คํŒจ๋œ ์ž‘์—…์ธ๋ฐ๋„ "์ง„ํ–‰์ค‘" ์ค‘์œผ๋กœ ๋‚จ๋Š” ์ด๋ ฅ ๋ฌธ์ œ

 

 

 

 

๐Ÿ“œTask - ํ•ด๊ฒฐํ•ด์•ผ ํ•˜๋Š” ๊ณผ์ œ ๋ฐ ๋ชฉํ‘œ

๋ชฉํ‘œ๋Š” “์„ฑ๊ณต๋ฅ ์„ ์˜ฌ๋ฆฌ๋Š” ๊ฒƒ”์ด ์•„๋‹ˆ๋ผ “์‹คํŒจ๋ฅผ ํ†ต์ œํ•˜๋Š” ๊ฒƒ”

 

“์™ธ๋ถ€ ํ†ต์‹ ๊ณผ์— ์žˆ์–ด ์ ์ ˆํ•œ timeout ์ฒ˜๋ฆฌ”

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

 

ํ†ต์‹  ๋‹จ๊ณ„์—์„œ ์ ์ ˆํ•œ ์‹œ๊ฐ„๋งŒ ๊ธฐ๋‹ค๋ฆฌ๊ณ  ๋Š์–ด์•ผ “์‹คํŒจ๊ฐ€ ์‹คํŒจ๋กœ ๋ถ„๋ฅ˜”๋˜๊ณ , ํ›„์† ์กฐ์น˜(์žฌ์‹œ๋„/์ฐจ๋‹จ/์‚ฌ์šฉ์ž ์•ˆ๋‚ด)๊ฐ€ ์ •๊ตํ•ด์งˆ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋˜ํ•œ Action timeout ์—๋Ÿฌ์™€ ํ†ต์‹  timeout ์—๋Ÿฌ๋Š” ๋ฐœ์ƒ ์›์ธ๊ณผ ํ›„์† ์กฐ์น˜๊ฐ€ ๋‹ค๋ฅด๋ฏ€๋กœ, ์„œ๋กœ ๋‹ค๋ฅด๊ฒŒ ๋ช…ํ™•ํžˆ ๋ถ„๋ฆฌํ•ด์•ผ ํ–ˆ์Šต๋‹ˆ๋‹ค.

 

 

“Retry ๊ตฌ์กฐ ์„ค๊ณ„”

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

 

 

“Fallback ์ „๋žต ๋„์ž…”

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

 

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

 

 

“์˜ˆ์™ธ ์ฒ˜๋ฆฌ ๋ˆ„์ˆ˜๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•œ ์ „์—ญ์ ์ธ ์—๋Ÿฌ ์ฒ˜๋ฆฌ”

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

 

 

๐Ÿ‘จ‍๐Ÿ”งAction - ํ–‰๋™ ๋ฐ ์ž‘์—…

์ •์ฑ…์„ ๋จผ์ € ํ•ฉ์˜ํ•˜๊ณ , ๊ณตํ†ต ๊ณ„์ธต์œผ๋กœ ๋Œ์–ด์˜ฌ๋ ค “ํ•œ ๋ฒˆ์— ์ ์šฉ”

 

 

“ํƒ€์ž„ ์•„์›ƒ ์„ค์ • ๋ฐ ๋ฆฌํŠธ๋ผ์ด ๊ตฌ์กฐ, ํด๋ฐฑ ํ”„๋กœ์„ธ์Šค ์ •์ฑ… ๊ตฌ์ƒ ํ›„ ํŒ€๋‚ด ์ œ์•ˆ”

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

 

 

“ํƒ€์ž„ ์•„์›ƒ ์„ค์ • ๋ฐ ๋ฆฌํŠธ๋ผ์ด ๊ตฌ์กฐ ์„ค๊ณ„”

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

 

๊ทธ๋ž˜์„œ ์ €๋Š” ๊ฐ ํ†ต์‹  ๊ตฌํ˜„์ฒด์— ๋กœ์ง์„ ํฉ๋ฟŒ๋ฆฌ์ง€ ์•Š๊ณ , ๋ถ€๋ชจ ํด๋ž˜์Šค์˜ HTTP ์š”์ฒญ์„ Sendํ•˜๋Š” ๋ฉ”์„œ๋“œ์— retry๋ฅผ ๊ตฌํ˜„ํ•ด 138๊ฐœ ํŒŒ์ผ์— ํ•œ ๋ฒˆ์— ์ ์šฉ๋˜๋„๋ก ๋งŒ๋“ค์—ˆ์Šต๋‹ˆ๋‹ค. timeout ๊ฐ’์€ config๋กœ ๊ด€๋ฆฌํ•˜๊ณ , ์ˆ˜์ง‘์ฒ˜ ํŠน์„ฑ์— ๋”ฐ๋ผ ๋ฆฌํŠธ๋ผ์ด ํšŸ์ˆ˜๋ฅผ ์กฐ์ • ๊ฐ€๋Šฅํ•  ์ˆ˜ ์žˆ๋„๋ก ๋ฆฌํŠธ๋ผ์ด๋Š” ์ˆ˜์ง‘์ฒ˜ ์—…๋ฌด ๋ช…์„ธ์„œ์— ์„ค์ •ํ•  ์ˆ˜ ์žˆ๋„๋ก ํ–ˆ์Šต๋‹ˆ๋‹ค.

 

๋ฆฌํŠธ๋ผ์ด ๊ทœ์น™์€ ๋‹จ์ˆœํ•˜์ง€๋งŒ ๋ช…ํ™•ํ•˜๊ฒŒ ์žก์•˜์Šต๋‹ˆ๋‹ค. 

  • ๋„คํŠธ์›Œํฌ ์˜ˆ์™ธ(ํƒ€์ž„์•„์›ƒ/์ปค๋„ฅ์…˜ ๋ฌธ์ œ ๋“ฑ)
  • 429 ์‘๋‹ต ๋˜๋Š”5xx ๋Œ€ ์‘๋‹ต

 

 

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

 

 

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

 

 

๊ทธ๋ฆฌ๊ณ  ์ง€์ˆ˜ ๋ฐฑ์˜คํ”„๋งŒ์œผ๋กœ๋Š” ์ถฉ๋ถ„ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๊ฐ™์€ ์‹œ๊ฐ„๋Œ€์— ์ˆ˜๋งŽ์€ ์š”์ฒญ์ด ์‹คํŒจํ–ˆ๋‹ค๋ฉด, ๋ชจ๋“  ์›Œ์ปค๊ฐ€ “2์ดˆ ๋’ค ์žฌ์‹œ๋„”์ฒ˜๋Ÿผ ๋™์ผํ•œ ํŒจํ„ด์œผ๋กœ ๊นจ์–ด๋‚˜ ๋‹ค์‹œ ์š”์ฒญ์„ ๋ชฐ์•„๋„ฃ์Šต๋‹ˆ๋‹ค. ์ด๊ฑด ์žฅ์•  ์ƒํ™ฉ์—์„œ 2์ฐจ ํญ๋ฐœ(์žฌ์‹œ๋„ ์ŠคํŒŒ์ดํฌ)์„ ๋งŒ๋“ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ ๋ฐฑ์˜คํ”„ ๋”œ๋ ˆ์ด์— ์ง€ํ„ฐ(Jitter)๋ฅผ ๋„ฃ์—ˆ์Šต๋‹ˆ๋‹ค. ์ง€์—ฐ ์‹œ๊ฐ„์„ 50~150% ๋ฒ”์œ„์—์„œ ๋žœ๋คํ•˜๊ฒŒ ํฉ๋ฟŒ๋ ค, ์žฌ์‹œ๋„ ํŠธ๋ž˜ํ”ฝ์ด ํŠน์ • ์ˆœ๊ฐ„์— ์ ๋ฆฌ์ง€ ์•Š๋„๋ก ๋ถ„์‚ฐํ–ˆ์Šต๋‹ˆ๋‹ค.

const delay = 1000 * 2 ** attempt_count; // 1์ดˆ, 2์ดˆ, 4์ดˆ... ์ง€์ˆ˜ ๋ฐฑ์˜คํ”„
const delay_ms = delay * (0.5 + Math.random()); // Simple Jitter 
sleep(delay_ms);

 

 

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

์ฆ‰, ๋ฆฌํŠธ๋ผ์ด๋ฅผ ๋„์ž…ํ•˜๋˜ ๋ฌด์กฐ๊ฑด์ด ์•„๋‹ˆ๋ผ, ์—…๋ฌด ํŠน์„ฑ๊ณผ ๋ฆฌ์Šคํฌ๋ฅผ ๊ธฐ์ค€์œผ๋กœ ์ ์šฉ ๋Œ€์ƒ์„ ๊ตฌ๋ถ„ํ–ˆ์Šต๋‹ˆ๋‹ค.

 

 

“Fallback ํ”„๋กœ์„ธ์Šค๋กœ ๊ธฐ๋Šฅ ์ฐจ๋‹จ ์ž๋™ํ™”๋ฅผ ์œ„ํ•ด ์„œํ‚ท ๋ธŒ๋ ˆ์ด์ปค ํŒจํ„ด์„ ํ™œ์šฉ”

์šฐ๋ฆฌ๊ฐ€ ์™ธ๋ถ€ ๋ฆฌ์†Œ์Šค ์„œ๋ฒ„๋ฅผ ์ด์›ํ™”ํ•ด ํŠน์ • ์„œ๋ฒ„ ์žฅ์• ์‹œ ๋‹ค๋ฅธ ์„œ๋ฒ„๋กœ ๋ณด๋‚ด failover ํ•  ์ˆ˜ ์žˆ๋‹ค๋ฉด ์‹คํŒจ์œจ์„ ๋‚ฎ์ถ”๊ณ  ์‚ฌ์šฉ์ž์˜ ๊ฒฝํ—˜์„ ์ฆ๋Œ€์‹œํ‚ฌ ์ˆ˜ ์žˆ์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ์šฐ๋ฆฌ๊ฐ€ ์™ธ๋ถ€ ์„œ๋ฒ„์˜ ์ด์›ํ™”๋ฅผ ๊ฐ€๋Šฅ์ผ€ ํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•์€ ์—†์Šต๋‹ˆ๋‹ค.

 

ํ˜„์‹ค์ ์ธ fallback์€ “๋” ์ด์ƒ ์‹œ๋„ํ•˜์ง€ ์•Š๋Š” ๊ฒƒ”์ž…๋‹ˆ๋‹ค. ์™ธ๋ถ€๊ฐ€ ์ฃฝ์—ˆ๋Š”๋ฐ ๊ณ„์† ๋•Œ๋ฆฌ๋Š” ๊ฑด ์šฐ๋ฆฌ๋„ ์†ํ•ด, ์™ธ๋ถ€๋„ ์†ํ•ด, ์‚ฌ์šฉ์ž๋Š” ๋” ํฐ ์†ํ•ด์ž…๋‹ˆ๋‹ค. ์ด๋•Œ ๊ฐ€์žฅ ์ž˜ ๋งž๋Š” ํŒจํ„ด์ด ์„œํ‚ท ๋ธŒ๋ ˆ์ด์ปค(Circuit Breaker)์ด๋ผ๊ณ  ์ƒ๊ฐํ–ˆ์Šต๋‹ˆ๋‹ค. ์„œํ‚ท ๋ธŒ๋ ˆ์ด์ปค๋Š” ์™ธ๋ถ€ ์˜์กด์„ฑ์ด ์ผ์ • ๊ธฐ์ค€ ์ด์ƒ ์‹คํŒจํ•˜๋ฉด ํšŒ๋กœ๋ฅผ ์—ด์–ด(Open) ์š”์ฒญ์„ ์ฐจ๋‹จํ•˜๊ณ , ์ •์ƒ ์ƒํƒœ(CLOSED), ํƒ์ƒ‰ ์ƒํƒœ(HALF_OPEN)๋ฅผ ์ด์šฉํ•ด ์‹œ์Šคํ…œ์„ ๋ณดํ˜ธํ•˜๋Š” ํŒจํ„ด์ž…๋‹ˆ๋‹ค. ์ €๋Š” ์ด ํŒจํ„ด์„ ๋‹จ์ˆœํžˆ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋กœ ๋ถ™์ด๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ, ์šฐ๋ฆฌ ์‹œ์Šคํ…œ์˜ ์šด์˜ ๋ฐฉ์‹์— ๋งž๊ฒŒ “์ •์ฑ…/๋ฃฐ”๋กœ ๊ตฌํ˜„ํ–ˆ์Šต๋‹ˆ๋‹ค.

 

 

์ฒ˜์Œ์—๋Š” ๊ณต์šฉ ์ €์žฅ์†Œ์ธ Redis์— ์ˆ˜์ง‘์ฒ˜๋ณ„ ์‹คํŒจ ์นด์šดํŠธ๋ฅผ ๋ˆ„์ ํ•˜๊ณ , ์ž„๊ณ„์น˜ ์ดˆ๊ณผ ์‹œ ์ž๋™ ์ฐจ๋‹จํ•˜๋Š” ๊ตฌ์กฐ๋ฅผ ๋– ์˜ฌ๋ ธ์Šต๋‹ˆ๋‹ค.

ํ•˜์ง€๋งŒ ์‚ฌ๋‚ด์—๋Š” ๋งค ์ดˆ ๋ฃฐ์„ ํ‰๊ฐ€ํ•˜๋Š” ๊ณต์šฉ ์‹œ์Šคํ…œ์ด ์ด๋ฏธ ์กด์žฌํ–ˆ๊ณ , ๋ถ€๋ฌธ์žฅ๋‹˜ ๊ถŒ์œ ๋กœ ๊ทธ ์„œ๋น„์Šค๋ฅผ ๋จผ์ € ํ™œ์šฉํ•˜๊ธฐ๋กœ ํ–ˆ์Šต๋‹ˆ๋‹ค. 12์›” 17์ผ SSG ์žฅ์•  ๋‹น์‹œ ๋‚จ์€ ๋กœ๊ทธ๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ, “์Šฌ๋ผ์ด๋”ฉ ์œˆ๋„์šฐ ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ํ™œ์šฉํ•ด, ์ตœ๊ทผ ์ผ์ • ์‹œ๊ฐ„ ์Šฌ๋ผ์ด์Šค ์•ˆ์—์„œ ์‹คํŒจ๊ฐ€ ์–ผ๋งˆ๋‚˜ ๋ฐœ์ƒํ•˜๋ฉด ์žฅ์• ๋กœ ๋ณผ ๊ฒƒ์ธ๊ฐ€”๋ฅผ ๋ฃฐ๋กœ ์ •์˜ํ–ˆ์Šต๋‹ˆ๋‹ค.

 

 

์—๋Ÿฌ ๋กœ๊ทธ ์ŠคํŒŒ์ดํฌ๊ฐ€ ๋ชฐ๋ ธ์„ ๋• 1๋ถ„ ์‚ฌ์ด์— 10๊ฑด, ํ‰๊ท ์ ์œผ๋ก  4.4๊ฑด์ด ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค. ์‹คํŒจ ์ง‘๊ณ„ ์œˆ๋„์šฐ๋ฅผ 30์ดˆ๋กœ ์žก๊ณ , ์‹คํŒจ ์นด์šดํŠธ ์—ญ์น˜ ๊ฐ’์„ 5ํšŒ๋กœ ํ•ด๋ณด๊ธฐ๋กœ ํ•˜์˜€์Šต๋‹ˆ๋‹ค.

 

 

OPEN ์ƒํƒœ ์ง€์†์‹œ๊ฐ„๊ณผ HALF_OPEN ์€ ์–ด๋–ป๊ฒŒ ํ• ์ง€์— ๋Œ€ํ•ด์„œ๋„ ๋…ผ์˜ํ–ˆ์Šต๋‹ˆ๋‹ค. ์„œํ‚ท ๋ธŒ๋ ˆ์ด์ปค๋Š” ํšŒ๋ณต ํƒ„๋ ฅ์„ฑ ๊ด€์ ์—์„œ Half-Open์„ ํ†ตํ•œ ์ž๋™ ํšŒ๋ณต ํƒ์ง€๊ฐ€ ์ผ๋ฐ˜์ ์ด์ง€๋งŒ, ์ €ํฌ ์กฐ์ง์—์„œ๋Š” ์™ธ๋ถ€ ์žฅ์• ์˜ ์›์ธ ํŒŒ์•…๊ณผ ์•ˆ์ •์„ฑ ํ™•์ธ์ด ๋” ์ค‘์š”ํ•˜๋‹ค๊ณ  ํŒ๋‹จํ–ˆ์Šต๋‹ˆ๋‹ค.

 

๊ทธ๋ž˜์„œ ํšŒ์˜ ์ดํ›„ ๊ฒฐ๋ก ์€ “์ž๋™ Half-Open์œผ๋กœ ์กฐ๊ธˆ์”ฉ ์—ด์–ด๋ณด๋Š” ๋ฐฉ์‹”์ด ์•„๋‹ˆ๋ผ, ์‚ฌ๋žŒ์ด ์›์ธ์„ ํ™•์ธํ•˜๊ณ , ์•ˆ์ •์„ฑ์„ ๊ฐ€์‹œ์ ์œผ๋กœ ํ™•์ธํ•œ ๋’ค ์ˆ˜๋™์œผ๋กœ ์˜คํ”ˆํ•˜๋Š” ์šด์˜ ์ •์ฑ…์ด์—ˆ์Šต๋‹ˆ๋‹ค.

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

 

 

์ฐจ๋‹จ์ด ๋ฐœ์ƒํ•˜๋ฉด, ์™ธ๋ถ€ ์ˆ˜์ง‘ ๊ธฐ๋Šฅ on/off๋ฅผ ๊ด€๋ฆฌํ•˜๋Š” Redis ์ƒํƒœ๊ฐ’์„ off ๋กœ ๋งŒ๋“ค์–ด ์‚ฌ์šฉ์ž์˜ ์š”์ฒญ ์ž์ฒด๋ฅผ ๋ง‰์Šต๋‹ˆ๋‹ค. ์‚ฌ์šฉ์ž๋Š” ์™ธ๋ถ€ ์‚ฌ์ดํŠธ ๋ณ€๊ฒฝ์œผ๋กœ ์ธํ•ด ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•˜์ง€ ๋ชปํ•œ๋‹ค๋Š” ์•Œ๋ฆผ์ฐฝ์„ ๋ฐ›์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

 

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

 

 

 

“์˜ˆ์™ธ ์ฒ˜๋ฆฌ ๋ˆ„์ˆ˜๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด ๊ธ€๋กœ๋ฒŒ ์ต์…‰์…˜ ํ•ธ๋“ค๋Ÿฌ ๊ฐœ๋ฐœ๊ณผ ์Šคํฌ๋ž˜ํ•‘ ๋ชจ๋“ˆ ๋ฆฌํŒฉํ† ๋ง”

๊ธฐ์กด ์Šคํฌ๋ž˜ํ•‘ ๋ชจ๋“ˆ์˜ ์—๋Ÿฌ๋Š” ๊ณต์šฉ PTP ๋กœ๊ทธ๋กœ๋งŒ ์Œ“์ด๊ณ , ๋ชจ๋‹ˆํ„ฐ๋ง ํŒ€์ด ์ฃผ๋กœ ๋จผ์ € ๋Œ€์‘ํ•˜๋Š” ๊ตฌ์กฐ์˜€์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ์ด๋ฒˆ ๊ฐœ์„ ์„ ์ œ์•ˆํ•˜๋Š” ๊ณผ์ •์—์„œ, ๋ถ€๋ฌธ์žฅ๋‹˜๊ป˜์„œ “์Šคํฌ๋ž˜ํ•‘/API ํŒ€ ์ž์ฒด ๋กœ๊ทธ ํ…Œ์ด๋ธ”์„ ๋งŒ๋“ค๊ณ  ์šด์˜ ์ฃผ์ฒด๋ฅผ ์šฐ๋ฆฌ ํŒ€์ด ๊ฐ€์ ธ๊ฐ€์ž”๊ณ  ๊ฒฐ์ •ํ•ด์ฃผ์…จ์Šต๋‹ˆ๋‹ค. ์ด๊ฑธ ํ†ตํ•ด ๋ฐœ์ƒํ•˜๋Š” ๋ฌธ์ œ๋ฅผ ํŒ€๋‚ด์—์„œ ๋จผ์ € ๋ชจ๋‹ˆํ„ฐ๋งํ•ด ์ฃผ๋„์ ์œผ๋กœ ๊ฐœ์„ ํ•˜๋„๋ก ์ง€์‹œํ•˜์…จ์Šต๋‹ˆ๋‹ค.

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

 

 

์˜ˆ์™ธ ์ฒ˜๋ฆฌ ๋ˆ„์ˆ˜๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด ๊ธ€๋กœ๋ฒŒ ์ต์…‰์…˜ ํ•ธ๋“ค๋Ÿฌ๋ฅผ ๋งŒ๋“ค์—ˆ์Šต๋‹ˆ๋‹ค. 

์ „์—ญ์ ์ธ ์˜ˆ์™ธ ์ฒ˜๋ฆฌ๋ฅผ ํ• ๋•Œ “๊ฐ ํŒŒ์ผ์—์„œ ํ•˜๋Š” ๊ตฌ์กฐ”๋กœ ๋‘์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค. ์ €๋Š” TypeScript ๋ฉ”์„œ๋“œ ๋ฐ์ฝ”๋ ˆ์ดํ„ฐ๋ฅผ ๋งŒ๋“ค์–ด ์Šคํฌ๋ž˜ํ•‘ ๋ชจ๋“ˆ์˜ ์ง„์ž…์ ์— ์ „์—ญ ์˜ˆ์™ธ ์ฒ˜๋ฆฌ๋ฅผ ๊ฑธ์—ˆ์Šต๋‹ˆ๋‹ค. ์•„์ด๋””์–ด๋Š” Spring Boot์˜ @RestControllerAdvice์—์„œ ๊ฐ€์ ธ์™”์Šต๋‹ˆ๋‹ค.

try {
  // ํ•ธ๋“ค๋Ÿฌ(์ปจํŠธ๋กค๋Ÿฌ ๋ฉ”์„œ๋“œ) ํ˜ธ์ถœ
} catch (Exception ex) {
  // ์—ฌ๊ธฐ์„œ "์˜ˆ์™ธ ์ฒ˜๋ฆฌ ์ฒด์ธ"์œผ๋กœ ๋„˜๊น€
  processHandlerException(ex);
}

 

Spring์—์„œ ์ „์—ญ ์˜ˆ์™ธ ์ฒ˜๋ฆฌ๊ฐ€ ๊ฐ€๋Šฅํ•œ ์ด์œ ๋Š”, ์ปจํŠธ๋กค๋Ÿฌ ๊ฐ๊ฐ์„ try/catch๋กœ ๊ฐ์‹ธ๊ธฐ ๋•Œ๋ฌธ์ด ์•„๋‹ˆ๋ผ ์š”์ฒญ์˜ ์ง„์ž…์ (DispatcherServlet)์—์„œ ์˜ˆ์™ธ๋ฅผ ํ•œ ๋ฒˆ ์žก์•„ ๊ณตํ†ต ์ •์ฑ…์œผ๋กœ ์‘๋‹ต์„ ๋งคํ•‘ํ•˜๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.

์ฆ‰, “์ง„์ž…์ ์„ Around๋กœ ๊ฐ์‹ผ๋‹ค”๋Š” ๋ฐœ์ƒ์ž…๋‹ˆ๋‹ค.

 

 

์ด๋ฅผ ์Šคํฌ๋ž˜ํ•‘ ๋ชจ๋“ˆ๋กœ ์˜ฎ๊ธฐ๋ฉด, ํ† ํ”ฝ์„ ๊ตฌ๋…ํ•ด ์‹คํ–‰๋˜๋Š” Action์ด “์š”์ฒญ์˜ ์ตœ์ดˆ ์ง„์ž…์ ” ์—ญํ• ์„ ํ•ฉ๋‹ˆ๋‹ค. ์Šคํฌ๋ž˜ํ•‘ ๋ชจ๋“ˆ์€ ํ…œํ”Œ๋ฆฟ ๋ฉ”์„œ๋“œ ํŒจํ„ด์— ์˜ํ•ด ๋ชจ๋“  Action์˜ ์‹คํ–‰ ํ•จ์ˆ˜๊ฐ€ executeCore()๋กœ ์ •ํ•ด์ ธ ์žˆ์œผ๋‹ˆ, ์ €๋Š” ์—ฌ๊ธฐ์— ๋ฉ”์„œ๋“œ ๋ฐ์ฝ”๋ ˆ์ดํ„ฐ๋ฅผ ๋‹ฌ์•„ executeCore()๋ฅผ Around Advice์ฒ˜๋Ÿผ ๋ž˜ํ•‘ํ–ˆ์Šต๋‹ˆ๋‹ค.

 

export function _global_exception_handle(
  target: any,
  property_key: string,
  descriptor: PropertyDescriptor
) {
  const original_method = descriptor.value;

  descriptor.value = function (context: IExecutionContext, request: any) {
    try {
      return original_method.call(this, context, request);
    } catch (exception: unknown) {
      _globalExceptionHandle(context, exception, request);
    }
  };

  return descriptor;
}

function _globalExceptionHandle(
  execution_context: IExecutionContext,
  exception: unknown,
  request: any
): void {
  const global_exception_handler =
    execution_context.getFeature<IScrapingGlobalErrorHandlerFeature>(
      IScrapingGlobalErrorHandlerFeature
    );

  if (!(exception instanceof Error)) {
    global_exception_handler.handleUnknownThrown?.(exception, request);
    return;
  }

  switch (exception.name ?? '') {
    case SCRAPING_ERROR_TYPE.SCRAP_ERROR:
      global_exception_handler.handleScrapError(exception, request);
      return;

    case SCRAPING_ERROR_TYPE.E2E_ERROR:
      global_exception_handler.handleE2EError(exception, request);
      return;

    case SCRAPING_ERROR_TYPE.HTTP_CLIENT_ERROR:
      global_exception_handler.handleExternalHttpClientError(exception, request);
      return;

    case SCRAPING_ERROR_TYPE.ASSITANT_ERROR:
      global_exception_handler.handleAssistantError(exception, request);
      return;

    case SCRAPING_ERROR_TYPE.REDIS_CLIENT_ERROR:
      global_exception_handler.handleExternalRedisClientError(exception, request);
      return;

    case SCRAPING_ERROR_TYPE.NETWORK_ERROR:
      global_exception_handler.handleNetworkError(exception, request);
      return;

    default:
      global_exception_handler.handleUnknownError(exception, request);
      return;
  }
}

 

์ด ๋ฐ์ฝ”๋ ˆ์ดํ„ฐ๋ฅผ ํ†ตํ•ด ์˜ˆ์™ธ ์ฒ˜๋ฆฌ ์ •์ฑ…์ด ๋ฐ”๋€” ๋•Œ๋งˆ๋‹ค ๊ด€๋ จ๋œ ๋ชจ๋“  ํŒŒ์ผ์„ ์ฐพ์•„ ์ˆ˜์ •ํ•  ํ•„์š”๊ฐ€ ์—†์–ด์กŒ์Šต๋‹ˆ๋‹ค. ๊ฐ ๋‹จ๊ณ„๋ณ„๋กœ ์ ํ•ฉํ•œ ์ปค์Šคํ…€ ์—๋Ÿฌ(“์–ด๋–ค ์‹คํŒจ์ธ์ง€”, "์‚ฌ์šฉ์ž์—๊ฒŒ ๋ณด์ผ ๋ฌธ๊ตฌ"๋ฅผ ํ”„๋กœํผํ‹ฐ๋กœ ๊ฐ–์Œ)๋ฅผ ๋˜์ง€๊ณ , ๊ธ€๋กœ๋ฒŒ ํ•ธ๋“ค๋Ÿฌ๊ฐ€ ๊ทธ ์—๋Ÿฌ๋ฅผ ๋ถ„๋ฅ˜ํ•ด ๋กœ๊ทธ๋ฅผ ์ ์žฌํ•˜๊ณ , ์ด๋ ฅ์„ ์‹คํŒจ๋กœ ์—…๋ฐ์ดํŠธํ•˜๋Š” ํ† ํ”ฝ์„ sendํ•˜๊ณ , ์‚ฌ์šฉ์ž์—๊ฒŒ ๋ณด์—ฌ์ค„ ๋ฉ”์‹œ์ง€๋ฅผ ํ‘œ์ค€ํ™”ํ•ฉ๋‹ˆ๋‹ค.(AOP)

 

์ฆ‰, ์˜ˆ์™ธ ๋ฐœ์ƒ ์‹œ์ ์€ ๊ทธ๋Œ€๋กœ ์œ ์ง€ํ•˜๋ฉด์„œ, ์ฒ˜๋ฆฌ ์ •์ฑ…๋งŒ ์ค‘์•™์œผ๋กœ ๋ชจ์œผ๋Š” ๊ตฌ์กฐ๊ฐ€ ๋ฉ๋‹ˆ๋‹ค.

๊ธฐ์กด ํ๋ฆ„ (์—๋Ÿฌ ๊ด€๋ฆฌ๋ฅผ ์œ„ํ•œ ์—ฌ๋Ÿฌ ๋ถ„๊ธฐ๋ฌธ์ด ์กด์žฌ + ์—๋Ÿฌ ์ฒ˜๋ฆฌ๋ฅผ ์œ„ํ•œ ์ค‘๋ณต๋œ ๋กœ์ง ๋‹ค์ˆ˜ ์กด์žฌ)
๊ธ€๋กœ๋ฒŒ ์˜ˆ์™ธ ํ•ธ๋“ค๋ง์œผ๋กœ ์˜ˆ์™ธ ์ฒ˜๋ฆฌ๋ฅผ ํ•œ๊ณณ์—์„œ๋งŒ ์ง‘์ค‘ ๊ด€๋ฆฌ

 

์ด ๋ฐฉ์‹์€ try/catch + ๋ถ„๊ธฐ ๋กœ์ง์ด ์„ž์—ฌ ์žˆ์–ด “๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง + ์˜ˆ์™ธ ์ฒ˜๋ฆฌ”๊ฐ€ ๋’ค์—‰ํ‚ค๋˜ ๊ตฌ์กฐ์—์„œ, "์—๋Ÿฌ ์ฒ˜๋ฆฌ"๋ผ๋Š” ๊ด€์‹ฌ์‚ฌ๋ฅผ ๋ถ„๋ฆฌํ•ด ์†Œ์Šค์˜ ๊ฐ€๋…์„ฑ๊ณผ ์œ ์ง€๋ณด์ˆ˜์„ฑ์„ ๋™์‹œ์— ์˜ฌ๋ฆฝ๋‹ˆ๋‹ค.

 

๋ฌด์—‡๋ณด๋‹ค ์ค‘์š”ํ•œ ๊ฑด, ์ง„์ž…์ ์—์„œ try/catch๊ฐ€ ๋ณด์žฅ๋˜๊ธฐ ๋•Œ๋ฌธ์— ์˜ˆ์™ธ๊ฐ€ ์ƒˆ์–ด ๋‚˜๊ฐ€ ๋น„์ •์ƒ ์ข…๋ฃŒ๋˜๋Š” ์ผ€์ด์Šค๊ฐ€ ๊ตฌ์กฐ์ ์œผ๋กœ ์™„๋ฒฝํ•˜๊ฒŒ ์—†์–ด์ง„๋‹ค๋Š” ์ ์ž…๋‹ˆ๋‹ค.

 

 

 

๐Ÿ†Result - ๊ฒฐ๊ณผ ๋ฐ ์„ฑ๊ณผ

์‹คํŒจ๋Š” ์ค„์—ˆ๊ณ , ๋ˆ„์ˆ˜๋Š” ๋ง‰ํ˜”๊ณ , ์šด์˜์€ ์ž๋™ํ™”๋๋‹ค.

 

์ด ๊ฐœ์„ ์˜ ๊ฒฐ๊ณผ๋Š” “์•ˆ์ •์„ฑ”์ด๋ผ๋Š” ์ถ”์ƒ์ ์ธ ๋‹จ์–ด๋กœ๋งŒ ์„ค๋ช…ํ•˜๊ธฐ์—” ์•„์‰ฌ์šธ ์ •๋„๋กœ ๊ตฌ์ฒด์ ์ด์—ˆ์Šต๋‹ˆ๋‹ค.

 

“ํƒ€์ž„์•„์›ƒ ์„ค์ •๊ณผ ๋ฆฌํŠธ๋ผ์ด ์ ์šฉ์œผ๋กœ ๋А๋ฆฐ ์š”์ฒญ 2๊ฐœ ๊ด€์ธก ๋ฐ ์‹คํŒจ์œจ 95.24% ๊ฐ์†Œ”

์šฐ์„ , HTTP timeout์„ 5์ดˆ๋กœ ๋ช…ํ™•ํžˆ ์„ค์ •ํ•˜๋ฉด์„œ “๋А๋ฆฐ ์š”์ฒญ”์ด ๊ด€์ธก๋˜๊ธฐ ์‹œ์ž‘ํ–ˆ์Šต๋‹ˆ๋‹ค. ์ด์ „์—๋Š” Action timeout์— ๋ฌปํ˜€ ์›์ธ์„ ๋ณด๊ธฐ ์–ด๋ ค์› ๋˜ ์ง€์—ฐ์ด, ํ†ต์‹  ๋‹จ๊ณ„์—์„œ ๋ถ„๋ฆฌ๋˜๋ฉฐ ๋“œ๋Ÿฌ๋‚œ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ทธ ๊ณผ์ •์—์„œ ์ง€์—ฐ์œจ์ด ๋†’์€ ์š”์ฒญ 2๊ฑด์„ ์ฐพ์•„ ์กฐ์น˜ํ–ˆ์Šต๋‹ˆ๋‹ค. ํ”Œ๋ ˆ์ด์˜คํ† EMP ์ƒํ’ˆ ์กฐํšŒ API๋Š” ํ•œ ๋ฒˆ์— ๋ชจ๋“  ์ฃผ๋ฌธ์ƒํƒœ๋ฅผ 500๊ฑด ์กฐํšŒํ•˜๋ฉฐ 10์ดˆ๊ฐ€ ๊ฑธ๋ฆฌ๊ณ  ์žˆ์—ˆ๊ณ , ํŒ€์žฅ๋‹˜๊ณผ ์ƒ์˜ ํ›„ 200๊ฑด์”ฉ ์กฐํšŒํ•˜๋„๋ก ์ˆ˜์ •ํ–ˆ์Šต๋‹ˆ๋‹ค. 

 

 

์ฟ ํŒก “์ƒํ’ˆ ์ฒ˜๋ฆฌ์ค‘” API(์ฃผ๋ฌธ์ƒํƒœ ๋ณ€๊ฒฝ PUT๋ฉ”์„œ๋“œ)๋Š” 50๊ฑด ๋ฐฐ์น˜ ์ฒ˜๋ฆฌ ์‹œ 6์ดˆ๊ฐ€๋Ÿ‰ ๊ฑธ๋ฆฌ๋Š” ๊ฒƒ์„ ํ™•์ธํ–ˆ๊ณ , 20๊ฑด์”ฉ ๋ณด๋‚ด๋„๋ก ์กฐ์ •ํ–ˆ์Šต๋‹ˆ๋‹ค. ์ด ๊ณผ์ •์—์„œ ์ค‘์š”ํ•œ ์‚ฌ์‹ค๋„ ํ™•์ธํ–ˆ์Šต๋‹ˆ๋‹ค.

 

PUT ๋ฉ”์„œ๋“œ ์š”์ฒญ์ด๋ผ ๋ฉฑ๋“ฑ์„ฑ์ด ๋ณด์žฅ๋  ๊ฒƒ์ด๋ฏ€๋กœ ํƒ€์ž„์•„์›ƒ ํ›„ ์žฌ์‹œ๋„ํ•ด๋„ ์•ˆ์ „ํ•  ๊ฒƒ์ด๋ผ ๊ธฐ๋Œ€ํ–ˆ์ง€๋งŒ, ์‹ค์ œ๋กœ๋Š” “๋ฐฐ์†ก์ƒํƒœ๋ฅผ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ์ฃผ๋ฌธ๋‚ด์—ญ์„ ํ™•์ธํ•ด์ฃผ์„ธ์š”” ๊ฐ™์€ ์‹คํŒจ ์ฒ˜๋ฆฌ๊ฐ€ ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค.

 

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

 

 

์ •๋Ÿ‰์ ์œผ๋กœ ๋ณด๋ฉด, ์˜์—…์ผ 5์ผ ๊ธฐ์ค€ HTTP ์š”์ฒญ ์‹คํŒจ ์ผ€์ด์Šค๊ฐ€ ๋ฐฐํฌ ์ „์—๋Š” 21๊ฑด ์žˆ์—ˆ์ง€๋งŒ ๋ฐฐํฌ ํ›„ ๋™์ผ ์กฐ๊ฑด์—์„œ 1๊ฑด์œผ๋กœ ์ค„์—ˆ์Šต๋‹ˆ๋‹ค. ๊ฐ์†Œ์œจ๋กœ ๊ณ„์‚ฐํ•˜๋ฉด ์•ฝ 95.24%์ž…๋‹ˆ๋‹ค.

ASIS - 21๊ฑด

 

TOBE - 1๊ฑด : RequestTimeout : 5์ดˆ

 

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

 

 

“7832๊ฐœ์˜ ๊ณ ๊ฐ์‚ฌ์—์„œ ์‚ฌ์šฉํ•˜๋Š” ์‡ผํ•‘๋ชฐ ๊ธฐ๋Šฅ ์•ˆ์ •ํ™” ๋ฐ ์Šคํฌ๋ž˜ํ•‘ ๋ชจ๋“ˆ ๋‚ด ์—๋Ÿฌ 100% ์ฒ˜๋ฆฌ”

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

 

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

 

 

“์šด์˜์ž์˜ ํŒ๋‹จ์ด ์•„๋‹Œ ์‹œ์Šคํ…œ์— ์˜ํ•ด ์ž๋™์œผ๋กœ ๊ธฐ๋Šฅ ์ฐจ๋‹จ”

๋งˆ์ง€๋ง‰์œผ๋กœ, ์„œํ‚ท ๋ธŒ๋ ˆ์ด์ปค ๊ธฐ๋ฐ˜ ์ž๋™ ์ฐจ๋‹จ์€ “๊ฐœ๋ฐœ์ž๋‚˜ ์šด์˜์ž๊ฐ€ ํŒ๋‹จํ•ด์„œ ๋ง‰๋Š” ์šด์˜”์—์„œ “์‹œ์Šคํ…œ์ด ๋จผ์ € ๋ณดํ˜ธํ•˜๋Š” ์šด์˜”์œผ๋กœ ์ „ํ™˜์‹œ์ผœ์ค๋‹ˆ๋‹ค.

 

์™ธ๋ถ€ ์žฅ์• ๊ฐ€ ์˜์‹ฌ๋˜๋ฉด ์š”์ฒญ์„ Fail Fast๋กœ ์ฐจ๋‹จํ•ด ๋” ๋งŽ์€ ์‚ฌ์šฉ์ž๊ฐ€ ์‹คํŒจ๋ฅผ ๊ฒฝํ—˜ํ•˜๊ธฐ ์ „์— ๋ณดํ˜ธํ•  ์ˆ˜ ์žˆ๊ณ , ๋กœ๊ทธ ํญ๋ฐœ์„ ๋ฐฉ์ง€ํ•˜๋ฉฐ, ์™ธ๋ถ€ ๋ฆฌ์†Œ์Šค ์„œ๋ฒ„์—๋„ ๋ถˆํ•„์š”ํ•œ ํŠธ๋ž˜ํ”ฝ์„ ์ค„์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

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

 

 

“์ฃผ๋„์ ์ธ ๋ฌธ์ œ ํ•ด๊ฒฐ ์ž์„ธ์™€ ๋ฌธ์ œ ํ•ด๊ฒฐ ๋Šฅ๋ ฅ์— ๋Œ€ํ•ด ์นญ์ฐฌ”

์ž ๊น์˜ ์™ธ๋ถ€ ์„œ๋ฒ„ ์žฅ์• ๋กœ๋„ '์žฅ์• ๊ฐ€ ํ•ด๊ฒฐ ๋์œผ๋‹ˆ, ๋‹ค์‹œ ์„œ๋น„์Šค ์ •์ƒ ๋™์ž‘'์œผ๋กœ ๋๋‚˜์ง€ ์•Š๊ณ , ๊ทผ๋ณธ์ ์ธ ๋ฌธ์ œ์ ์„ ์ฐพ์•„๋‚ด์–ด ์ด์— ๋Œ€ํ•ด ๊ฐœ์„  ๋ฐฉ์•ˆ์„ ๋จผ์ € ์‚ฌ๋‚ด์— ์ œ์•ˆํ•œ ์ ์— ๋Œ€ํ•ด ๋†’์€ ์นญ์ฐฌ์„ ๋ฐ›์„ ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.

์—…๋ฌด ๋ณด๊ณ ์„œ ๊ด€๋ จ ํŒ€์žฅ๋‹˜ ๋ฐ ๋ถ€๋ฌธ์žฅ๋‹˜ ์ฒจ์–ธ ๋‚ด์šฉ

 

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

 

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

 

 

โœ๏ธ๋งˆ๋ฌด๋ฆฌ

์ด๋ฒˆ ์ž‘์—…์€ HTTP timeout ๊ฐ’์„ ๋ช‡ ์ดˆ๋กœ ๋ฐ”๊พธ๊ณ , retry๋ฅผ 2ํšŒ ๋„ฃ๋Š” ์ •๋„์˜ ๋ณ€๊ฒฝ์ด ์•„๋‹ˆ์—ˆ์Šต๋‹ˆ๋‹ค. ์‹คํŒจ๋ฅผ ์–ด๋–ป๊ฒŒ ๊ด€์ธกํ•˜๊ณ , ์–ด๋–ป๊ฒŒ ๋ถ„๋ฅ˜ํ•˜๊ณ , ์–ด๋–ป๊ฒŒ ์ฒ˜๋ฆฌํ•˜๊ณ , ์–ด๋””์„œ ์ •์ฑ…์„ ๊ด€๋ฆฌํ• ์ง€๊นŒ์ง€ ํฌํ•จํ•œ “์‹คํŒจ ์ฒ˜๋ฆฌ ์ฒด๊ณ„”๋ฅผ ๋งŒ๋“  ์ž‘์—…์ด์—ˆ์Šต๋‹ˆ๋‹ค.

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

 

์ด๋ฒˆ ๊ฐœ์„  ์ž‘์—…์€ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ–ˆ์„ ๋•Œ ์ •๋ง ๊ทผ๋ณธ์ ์ธ ๋ฌธ์ œ์ ์„ ์ฐพ๊ณ (์‚ฌ๋‚ด ์—๋Ÿฌ ์ฒ˜๋ฆฌ), ๋ฌธ์ œ์ ์„ ํ•ด๊ฒฐํ•˜๊ณ (์ ์ ˆํ•œ ์ •์ฑ…๊ณผ ๊ธฐ์ˆ ์  ์ „๋žต), ๋˜ ๋‹ค์‹œ ๊ด€๋ จ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ–ˆ์„ ๋•Œ ๋ฐฉ์–ด๋Š” ์–ด๋–ป๊ฒŒ ์ž๋™ํ™” ํ•ด๋ณผ ์ˆ˜ ์žˆ๋Š”์ง€(ํด๋ฐฑ ํ”„๋กœ์„ธ์Šค) ๊ณ ๋ฏผ์— ๋Œ€ํ•œ ์ €๋งŒ์˜ ๊ตฌํ˜„ ๋ฐ ํ•ด๊ฒฐ๋ฐฉ์•ˆ์„ ๋„์ถœํ•ด ๋‚ด๋Š” ์ข‹์€ ๊ฒฝํ—˜์ด๋์Šต๋‹ˆ๋‹ค.

๋Œ“๊ธ€