TimeOut ์ด์Šˆ

์•ˆ๋…•ํ•˜์„ธ์š” API์„œ๋ฒ„๋ฅผ ๊ฐœ๋ฐœํ•˜๊ณ ์žˆ๋Š” ๊ฐœ๋ฐœ์ž์ž…๋‹ˆ๋‹ค.

Api๋ฅผ ํ˜ธ์ถœํ•ด์„œ ํŠน์ • ์ž‘์—…์„ ์‹คํ–‰ํ•œ ๋‹ค์Œ HttpResponseMessage๋ฅผํ†ตํ•ด ๊ฒฐ๊ณผ๊ฐ’์„ ๋ฐ˜ํ™˜ ํ•˜๊ณ ์žˆ์Šต๋‹ˆ๋‹ค.
๋‹ค๋งŒ ์ง€๊ธˆ ๋ฌธ์ œ๊ฐ€ ํ•˜๋‚˜์žˆ๋Š”๊ฒŒ ๊ฐ€์ ธ์™€์•ผํ•  ๊ฐ’์ด ๋งŽ์•„์ ธ์„œ ์‹œ๊ฐ„์ด ๋Š˜์–ด๋‚˜๋ฉด(์•ฝ 3๋ถ„์ด์ƒ) ํด๋ผ์ด์–ธํŠธ ๋‹จ์—์„œ Status 500 / Timeout์˜ html ํƒœ๊ทธ๊ฐ€ ๋ฆฌํ„ด๋˜๊ณ ์žˆ์Šต๋‹ˆ๋‹ค. Api๋‚ด ๋กœ๊ทธ๋Š” ๋‚ด๋ถ€๋กœ์ง์ด ๋‹ค ์‹คํ–‰ ๋œ ํ›„ Return ๊นŒ์ง€ ์ž‘์—…์„ ํ•˜๋Š” ๋ถ€๋ถ„๊นŒ์ง€ ๋กœ๊ทธ๊ฐ€ ์ •์ƒ์ ์œผ๋กœ ์Œ“์—ฌ์žˆ์Šต๋‹ˆ๋‹ค.

ํ˜ธ์ถœํ•˜๋Š” ํด๋ผ์ด์–ธํŠธ ๋‹จ์—์„œ๋Š” Timeout์„ ๋ฐฉ์ง€ํ•˜๊ธฐ์œ„ํ•ด 10๋ถ„์œผ๋กœ ์„ค์ • ํ•ด๋‘” ์ƒํƒœ์ด๊ณ  PostMan์—์„œ๋Š” -1 ์…‹ํŒ…์„ํ†ตํ•ด ๋ฌด์ œํ•œ์œผ๋กœ ์„ค์ •ํ•ด๋‘์—ˆ๋Š”๋ฐ๋„ ์ด๋ ‡๊ฒŒ ๋‚˜์˜ค๊ณ ์žˆ์Šต๋‹ˆ๋‹ค.

ํ˜น์‹œ Api์„œ๋ฒ„๋‹จ์—์„œ๋„ ๋ญ”๊ฐ€ ์…‹ํŒ…ํ• ๊ฒŒ ์žˆ์„์ง€ ์ž˜ ๋ชจ๋ฅด๊ฒŸ์–ด์„œโ€ฆ ๋„์›€์„ ๊ตฌํ•˜๊ณ ์ž ๊ธ€์„ ๋‚จ๊ฒจ๋ด…๋‹ˆ๋‹คโ€ฆ ใ… ใ… 

2๊ฐœ์˜ ์ข‹์•„์š”

ASP.NET ๋ฒ„์ „๊ณผ IIS, NGINX ์›น ์„œ๋ฒ„ ์œ ๋ฌด์— ๋”ฐ๋ผ ์„ค์ •์ด ๋งŽ์ด ๋‹ฌ๋ผ์ง€๋Š”๋ฐ์š”.
์–ด๋–ป๊ฒŒ ๋˜์‹œ๋‚˜์š”?

ASP.NET ๋ฒ„์ „์€ ์ด 3๊ฐ€์ง€๋กœ ๋‚˜๋‰˜๋„ค์š”.

  • ASP.NET Core web.config๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๋ฒ„์ „
  • ASP.NET Core web.config๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ๋ฒ„์ „
  • ASP.NET Core๊ฐ€ ์•„๋‹Œ ์ด์ „ ๋ฒ„์ „
