[꼼꼼한 개발자] 꼼코더
22. 모든 개발자를 위한 HTTP 웹 기본 지식 - [HTTP 상태코드] - 4xx(클라이언트 오류), 5xx(서버 오류) 본문
⛔️ 4xx (Client Error) 클라이언트 오류
오류의 원인이 클라이언트에게 있다. ex) 클라이언트의 잘못된 문법으로 요청
(중요!) 클라이언트가 이미 잘못된 요청, 데이터를 보내고 있으므로 재시도해도 실패함
🤦🏻♂️ 400 Bad Request
클라이언트가 잘못된 요청을 해서 서버가 요청을 처리할 수 없음
- 요청 구문, 메시지 등 오류
- 클라이언트는 요청 내용을 재검토 후 보내야 함
- 요청 파라미터가 잘못되거나, API 스펙이 맞지 않을 때(문자를 보내야 되는 숫자를 보낸 경우)
✅ 401 Unauthorized
클라이언트가 해당 리소스에 대한 인증이 필요함
- 인증이 되지 않아 생긴 오류
- 해당 오류(401) 발생시, 응답에 WWW-Authenticate 헤더와 함께 인증 방법을 설명해야 한다.
(참고) 오류 메시지는 Unauthorized이지만 실제로는 인증이 되지않아 생긴 오류이다.
인증(Authentication) : 본인이 누구인지 확인하는 과정이다.
인가(Authorization) : 특정 리소스에 접근할 수 있는 권한이 있는 사람만 볼 수 있는 권한 부여이다.
오류메세지가 Unauthorized이지만 인증 자체가 안된다는 뜻이다.
🙅🏻♂️ 403 Forbidden
서버가 요청을 이해했지만 승인을 거부함
- 주로 인증은 됐지만 접근 권한이 불충분한 경우
- 어드민 등급이 아닌 사용자가 로그인은 했지만, 어드민 등급의 리소스에 접근하는 경우에 발생
🤷🏻♂️ 404 Not Found
요청 리소스가 서버에 없는(찾을 수 없는) 경우
- 클라이언트가 권한이 부족한 리소스에 접근할 때 해당 리소스를 숨기고 싶은 경우에
❌ 5xx (Server Error)
서버 오류
- 오류의 원인 = 서버 (e.g. NullPointerException, DB 접근 불가)
- 서버에 문제가 있는 경우 이므로 재시도시 요청에 성공할 수도 있음
(참고) 왠만하면 5xx 오류는 내면 안된다. 정말 심각한 서버 오류가 있을 때만 5xx 오류를 내도록 한다.
😨 500 Internal Server Error
서버 문제로 오류 발생
- 애매하면 500 오류라고 알아두자.
🙇🏻♂️ 503 Service Unavailable
서비스 이용 불가
- 서버가 일시적인 과부하/예정된 작업으로 잠시 요청을 처리할 수 없음
- Retry-After 헤더 필드로 얼마뒤에 복구되는지 보낼 수 있음
🙋🏻♂️ Q&A
Q. 20세 이상에게만 제공하는 서비스에 15살이 들어온 경우, 5xx가 아닌 어떤 에러를 출력해야하나요?
A.
- 클라이언트와 서버가 서로 약속한 HTTP API 스펙을 만족하면 -> 200, 만족하지 않으면 -> 400
- 비즈니스 로직이 정상 수행되지만 다양한 결과가 존재하는 경우(승인, 거절 등) -> 200 + 비즈니스 코드 반환(봉투 패턴)
- 비즈니스 로직을 수행하다가 내부에서 시스템 예외나 NullPointerException 등 비즈니스와 관계없는 시스템 예외 발생 -> 500
(참고) 다양한 비즈니스 응답이 있는 복잡한 비즈니스 로직이 있는 HTTP API는 봉투 패턴 고려,
비즈니스 로직이 거의 없는 단순한 조회는 봉투 패턴 고려X
[출처] https://www.inflearn.com/questions/111465
Q. 구글에서 검색해서 나온 페이지를 클릭해 들어가면 404 Not Found가 뜨는 경우는 리소스가 있는데 리소스를 숨기는 건가요?
A. 이 경우는 대부분 검색 엔진이 크롤링 하는 단계에서는 리소스가 있었는데, 이후 리소스가 사라져 404 Not Found가 뜨는 것이다.
[출처] https://www.inflearn.com/questions/152077
200 vs 400
[참고] https://brainbackdoor.tistory.com/137
참고 : https://hseungyeon.tistory.com
위 자료는 김영한님의 ‘모든 개발자를 위한 HTTP 웹 기본 지식’ 강의를 참고하여 작성하였습니다.
https://www.inflearn.com/course/http-웹-네트워크/dashboard
'HTTP' 카테고리의 다른 글
24. 모든 개발자를 위한 HTTP 웹 기본 지식 - [HTTP 헤더1 - 일반 헤더] - 표현 (0) | 2022.12.02 |
---|---|
23. 모든 개발자를 위한 HTTP 웹 기본 지식 - [HTTP 헤더1 - 일반 헤더] - HTTP 헤더 개요 (0) | 2022.12.01 |
21. 모든 개발자를 위한 HTTP 웹 기본 지식 - [HTTP 상태코드] - 3xx - 리다이렉션 2 (0) | 2022.11.29 |
20. 모든 개발자를 위한 HTTP 웹 기본 지식 - [HTTP 상태코드] - 3xx - 리다이렉션 1 (0) | 2022.11.24 |
19. 모든 개발자를 위한 HTTP 웹 기본 지식 - [HTTP 상태코드] - 2xx (0) | 2022.11.23 |