안녕하세요. 이번 시간에는 HTTP 상태 코드에 대해 알아보겠습니다. 응답할 때 주로 사용되기 때문에 응답 코드라고도 불립니다.
인터넷을 서핑하다보면 404 Not Found 에러나 500 Internal Server 에러를 자주 볼 수 있습니다. 가끔 403 Forbidden도 보고요. 바로 이런 것이 HTTP 상태 코드입니다. 서버에 요청을 보냈더니 오류가 났다고 응답을 보낸거죠.
이 코드를 알아야 하는 이유가,전 시간 REST API를 했을 때 필요하기 때문입니다. 전 시간에는 에러 처리를 안 했지만, 만약 에러가 발생한 경우에는 클라이언트에 에러가 났다고 알려줘야합니다. 그 때 보내는 게 상태 코드입니다. 이제부터 어떤 종류의 응답 코드가 있는지 알아보겠습니다.
1XX 정보
100은 서버가 요청의 일부를 받았으며, 나머지 요청을 더 기다리고 있다는 것을 나타냅니다. 101은 http에서 https같이 프로토콜 전환이 일어났을 때 전환이 승인되었음을 알려줍니다. 저는 보통 웹소켓을 할 때 101을 본 것 같습니다.
2XX 성공
200은 여러분이 가장 좋아하는 숫자가 될 겁니다. 성공을 의미하거든요. 대부분은 200이고 몇 가지 다른 게 있습니다.
201은 새로운 컨텐츠 만들기에 성공했을 때 사용합니다. 새로운 포스트를 썼다든가, 새로운 댓글을 썼을 때 보내주면 됩니다. POST 메소드에 대한 응답으로 잘 어울립니다.
204는 요청이 성공은 했지만 응답할 콘텐츠가 없을 경우를 뜻합니다.
206은 스트리밍의 경우와 같이 요청에 대한 응답으로 일부만 먼저 전송한 경우 보내줍니다.
3XX 리다이렉션
300번대는 페이지를 이동 시킬 때 사용합니다. 특히 301 페이지는 영구적으로 주소가 바뀌었을 경우, 301 코드와 함께 새로운 주소로 이동시킵니다. 새로운 주소는 캐싱되기 때문에 속도가 빨라집니다.
반면, 302는 임시적으로 주소가 바뀌었을 경우 사용합니다. 또는 로그인 후 메인페이지로 이동한다든가 할 때에도 사용됩니다. 대부분의 리다이렉트는 302 코드를 사용합니다. 영구적으로 주소를 바꾸는 경우는 드물거든요.
304는 이전에 방문했을 때의 요청 결과와 다르지 않을 경우 표시됩니다. 즉 캐시된 페이지를 그대로 사용합니다. 307은 임시로 페이지를 리다이렉트하는 겁니다.
4XX 클라이언트 오류
400번대 부터는 에러입니다. 400은 서버가 요청을 이해하지 못 할 경우 발생합니다. 올바른 요청을 보냈는지 검사해야 합니다. 401은 로그인을 하지 않아 페이지를 열 권한이 없는 겁니다. 403은 금지된 페이지입니다. 로그인을 하든 안하든 상관없이 접근할 수 없는 페이지는 403을 전송합니다. 관리자 페이지가 이겁니다.
404는 찾을 수 없는 페이지입니다. 주소를 잘못 입력했거나 하면 404를 요청합니다. 403 대신에 404를 전송하는 경우도 많습니다. 왜냐하면, 403을 전송하면 금지되었긴 하지만 어쨌든 어떠한 페이지는 있는 것이기 때문에 해커들의 공격을 받을 수 있습니다. 이를 방지하고자 아예 404를 보내 없는 페이지처럼 위장하기도 합니다.
408은 요청 시간 초과입니다. 409는 서버가 요청을 처리하는 과정에서 충돌이 발생한 경우입니다. (회원가입을 했는데 이미 사용하고 있는 아이디인 경우) 410은 영구적으로 사용할 수 없는 페이지입니다. 451은 새로 생겼습니다. warning.or.kr처럼 법적으로 막힌 페이지를 표시할 때 451 코드를 전송합니다.
5XX 서버 오류
500번대는 서버 오류입니다. 요청은 제대로 전송되었지만 서버가 처리하지 못하는 경우입니다. 500은 내부 서버 에러(Internal Server Error)가 날 때 전송됩니다. 이것은 서버 상의 에러이기 때문에 해당 서버 관리자가 반드시 살펴봐야 합니다.
501은 서버에 아직 해당 요청을 처리하는 기능을 만들지 않았다는 뜻입니다.
502는 서버로 가는 요청이 중간에서 유실된 경우입니다.
503은 서버가 터졌거나(접속이 폭주 또는 Ddos 공격) 유지보수중일 때 전송합니다. 하지만 유지보수중일 때는 503을 보내기보다는 유지보수중이라는 것을 알려주는 페이지를 전송해주는 것이 좋습니다.
504는 서버 게이트웨이에 문제가 생겨 시간 초과가 된 경우입니다. 505는 HTTP 버전이 달라 요청을 처리할 수 없음을 뜻합니다.
이렇게 많은 코드들이 있습니다. 그런데 문제는 대부분의 경우 서버가 코드를 알아서 보내주지 않습니다. 여러분이 응답을 보낼 때 코드를 지정한 후에 보내는 겁니다. express 프레임워크는 5.0버전부터 status를 보내는 게 필수화되었습니다.
res.status(200).json({ completed: true });
이렇게요. 상태 코드를 잘 알고 있어야 해당하는 상황에 맞는 코드를 보낼 수 있겠죠? 물론 코드를 100% 정확하게 보내지 않더라도 큰 문제는 없지만, 좋은 웹사이트라고 불릴 수는 없을 겁니다. 또한 잘못된 코드를 보내면 그 문제를 수정하는 데 꽤나 애를 먹겠죠. 최대한 좋은 웹사이트를 만들어 500번대 오류가 일어나지 않는 웹사이트를 만들어봅시다. 400번대 오류는 여러분이 막을 수 있는 오류가 아닙니다.
다음 시간에는 passport를 사용하여 로그인을 구현해보겠습니다!