웹개발자 기술면접 준비용 HTTP 상태 메시지 관련 면접 질문과 개념 총정리 입니다.
HTTP 상태 메시지 종류 및 면접질문
웹개발자 직무로 기술면접을 받거나, 공고문에서 REST API 관련 직무가 포함되어 있다면 HTTP 상태 메시지에 대한 질문은 높은 빈도로 나오는데요. 이에 따라 관련 개념을 정리하고 실제 면접때 받은 질문을 바탕으로 예상 질문을 선정해보았습니다.
면접 질문 예시
- HTTP 상태코드 500번대에서 아는 것 있나요? 아는대로 설명해주세요.
- 스프링에서 401 상태코드를 반환하도록 구현하려면 어떻게 해야하는지 설명해주세요.
아래 내용을 잠깐동안 숙지를 하면 위 면접 질문에 대해서 답변할 수 있을 것입니다. 아래 정리한 응답코드말고도 다양한 응답코드들이 존재하는데요. 면접이나 실무에서 자주 보이는 응답 코드 위주로 정리를 했습니다. 300번대는 응답코드를 따로 정리하진 않았지만, 300번대가 리다이렉션 관련 상태 메시지라는 것은 알아두면 좋습니다.
HTTP 상태 메시지
아래 내용 순으로 설명할 예정입니다.
- 1xx Information
- 2xx Successful
- 3xx Redircection
- 4xx Client Error
- 5xx Server Error
1xx: Information
서버가 요청을 받았으며, 조건부 응답이라 작업을 계속 진행함.
메시지 | 설명 |
101 Switching Protocols | 이 코드는 클라이언트가 요청에 Upgrade 헤더를 포함한 경우, 서버에서 프로토콜을 변경할 것임을 알려줌. |
101번 상태 코드를 쓰는 대표적인 예시는 웹소켓입니다. 웹소켓은 클라이언트와 서버가 양방향으로 통신하는 웹 기술인데요. 최초에 클라이언트에서 서버 URL을 지정하고 웹소켓 인스턴스를 생성하면 HTTP 프로토콜에 Upgrade 헤더가 포함된 요청이 서버로 전달됩니다.
서버 웹소켓 엔드포인트에서는 해당 메시지를 받아 클라이언트에 101번 HTTP 상태 코드로 응답합니다. 그러면 클라이언트 서버간에 웹소켓 연결이 성공된 것이며, 웹소켓 프로토콜로 양방향 통신을 할 수 있는 상태가 됩니다.
2xx: Successful
메시지 | 설명 |
200 OK | 요청에 성공적으로 처리됐음을 알리는 응답 코드. |
200 상태 코드는 서버 컨트롤러에서 응답이 정상적으로 처리되는 경우에 직접 헤더를 설정하거나, 기본으로 매핑되어있는 상태코드입니다. 스프링에서는 별도 응답코드를 매핑하지 않으면 200 OK로 응답합니다.
3xx: Redirection
리다이렉션 완료 (300번대 응답 코드는 클라이언트는 요청을 마치기위해 추가 동작을 취해야한다.)
4xx: Client Error
클라이언트에 오류가 있음을 나타냄.
메시지 | 설명 |
400 Bad Request | 이 응답은 잘 못 된 문법으로 서버가 요청을 이해하지 못 했음을 의미. |
401 UnAuthorized | 클라이언트에서 보낸 요청이 서버에서 요구하는 어떠한 인증 프로세스에 적합하지 않았음을 알리는 응답 코드. |
403 Forbidden | 클라이언트가 콘텐츠에 접근할 권리가 없음을 알리는 응답코드. 401과 다른 점은 서버가 클라이언트가 누구인지 알때 보냄. |
404 Not Found | 클라이언트가 보낸 요청에 해당하는 리소스를 서버에서 찾을 수 없을때 보내는 응답 코드. 요청은 유효하지만 리소스는 존재하지 않음을 의미. |
401 응답 코드를 서버측에서 구현하려면 어떻게 해야할까요. 다른 응답 코드들도 마찬가지이지만, 스프링을 기준으로 간단하게 설명드리려고 합니다. 스프링에서는 별도 응답코드를 매핑하지 않으면 200 코드를 보내는데요. 401 코드는 인증이 유효하지 않았을 때 보내는 응답코드이기 때문에 별도의 구현이 필요합니다.
서버측에서는 클라이언트 요청에서 넘어온 파라미터를 통해서 유효한 요청인지를 검사하는 코드를 구현합니다. 그리고 그 코드 내부에서 유효하지 않았을때, @ResponseStatus 어노테이션의 value에 HttpStatus.UNAUTHORIZED를 매핑한 Exception클래스를 throw 합니다. 참고로 해당 Exception 클래스는 RuntimeException을 상속받는 것이 적합합니다.
이렇게 코드가 구현되어 있으면 요청이 유효하지 않았을때 Exception을 발생시키고 스프링 컨트롤러에서는 매핑한 401코드를 포함한 응답을 클라이언트측으로 보내게 됩니다.
5xx: Server Error
클라이언트의 유효한 요청을 서버 문제로 인해 처리하지 못했음을 나타냄.
메시지 | 설명 |
500 Internal Server Error | 서버에 오류가 발생하여 요청을 수행할 수 없음. |
503 Service Unavailable | 서버에 요청이 과부하가 되어 처리할 수 없는 상태가 되었거나, 서버가 중단된 상태일 때. |
클라이언트의 요청에 대해 서버측에서 503 에러를 보내는 경우에는 서버가 죽었거나 과부화된 상태인데요. 서버는 이미 요청을 처리할 수 없는 상태이기 때문에, 비즈니스 로직에서 개발자가 작성한 코드에서 응답된 코드가 아님을 짐작해볼 수 있습니다 (물론 의도적으로 보낼 수는 있음).
그렇다면 503 상태 코드는 어디서 나온걸까요? 답은 서버측 프레임워크 내부코드에서 발생시킨 에러 코드입니다. 그렇기 때문에 503 에러코드를 받았을때 개발자가 의도적으로 발생시킨 오류가 아니라면 라이브러리 또는 프레임워크 내부코드를 확인하면 관련 내용을 확인할 수 있습니다.
참고문서
'백엔드 기술면접 > 개념정리' 카테고리의 다른 글
[SOLID] 단일 책임 원칙(SRP) 개념정의 (0) | 2023.01.29 |
---|---|
[WEB] HTTP와 HTTPS 차이점 (0) | 2022.12.11 |
최근댓글