3๊ฐœ์˜ ์ข‹์•„์š”

์•ˆ๋…•ํ•˜์„ธ์š” ํ˜„์ œ .NET Core๋ฅผ ์‚ฌ์šฉํ•˜์ง€์•Š๋Š” ๋ฒ„์ „์ธ .NET Framework 4.8 ์ž…๋‹ˆ๋‹ค!
๊ทธ๋ฆฌ๊ณ  ์„œ๋ฒ„๊ฐ™์€๊ฒฝ์šฐ๋Š” Azure WebApp์„ ์ด์šฉํ•˜๊ณ ์žˆ์Šต๋‹ˆ๋‹ค. ( Azure ๊ฐ™์€๊ฒฝ์šฐ WebApp๊ฐ™์€๊ฒฝ์šฐ PaaS ํ˜•ํƒœ์˜ ์„œ๋น„์Šค๋ผ IIS๋ฅผ ๋ณ„๋„๋กœ ์ปจํŠธ๋กค ํ•  ์ˆ˜๋Š” ์—†๋Š”๊ฒƒ์œผ๋กœ ์•Œ๊ณ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ฒ„์ „์€ ๋Š˜ ์ตœ์‹ ๋ฒ„์ „์„ ์œ ์ง€ํ•œ๋‹ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค.)

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

๋”ฐ๋ผ์„œ ์‹ค์ œ๋กœ Api๋Š” ๋‹ค ๋™์ž‘์„ ํ•˜๋‚˜ ์š”์ฒญ์ž์ธ ํด๋ผ์ด์–ธํŠธ ์ธก์— ์ „๋‹ฌ๋˜๋Š” ๋ฉ”์‹œ์ง€๋Š”
Status 500๊ณผ ์•„๋ž˜์™€ ๊ฐ™์€ Request Timed Out์ด๋ฉฐ ์˜ค๋ฅ˜๋ฉ”์‹œ์ง€๋Š” ๋ถ„๋ช… ์ง€์ •๋œ ์‹œ๊ฐ„๋‚ด์— ์‘๋‹ต์„ ๋ชปํ–‡๋‹ค๊ณ ํ•˜๋Š” ๋ถ€๋ถ„์ด๋‹ˆ ์šฐ์„  ํด๋ผ์ด์–ธํŠธ ๋‹จ์—์„œ ์š”์ฒญ์‹œ timeout์„ ๋ฌดํ•œ๋Œ€๋กœ ๋ฐ”๊ฟ”์„œ ํ…Œ์ŠคํŠธํ•ด๋ดฃ์œผ๋‚˜ ๊ทธ๋ž˜๋„ ๋ฐœ์ƒ์„ ํ•ด์„œ ์„œ๋ฒ„์ธก์˜ ์ด์Šˆ๊ฐ€ ์•„๋‹๊นŒ ํ•˜๋Š”๋ฐฉํ–ฅ์œผ๋กœ ์ฐพ์•„๋ณด๋‹ค ์งˆ๋ฌธ๋„ ๋‚จ๊ธฐ๊ฒŒ๋ซ์Šต๋‹ˆ๋‹ค ใ… 

500 - The request timed out.

500 - The request timed out.

The web server failed to respond within the specified time.
2๊ฐœ์˜ ์ข‹์•„์š”

ASP.NET .net framework 4.8 webapi ์‹คํ–‰ ์‹œ๊ฐ„ ์กฐ์ • ๋ฐฉ๋ฒ• ๊ณต์œ  ๋“œ๋ฆฝ๋‹ˆ๋‹ค.
web.config์— ์•„๋ž˜ ๊ฐ’์„ ์„ค์ •ํ•˜์‹œ๋ฉด ๋ฉ๋‹ˆ๋‹ค.

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <system.web>
    <httpRuntime executionTimeout="110" />
  </system.web>
</configuration>

์ฝ”๋“œ๋กœ๋Š” Controller์— ์•„๋ž˜์™€ ๊ฐ™์ด ์„ค์ •ํ•˜์‹œ๋ฉด ๋ฉ๋‹ˆ๋‹ค.

