😅 처음 팀플을 진행했을 때 상태 코드에 대한 명확한 지식이 없어서 400번대 에러를 접하고 백엔드 팀원에게 찡찡거렸던 기억이 너무 부끄럽습니다 이번 글을 통해 HTTP 상태코드에 대해 자세히 알아보고 필자와 같은 실수를 하지 말았으면 하는 바램입니다 : )
클라이언트가 서버를 향해 리퀘스트를 보낼 때 서버에서 그 결과가 어떻게 되었는지 알려주는 것이 상태코드의 역할이다.
상태 코드는 일반적으로 3자리 숫자로 표현되는데 첫 번째 자리는 리스폰스의 클래스를 의미하고 나머지 2자리는 분류가 없습니다.
위에 보이는 이미지의 404 또한 HTTP 상태코드를 의미합니다.
구글 크롬의 개발자도구의 Network 탭에서 확인할 수 있습니다. 다음 이미지를 보면 쉽게 알 수 있습니다!
HTTP 상태 코드는 RFC2616에 있는 것만 40종류가 있고, 총 60 종류 이상이 있지만 실제로 개발할 때 사용되는 건 14종류 정도라고 합니다. 🤦♂️
100번대는 서버가 요청을 받아들여 처리중임을 나타내고 클래스는 Informational 입니다.
가장 흔히 볼 수 있는 코드로 클라이언트가 요청한 작업을 서버가 성공적으로 수행했다는 상태를 알려주는 코드입니다.
300번대 코드들은 리다이렉션에 관한 상태를 의미합니다.
클라이언트가 요청한 리소스가 옮겨지거나 리소스가 삭제되었거나 정상적인 방법으로 더 이상 해당 리소스에 접근할 수 없고 다른 URL을 통해 그 리소스에 접근해야할 때 300번대 코드를 사용합니다.
긴장 💧
400번대 코드들은 클라이언트가 서버에 보낸 요청이 잘못된 경우를 나타냅니다.
400 Bad Request는 필자도 가장 많이 마주친 400번대 코드입니다 😇
간단히 말해 클라이언트에서 리퀘스트형식에 맞게 보내지 않았을 때, 예외처리가 안되었을 때 주로 발생합니다.
401 Unauthorized는 인증되지 않은 사용자가 인증이 필요한 리소스를 요청하는 경우에 발생합니다. 서버가 401을 응답으로 보낼 경우 클라이언트에서는 로그인이 필요한 경우라고 판단하고 로그인 페이지로 리다이렉션 하기도 한다.
403 Forbidden은 클라이언트가 접근이 금지된 리소스를 요청했을 때 발생합니다.
404 Not Found는 리퀘스트한 리스폰스가 서버에 없음을 의미합니다.
401은 로그인되지 않았을 때 주로 발생하지만, 403은 리소스를 요청한 사용자가 누구인지 신경쓰지 않고 클라이언트측에서 리소스에 접근하는 것 자체가 금지라는 뜻을 내포하고 있습니다.
500번대 에러는 서버에서 리퀘스트를 처리하는 도중에 에러가 발생하였음을 나타내는 상태코드입니다.
500 Internal Server Error는 서버에서 리퀘스트를 처리하는 도중에 알 수 없는 에러가 발생했다는 의미이고 에러의 원인을 클라이언트에게 알려주지 않습니다.
502 Bad Gateway는 백엔드 어플리케이션이 죽은 상황에 발생합니다.
503 Service Unavailable는 503은 서버가 요청을 처리할 준비가 되지 않았음을 의미합니다. 즉, 서버가 과부하 상태이거나 점검중일 떄 발생함을 나타냅니다.