๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

์˜ค์ฆˆ์ฝ”๋”ฉ์Šค์ฟจ ํ”„๋ก ํŠธ์—”๋“œ 10๊ธฐ/ํ™œ๋™ ์ •๋ฆฌ

250611 ๊ณผ์ œ - HTTP ์ƒํƒœ ์ฝ”๋“œ

HTTP ์ƒํƒœ์ฝ”๋“œ 

 

HTTP ์„ค๋ช… : https://hydeveloper.tistory.com/215 

 

Node.js / ๋„คํŠธ์›Œํฌ ๊ธฐ์ดˆ

๋„คํŠธ์›Œํฌ์˜ ์ข…๋ฅ˜ ๋„คํŠธ์›Œํฌ๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ์ „๋‹ฌํ•˜๋Š” ๋ฐ˜๊ฒฝ, ์†๋„์— ๋”ฐ๋ผ LAN, MAN, WAN์œผ๋กœ ๋‚˜๋ˆŒ ์ˆ˜ ์žˆ๋‹ค. LAN(Local Area Network)MAN (Metropolitan Area Network)WAN(Wide Area Network)๋ฒ”์œ„์ข์Œ(์ฃผ๋กœ ์ง‘, ์‚ฌ๋ฌด์‹ค, ๊ฑด๋ฌผ, ์บ ํผ

hydeveloper.tistory.com

 

 

์„œ๋ฒ„๋กœ๋ถ€ํ„ฐ ์˜ค๋Š” HTTP ์‘๋‹ต ๋ฉ”์‹œ์ง€ ๋‚ด์˜ ์ƒํƒœ ์ฝ”๋“œ(status code)๋Š” ํ˜„์žฌ 100~500๋ฒˆ๋Œ€๊นŒ์ง€ ์ •์˜๋˜์–ด์žˆ๋‹ค.

 

 

1XX : Information(์ •๋ณด ์ œ๊ณต)

์ž„์‹œ ์‘๋‹ต์œผ๋กœ, ์ง€๊ธˆ๊นŒ์ง€์˜ ์ƒํƒœ๋Š” ๊ดœ์ฐฎ๋‹ค๋Š” ์˜๋ฏธ

 

 

2XX : Success(์„ฑ๊ณต)

ํด๋ผ์ด์–ธํŠธ์˜ ์š”์ฒญ์ด ์„œ๋ฒ„์—์„œ ์„ฑ๊ณต์ ์œผ๋กœ ์ฒ˜๋ฆฌ๋จ

 

  • 200 (OK) : ์„œ๋ฒ„๊ฐ€ ์š”์ฒญ์„ ์„ฑ๊ณต์ ์œผ๋กœ ์ฒ˜๋ฆฌํ•จ
  • 201 (Created) : ์š”์ฒญ์ด ์ฒ˜๋ฆฌ๋˜์–ด ์ƒˆ๋กœ์šด ๋ฆฌ์†Œ์Šค๊ฐ€ ์ƒ์„ฑ๋จ
  • 202 (Accepted) : ์š”์ฒญ์€ ์ ‘์ˆ˜ํ–ˆ์œผ๋‚˜ ์ฒ˜๋ฆฌ๊ฐ€ ์™„๋ฃŒ๋˜์ง€ ์•Š์Œ (์•„์ง ์ฒ˜๋ฆฌ๊ฐ€ ์‹œ์ž‘๋˜์ง€ ์•Š์•˜๊ฑฐ๋‚˜ ์ฒ˜๋ฆฌ ์ค‘์ž„). ๋”ฐ๋ผ์„œ ๋‚˜์ค‘์— ์‹คํŒจํ•  ์ˆ˜๋„ ์žˆ์Œ
  • 204 (No content) : ์ฒ˜๋ฆฌ๊ฐ€ ์™„๋ฃŒ๋์œผ๋‚˜ ํด๋ผ์ด์–ธํŠธ์—๊ฒŒ ๋ณด๋‚ผ ์ฝ˜ํ…์ธ ๊ฐ€ ์—†์Œ (์‘๋‹ต ๋ฉ”์‹œ์ง€์˜ ๋ฐ”๋””๋Š” ์—†๊ณ , ํ—ค๋”๋Š” ์žˆ์Œ)

 

 

3XX : Redirection(๋ฆฌ๋‹ค์ด๋ ‰์…˜)

์™„์ „ํ•œ ์ฒ˜๋ฆฌ๋ฅผ ์œ„ํ•ด ์ถ”๊ฐ€ ๋™์ž‘์ด ํ•„์š”ํ•จ

 

 

4XX : Client Error(ํด๋ผ์ด์–ธํŠธ ์—๋Ÿฌ)

ํด๋ผ์ด์–ธํŠธ์˜ ์š”์ฒญ ๋ฉ”์‹œ์ง€ ๋‚ด์šฉ์ด ์ž˜๋ชป๋จ

  • 400 (Bad Request) : ์š”์ฒญ์˜ ๊ตฌ๋ฌธ์ด ์ž˜๋ชป๋จ -> ์„œ๋ฒ„๊ฐ€ ์š”์ฒญ์„ ์ดํ•ดํ•  ์ˆ˜ ์—†์Œ
  • 401 (Unauthorized) : ์ง€์ •ํ•œ ๋ฆฌ์†Œ์Šค์— ๋Œ€ํ•œ ์•ก์„ธ์Šค ๊ถŒํ•œ์ด ์—†์Œ
  • 403 (Forbidden) : ์ง€์ •ํ•œ ๋ฆฌ์†Œ์Šค์— ๋Œ€ํ•œ ์•ก์„ธ์Šค๊ฐ€ ๊ธˆ์ง€๋จ (401 ์ฒ˜๋ฆฌ ์ด์™ธ์˜ ์‚ฌ์œ ๋กœ ์•ก์„ธ์Šค๊ฐ€ ๊ธˆ์ง€๋œ ๊ฒฝ์šฐ)
  • 404 (Not Found) : ์ง€์ •ํ•œ ๋ฆฌ์†Œ์Šค๋ฅผ ์ฐพ์„ ์ˆ˜ ์—†์Œ

 

 

5XX : Server Error(์„œ๋ฒ„ ์—๋Ÿฌ)

์„œ๋ฒ„ ๋ถ€ํ•˜, DB ์ฒ˜๋ฆฌ ์˜ค๋ฅ˜ ๋“ฑ ์„œ๋ฒ„ ๋ฌธ์ œ๋กœ ๋ฉ”์‹œ์ง€ ์ฒ˜๋ฆฌ์— ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒ

  • 500 (Internal Server Error) : ์„œ๋ฒ„์— ์—๋Ÿฌ ๋ฐœ์ƒ / ์„œ๋ฒ„๊ฐ€ ์ฒ˜๋ฆฌ ๋ฐฉ๋ฒ•์„ ๋ชจ๋ฅด๋Š” ์ƒํ™ฉ์ด ๋ฐœ์ƒํ•จ
  • 501  (Not Implemented) : ์š”์ฒญ ๋ฐฉ๋ฒ•์ด ์„œ๋ฒ„์—์„œ ์ง€์›๋˜์ง€ ์•Š์•„ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์—†์Œ
  • 502 (Bad Gateway) : ๊ฒŒ์ดํŠธ์›จ์ด๋‚˜ ํ”„๋ก์‹œ ์—ญํ• ์„ ํ•˜๋Š” ์„œ๋ฒ„๊ฐ€ ๊ทธ ๋’ท๋‹จ์˜ ์„œ๋ฒ„๋กœ๋ถ€ํ„ฐ ์ž˜๋ชป๋œ ์‘๋‹ต์„ ๋ฐ›์Œ
  • 503 (Service Available) : ํ˜„์žฌ ์„œ๋ฒ„์—์„œ ์„œ๋น„์Šค๋ฅผ ์ œ๊ณตํ•  ์ˆ˜ ์—†์Œ (๋ณดํ†ต ๊ณผ๋ถ€ํ•˜๊ฐ€ ๊ฑธ๋ฆฌ๊ฑฐ๋‚˜ ์ž‘๋™์ด ์ค‘๋‹จ๋์„ ๋•Œ ๋ฐœ์ƒ)
  • 504 (Gateway Timeout) : ๊ฒŒ์ดํŠธ์›จ์ด๋‚˜ ํ”„๋ก์‹œ ์—ญํ• ์„ ํ•˜๋Š” ์„œ๋ฒ„๊ฐ€ ๊ทธ ๋’ท๋‹จ์˜ ์„œ๋ฒ„๋กœ๋ถ€ํ„ฐ ์‘๋‹ต์„ ๊ธฐ๋‹ค๋ฆฌ๋‹ค ํƒ€์ž„์•„์›ƒ์ด ๋ฐœ์ƒํ•จ

 

 


 

 

 

์˜ค๋ฅ˜ ์ฒ˜๋ฆฌ ์ „๋žต

 

3XX - Redirection (๋ฆฌ๋‹ค์ด๋ ‰์…˜)

๋ธŒ๋ผ์šฐ์ € ํ™˜๊ฒฝ์—์„œ๋Š” ๋ณดํ†ต ์ž๋™์œผ๋กœ ๋ฆฌ๋‹ค์ด๋ ‰์…˜ ๋˜์ง€๋งŒ,

๋งŒ์•ฝ ์•ˆ๋˜๋Š”๊ฒฝ์šฐ location.href = '์ด๋™๋  ์ฃผ์†Œ'์™€ ๊ฐ™์ด ์ˆ˜๋™์œผ๋กœ ์ž‘์„ฑํ•ด์ค˜์•ผํ•œ๋‹ค.

 

 

4XX - Client Error (ํด๋ผ์ด์–ธํŠธ ๋ฌธ์ œ)

400 : ๋ณดํ†ต ์ฃผ์†Œ์— ์˜คํƒ€๊ฐ€ ์žˆ๊ฑฐ๋‚˜, ์š”์ฒญํ•œ ๋ฐ์ดํ„ฐ์˜ ํ˜•์‹์ด ์ž˜๋ชป๋์„ ๋•Œ, ์ž…๋ ฅ๊ฐ’์„ ๋ˆ„๋ฝํ–ˆ์„ ๋•Œ ๋ฐœ์ƒ

=> ์‚ฌ์ „์— ๋ฏธ๋ฆฌ ์œ ํšจ์„ฑ ์ฒดํฌ๋‚˜ ์ž…๋ ฅ ์˜ค๋ฅ˜ ์•ˆ๋‚ด๋ฅผ ํ†ตํ•ด ๋ฐฉ์ง€

 

401 : ์‚ฌ์šฉ์ž๊ฐ€ ๋กœ๊ทธ์ธํ•˜์ง€ ์•Š์€ ์ƒํƒœ์—์„œ ์ธ์ฆ์ด ํ•„์š”ํ•œ API๋ฅผ ํ˜ธ์ถœํ•˜๊ฑฐ๋‚˜, ํ† ํฐ์ด ๋งŒ๋ฃŒ๋˜์—ˆ๊ฑฐ๋‚˜, Authorization ํ—ค๋”๊ฐ€ ๋ˆ„๋ฝ๋˜์—ˆ์„ ๋•Œ ๋ฐœ์ƒ

=> ๋กœ๊ทธ์ธ ํŽ˜์ด์ง€๋กœ ๋ฆฌ๋‹ค์ด๋ ‰ํŠธํ•˜๊ฑฐ๋‚˜, ํ† ํฐ์„ ์žฌ๋ฐœ๊ธ‰๋ฐ›์•„ ์ž๋™ ๋กœ๊ทธ์ธ ์œ ์ง€ ์ฒ˜๋ฆฌ๋ฅผ ํ•œ๋‹ค.

 

403 : ๋ฆฌ์†Œ์Šค์— ๊ถŒํ•œ์ด ์—†์„๋•Œ ๋ฐœ์ƒ

=> ์ ‘๊ทผ ๊ถŒํ•œ์ด ์—†๋Š” ํŽ˜์ด์ง€๋Š” ๋ฐ”๋กœ ์ ‘๊ทผํ•  ์ˆ˜ ์—†๋„๋ก ๋ฐ”๋กœ ์ด๋™ํ•˜๋Š” ๋ฒ„ํŠผ์ด๋‚˜ ๋ฉ”๋‰ด๋ฅผ ์ˆจ๊น€

=> url๋กœ ์ด๋™ํ•  ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ ๊ถŒํ•œ์ด ์—†๋Š” ๊ฒฝ์šฐ ๋Œ€์ฒดํ•  ํŽ˜์ด์ง€๋ฅผ ํ‘œ์‹œ

 

404 : ๋ฆฌ์†Œ์Šค๊ฐ€ ์•„์˜ˆ ์—†์„ ๋•Œ ๋ฐœ์ƒ

=> "ํŽ˜์ด์ง€๋ฅผ ์ฐพ์„ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค" ํ™”๋ฉด์„ ํ‘œ์‹œํ•˜๊ณ , ํ™ˆ ํ™”๋ฉด์ด๋‚˜ ์ด์ „ ํŽ˜์ด์ง€๋กœ ์ด๋™ํ•˜๋„๋ก ๋ฒ„ํŠผ์„ ๊ฐ™์ด ํ‘œ์‹œํ•จ

 

 

5XX - Server Error (์„œ๋ฒ„ ๋ฌธ์ œ)

๊ฐ ์ƒํ™ฉ์— ๋งž๊ฒŒ ์•ˆ๋‚ด ํŽ˜์ด์ง€๋ฅผ ํ‘œ์‹œํ•จ

 

 


 

 

 

typescript ์ฝ”๋“œ๋กœ ๋ณด๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋‹ค. (ํŽ˜์ด์ง€ ์ฒ˜๋ฆฌ๋Š” ๋ณ„๊ฐœ๋กœ..) 

async function fetchUserData(): Promise<void> {
  try {
    const res = await fetch("/api/user");
    // ๊ณตํ†ต ์—๋Ÿฌ ์ฒ˜๋ฆฌ ์ง„์ž…
    if (!res.ok) {
      handleHttpError(res.status); // ์ƒํƒœ ์ฝ”๋“œ์— ๋”ฐ๋ผ ๋ถ„๊ธฐ ์ฒ˜๋ฆฌ
      return;
    }
    const data = await res.json();
    console.log(data);
  } catch (err) {
    console.error(err);
    alert("์„œ๋ฒ„์™€ ์—ฐ๊ฒฐํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.");
  }
}

function handleHttpError(status: number): void {
  if (status >= 400 && status < 500) {
    // 4XX (ํด๋ผ์ด์–ธํŠธ ์—๋Ÿฌ)
    switch (status) {
      case 400:
        alert("์š”์ฒญ ํ˜•์‹์ด ์ž˜๋ชป๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์ž…๋ ฅ๊ฐ’์„ ํ™•์ธํ•ด์ฃผ์„ธ์š”.");
        break;
      case 401:
        alert("๋กœ๊ทธ์ธ์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.");
        window.location.href = "/login";
        break;
      case 403:
        alert("์ด ๋ฆฌ์†Œ์Šค์— ์ ‘๊ทผํ•  ๊ถŒํ•œ์ด ์—†์Šต๋‹ˆ๋‹ค.");
        break;
      case 404:
        alert("์š”์ฒญํ•˜์‹  ๋ฆฌ์†Œ์Šค๋ฅผ ์ฐพ์„ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.");
        break;
      default:
        alert("์š”์ฒญ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค. ๋‹ค์‹œ ์‹œ๋„ํ•ด์ฃผ์„ธ์š”.");
    }
  } else if (status >= 500) {
    // 5XX (์„œ๋ฒ„ ์—๋Ÿฌ)
    switch (status) {
      case 500:
        alert("์„œ๋ฒ„์—์„œ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค. ์ž ์‹œ ํ›„ ๋‹ค์‹œ ์‹œ๋„ํ•ด์ฃผ์„ธ์š”.");
        break;
      case 501:
        alert("์š”์ฒญํ•œ ๊ธฐ๋Šฅ์ด ์„œ๋ฒ„์—์„œ ์ง€์›๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.");
        break;
      case 502:
        alert("์ž˜๋ชป๋œ ๊ฒŒ์ดํŠธ์›จ์ด ์‘๋‹ต์ž…๋‹ˆ๋‹ค. ์„œ๋ฒ„ ์ƒํƒœ๋ฅผ ํ™•์ธํ•ด์ฃผ์„ธ์š”.");
        break;
      case 503:
        alert("ํ˜„์žฌ ์„œ๋ฒ„๊ฐ€ ๊ณผ๋ถ€ํ•˜ ์ƒํƒœ์ž…๋‹ˆ๋‹ค. ๋‚˜์ค‘์— ๋‹ค์‹œ ์‹œ๋„ํ•ด์ฃผ์„ธ์š”.");
        break;
      case 504:
        alert("์„œ๋ฒ„ ์‘๋‹ต ์‹œ๊ฐ„์ด ์ดˆ๊ณผ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ๋‹ค์‹œ ์‹œ๋„ํ•ด์ฃผ์„ธ์š”.");
        break;
      default:
        alert("์„œ๋ฒ„ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค. ๊ด€๋ฆฌ์ž์—๊ฒŒ ๋ฌธ์˜ํ•ด์ฃผ์„ธ์š”.");
    }
  }
}

 

 

 

 

์ฐธ๊ณ 
https://hongong.hanbit.co.kr/http-%EC%83%81%ED%83%9C-%EC%BD%94%EB%93%9C-%ED%91%9C-1xx-5xx-%EC%A0%84%EC%B2%B4-%EC%9A%94%EC%95%BD-%EC%A0%95%EB%A6%AC/
https://developer.mozilla.org/ko/docs/Web/HTTP/Reference/Status