HttpContext.Current.Server.ScriptTimeout = 300;

์ œ๊ฐ€ ์•„๋Š” Azure WebApp์ด๋ฉด Azure App Service๋ฅผ ๋ง์”€ํ•˜์‹œ๋Š” ๊ฒƒ ๊ฐ™์€๋ฐ์š”.
https://azure.microsoft.com/ko-kr/services/app-service/#overview
web api์˜ ์ฒ˜๋ฆฌ์™€๋Š” ๋ฌด๊ด€ํ•˜๊ฒŒ ์‹œ๊ฐ„ ์ดˆ๊ณผ๊ฐ€ ๋ฐœ์ƒ๋˜๋Š” ๊ฒƒ ๊ฐ™๋‹ค๋Š” ๋ง์”€ํ•˜์…”์„œ ์ฐพ์•„ ๋ดค๋Š”๋ฐ Azure App Service์— ํฌํ•จ๋œ Azure Load Balancer์˜ timeout์ด 230์ดˆ๋ผ๊ณ  ํ•˜๋„ค์š”.
์•ž์—์„œ ๋ง์”€๋“œ๋ฆฐ web.config ์„ค์ • ๋ณ€๊ฒฝ ํ›„ ์‹œ๊ฐ„ ์ฒดํฌ ํ•ด ๋ณด์‹œ๋ฉด ์ข‹๊ฒ ์Šต๋‹ˆ๋‹ค.
image

์•„์‹œ๋Š” ๊ฒƒ์ฒ˜๋Ÿผ 230์ดˆ๋„ ๊ฒฐ์ฝ” ์งง์€ ์‹œ๊ฐ„์ด ์•„๋‹ˆ๊ธฐ์— ๊ฐ€๋Šฅํ•˜๋‹ค๋ฉด ๋งŽ์€ ๊ฑด์ˆ˜๊ฐ€ ํฌํ•จ๋œ ๊ฒฐ๊ณผ๋Š” ํŽ˜์ด์ง• ์ฒ˜๋ฆฌ๋ฅผ ํ•˜์‹œ๋ฉด ์–ด๋–จ๊นŒ ์‹ถ์Šต๋‹ˆ๋‹ค.
WebAPI ์š”์ฒญ์‹œ offset, pageSize ๋ฅผ ํฌํ•จํ•˜์—ฌ ์š”์ฒญํ•˜๊ณ  1 ~ 50, 51 ~ 100, 101 ~ 150 ๋“ฑ ๋‚˜๋ˆ„์–ด์„œ ๋ฐ›๋Š”๋‹ค๋ฉด ๊ทผ๋ณธ์ ์ธ ์ด์Šˆ๊ฐ€ ํ•ด๊ฒฐ๋˜์ง€ ์•Š์„๊นŒ ์กฐ์‹ฌ์Šค๋Ÿฝ๊ฒŒ ์˜๊ฒฌ ๋“œ๋ฆฝ๋‹ˆ๋‹ค.

2๊ฐœ์˜ ์ข‹์•„์š”

์นœ์ ˆํžˆ ์•Œ์•„๋ด ์ฃผ์…”์„œ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค.
excutionTimeout๊ฐ™์€๊ฒฝ์šฐ์—๋Š” ๋ฏธ๋ฆฌ ์ˆ˜์ •์„ ํ•ด๋ณด์•˜์—‡๋Š”๋ฐ ์ด๋ฏธ ์•ˆ๋˜์—ˆ์—‡์Šต๋‹ˆ๋‹ค.

๋‹ค๋งŒ Azure ๋กœ๋“œ๋ฒจ๋Ÿฐ์„œ์˜ ์‹œ๊ฐ„์ด 230์ดˆ๋ผ๋Š”๋ถ€๋ถ„์€ ๋•๋ถ„์— ์•Œ์•„๊ฐ€๊ฒŒ๋ฉ๋‹ˆ๋‹ค!! ํ•ด๋‹น๋ถ€๋ถ„์„ ์ฐธ๊ณ ํ•˜์—ฌ ์ž‘์—…์„ ์ง„ํ–‰ํ•ด๋ด์•ผ๊ฒ ์Šต๋‹ˆ๋‹ค.

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

3๊ฐœ์˜ ์ข‹์•„์š”