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