4xx ( Client Error ) 클라이언트 오류
400 Bad Request 클라이언트가 잘못된 요청을 해서 서버가 요청을 처리할 수 없음
401 Unauthorized 클라이언트가 해당 리소스에 대한 인증이 필요함
인증은 단순히 로그인 할수있다 없다정도 인가는 리소스에 접근할수 있는 권한이 있는지 없는지에 대한 등급
403 Forbidden 서버가 요청을 이해했지만 승인을 거부함
404 Not Found 요청 리소스를 찾을 수 없음
5xx (Server Error) 서버오류
500 Internal Server Error 서버 문제로 오류 발생 , 애매하면 500오류
503 Service Unavailable 서비스 이용 불가
400에러는 클라이언트쪽 특히 스펙을 잘못 맞추거나 인증이 안된 케이스가 많고
500에러는 서버 내부에 뭔가 문제가 있는 상황이다.
여기서 조심해야할 사항은 서버에서 웬만하면 500대 에러를 만들면 안된다 진짜 서버에 문제가 터졌을때 500대 에러를 생성해야한다.
예를들어 비지니스 로직상 비즈니스 고객의 요청 api스펙도 맞고 서버까지 다 들어왔는데 고객의 잔고가 부족한 상황이라면 500에러를 발생하면 안된다. 혹은 20세 이상부터 구매가능한 물건인데 20세 이하인 고객이 물건을 주문하는 경우에도 500에러를 내면 안된다.
왜냐하면 500에러는 진짜 서버에 문제가 있을때 내는것이다. **보통 모니터링 툴 같은 것들도 500오류가 발생하면 서버에 심각한 오류가 있다고 보고 모니터링을 한다. **
2번째 상황인 20세 이하 고객이 들어온 상황은 정상프로세스 상황인것이다.
비즈니스 로직상의 예외케이스이기 때문에 500에러를 생성하면 안되고 서버내부적 문제 쿼리의 문제,null포인트 인셉션 , db가 다운되는 이런 상황일때 500에러를 내야한다.
그외는 400이나 200으로 해결하는것이 바람직한 방법이다!