4xx - 클라이언트 오류, 5xx - 서버 오류

클라이언트 : 서버 = 사용자 : 웹 서비스 제공자

단순히 이렇게만 생각했는데 애플리케이션 - 웹 서버 이렇게 될 수도 있다!

그러면 애플리케이션이 클라이언트가 된다. 데이터를 요청하고 주고 받을 때 오류가 발생한다 클이언트 오류(앱 개발자)인지, 서버측 오류인지 명확히 해야한다.

4xx (Client Error) 클라이언트 오류

  • 클라이언트의 요청에 잘못된 문법등으로 서버가 요청을 수행할 수 없음

  • 오류의 원인이 클라이언트에 있음

  • 클라이언트가 이미 잘못된 요청, 데이터를 보내고 있기 때문에, 똑같은 재시도가 실패함⭐️

400 Bad Request 클라이언트가 잘못된 요청을 해서 서버가 요청을 처리할 수 없음

  • 요청 구문, 메시지 등등 오류

  • 클라이언트는 요청 내용을 다시 검토하고, 보내야함 ex) 요청 파라미터가 잘못되거나, API 스펙이 맞지 않을 때

401 Unauthorized 클라이언트가 해당 리소스에 대한 인증이 필요함

  • 인증(Authentication) 되지 않음

  • 401 오류 발생시 응답에 WWW-Authenticate 헤더와 함께 인증 방법을 설명

  • 인증(Authentication): 본인이 누구인지 확인, (로그인)

  • 인가(Authorization): 권한부여 (ADMIN 권한처럼 특정 리소스에 접근할 수 있는 권한, 인증이 있어야 인가가 있음)

  • 오류 메시지가 Unauthorized 이지만 인증 되지 않음 (이름이 아쉬움)

403 Forbidden 서버가 요청을 이해했지만 승인을 거부함

  • 주로 인증 자격 증명은 있지만, 접근 권한이 불충분한 경우 ex) 어드민 등급이 아닌 사용자가 로그인은 했지만, 어드민 등급의 리소스에 접근하는 경우

404 Not Found 요청 리소스를 찾을 수 없음

  • 요청 리소스가 서버에 없음

  • 또는 클라이언트가 권한이 부족한 리소스에 접근할 때 해당 리소스를 숨기고 싶을 때

5xx (Server Error) 서버 오류

  • 서버에 문제가 있기 때문에 재시도 하면 성공할 수도 있음(복구가 되거나 등등)

500 Internal Server Error 서버 문제로 오류 발생, 애매하면 500 오류

503 Service Unavailable 서비스 이용 불가

  • 서버가 일시적인 과부하 또는 예정된 작업으로 잠시 요청을 처리할 수 없음

  • Retry-After 헤더 필드얼마뒤에 복구되는지 보낼 수도 있음

  • 보통 서버 오류가 난다면 예상치 못하게 나기 때문에 503보다는 500이 발생한다고 한다.

비즈니스 로직상 클라이언트는 API 스펙에 맞게 서버에 요청을 보냈는데 5xx에러를 보내면 안 된다! 예를 들어 만 19세 이상 결제 가능한 상품이 있을 때, 만 15세인 고객이 상품 결제를 요청한 경우, 이것은 정상적인 흐름이므로 5xx에러를 내면 안 된다!

5xx 에러는 NullPointerException이나 DB에 오류가 있는 등 서버에 심각한 오류가 있을 때만 내야한다!

Last updated