HTTP 응답(상태) 코드 면접 질문.
나의 대답.
면접 때 HTTP 상태 코드들에 대해서 설명해달라는 질문을 받았다.
확실하지 않은.. 흐릿한 기억으로 생각나는 것들을 답변했고.. 지금 돌아보면 카테고리가 죄다 틀린 대답들이었다.
이 대답은 점수를 얻기는커녕 마이너스였을 것이다.
WHY
해당 면접 질문의 목적은 무엇일까. HTTP 응답 메시지를 공부하면서 알게 되었다.
개인적으로 스프링 프로젝트 진행할 때 스프링 fox 프로젝트의 swagger를 통해 REST API를 문서화할 때 HTTP의 응답 코드들을 같이 문서화했었다.
REST API는 글로벌한 표준이 없이 철학적인 가이드라인만 제시해주기에
프로젝트마다 REST API를 문서화해서 표준을 지키도록 이끌어야 한다.
자체적인 표준 REST API의 경로를 잘 맞춘 경우 이에 적합한 응답들을 문서에 적어줘야 한다.
해당 문서를 통해서 다른 백엔드 서비스 개발자들도 참고하게 되고, 프론트엔드 측에서도 확인하는 것이다.
특히 프론트엔드 측과 협업할 때 응답 코드는 상당히 중요하다.
어떻게 응답하느냐에 따라서 거짓 응답을 보낼 수도 있고 좀 더 풍부한 정보를 전달해주는 응답이 될 수 있기 때문.
[ HTTP 요청에서 보내는 메서드는 클라이언트는 "~~을 원해"를 의미한다. 이를 직접적으로 처리하는 역할을 "서버"에 있다. 그래서 서버는 클라이언트의 요청을 적합하게 처리했는지에 대해서 상태코드를 통해 "응답"하는 것이다. ]
클라이언트는 응답을 믿을 수 밖에 없다.
그래서 응답이 잘못된 경우 문제가 될 수 있다. 클라이언트 측은 오로지 응답만 믿기 때문에 그에 맞게 행동하기 때문!
만약 클라이언트의 요청에 400을 보내야 하는데 응답이 404(Not found)를 반환하면 어떻게 될까? 해당 사용자는 해당 URI가 의미가 없다는 것으로 받아들일지도 모른다. 400이라면 문법을 체크해볼 수도 있는데 말이다. ]
사소할 수 있으나 응답이 풍부하고 세부적일 수록 신뢰성이 높으며 서버 개발자는 이를 세심하게 고려해야 한다.
모든 HTTP 응답 코드는 5[1-5]개로 분류할 수 있다.
1-5의 카테고리에서 특정 상황에 맞는 번호를 "상황"에 매칭 해서 풍부한 응답 결과를 제공할 수 있도록 IANA(Internet Assigned Number Authority로 IP 주소를 관리하는 기관이다)에서 관리하고 있다.
첫 번째 숫자가 카테고리가 되어준다.
1xx (informational response): 정보를 제공하는 응답이다.
2xx (success) : 요청을 성공적으로 받았으며 인식을 했고 수용했다는 것을 의미한다.
3xx (redirection) : 클라이언트의 요청에 대해 "적절한 위치"를 제공하거나 대안의 응답을 제공한다.
4xx (Client Error) : 클라이언트의 잘못된 요청
5xx (Server Error) : 클라이언트의 요청은 정상적이었지만 서버의 문제로 응답이 불가능한 경우. [ 트래픽 관련이 많다. ]
4xx와 관련된 세부적인 상태 코드들이 매우 중요하다. [ 클라이언트와 관련된 것이기 때문! ]
400 : 클라이언트의 잘못된 문법으로 서버가 이해하지 못한 경우를 의미한다.
401 : 요청을 위한 권한 인증이 필요하다는 상태 코드이다.
403 : 인증은 처리되었으나 해당 자원에 대한 인가를 거치지 않은 경우에 대한 응답이다.
404 : Not Found로 요청한 URI를 찾을 수 없는 경우이다.
좀 더 깊게 들어간다면 실제 REST API를 구현하면서 응답 코드도 같이 문서화했는지를 물어보지 않을까 한다.
혹은 각 카테고리별 알고 있는 세부적인 상태 코드를 물어본다거나..
400대에서 특정 상태 번호는 무엇을 의미하는지를 물어볼 수 도 있다. [ 400, 401, 403, 404는 워낙 유명한 상태 코드라서 기억해두면 좋다. ]
각각의 카테고리에 있는 상태 코드들에 대해서 궁금하다면 아래의 블로그를 참고해주기를 바란다.
[ 해당 내용들을 가져오는 것은 실례가 될 수 있어서 가져오지 않았다. ]
참고 자료.
'면접질문[CS] > 알고리즘 & OS' 카테고리의 다른 글
HTTPS와 HTTP의 차이점. 핵심은 SSL/TLS [ 네트워크 면접질문 6 ] (0) | 2021.12.08 |
---|---|
HTTP1.1과 HTTP2.0 [ 네트워크 면접 질문5 ] (0) | 2021.12.03 |
HTTP 1.0과 HTTP 1.1 [ 네트워크 면접 질문4] (0) | 2021.12.02 |
연결지향 TCP 프로토콜의 세션 연결과 세션 종료 [ 네트워크 면접 질문3 ] (0) | 2021.12.01 |
HTTP의 GET과 POST 메서드 비교. [ 네트워크 면접 질문1 ] (0) | 2021.11.29 |