개발자도구
HTTP 상태 코드, 왜 200번대부터 500번대로 나뉠까
브라우저 개발자 도구의 네트워크 탭을 열어보면 200, 301, 404, 500처럼 숫자로 된 상태 코드를 자주 마주치게 됩니다. 이 숫자들은 무작위로 정해진 것이 아니라, 맨 앞자리 숫자만으로도 응답의 큰 범주를 알 수 있도록 설계되어 있습니다.
1xx는 요청을 받았고 처리를 계속 진행 중이라는 임시 응답으로, 실무에서 직접 다룰 일은 드뭅니다. 2xx는 요청이 성공적으로 처리되었다는 뜻으로, 단순 조회 성공을 뜻하는 200 외에도 자원이 새로 생성되었음을 알리는 201처럼 세부적으로 나뉘어 있습니다. 3xx는 요청한 자원이 다른 위치로 옮겨졌으니 그쪽으로 다시 요청하라는 리다이렉션을 의미하며, 오래된 URL을 새 주소로 자동 연결할 때 흔히 사용됩니다.
4xx는 클라이언트, 즉 요청을 보낸 쪽의 잘못으로 처리에 실패했다는 뜻입니다. 흔히 보는 404는 요청한 자원이 존재하지 않는다는 의미이고, 401은 인증이 필요하다는 뜻, 403은 인증은 되었지만 접근 권한이 없다는 뜻으로 서로 구분됩니다. 이 둘을 혼동해서 사용하면, 클라이언트 입장에서 로그인을 다시 해야 하는지 권한 자체가 없는 것인지 판단하기 어려워집니다.
5xx는 반대로 서버 쪽의 잘못으로 요청을 처리하지 못했다는 뜻입니다. 코드에서 예외 처리가 되지 않은 오류가 발생했을 때 흔히 500이 반환되며, 서버가 일시적으로 과부하 상태이거나 점검 중일 때는 503을 사용하는 것이 더 정확한 표현입니다.
이런 체계를 잘 지켜서 API를 설계하면, 클라이언트 개발자는 응답 본문을 굳이 파싱하지 않아도 상태 코드만으로 다음 동작(재시도, 재로그인 요청, 오류 화면 표시)을 결정할 수 있어 협업이 훨씬 수월해집니다.