Study/Spring

[Spring] 200 vs 204 vs 404

dev_kong 2023. 4. 24. 14:08
728x90
728x90

자동차 미션 2단계를 진행하면서, 전체 저장내용을 불러오는 기능을 구현해야 했다.

그런데, 만약 저장된 게임이 없다면 응답을 어떻게 줘야할까?

NoContent vs Empty List

status code 204(no content)의 존재를 어디선가 주어 들어서 알고는 있었다.
말그대로 응답할 콘텐트가 없다는 뜻이니, 이걸 사용하면 좋겠다란 생각이 들어서 해당 status코드를 이용하여 응답을 주었다.

 

@GetMapping("/plays")
public ResponseEntity<List<ResultDto>> getResults() {
    List<ResultDto> allResults = gameService.getAllResults();
    if (allResults.isEmpty()) {
        return ResponseEntity.noContent().build();
    }
    return ResponseEntity.ok().body(allResults);
}

 

그런데 리뷰어가 noContent를 사용한 이유를 물어보았다.


사실 status를 쓸때 조금 찜찜함이 있었는데, 리뷰어가 한번 짚어주신 김에
상황에 따라 어떠한 status code를 사용하는 게 좋을지 알아보았다.

 

204를 사용하는 경우

우선 204에 대해 알아보았다.


204 같은 경우는 성공적인 부재를 위해서 사용되지 않는다.

 

성공적인 부재라는 말이 좀 애매한것 같아서 나름 정리를 해보자면,
쿼리문이 정상적으로 동작하였으나, 해당 쿼리에 대한 결과가 없는 경우를 말한다.

 

예를들어 위와같이 전체 결과를 조회하는데 저장된 데이터가 아예 없는 경우,
또는 일부의 데이터를 조회하였는데(ex.. 게시판 제목 검색) 일치하는 데이터가 없는 경우가 그것이다.

 

그럼 204 코드를 사용하는 경우는 무엇일까?


204 같은 경우는 쿼리가 정상적으로 동작하였는데, 응답에 콘텐츠의 내용을 굳이 포함시키지 않아도 되는 경우 사용한다고 한다.

 

서비스에 따라 다르겠지만, 예를 들어보자면,
데이터의 삭제가 성공적으로 이뤄졌을 때, 삭제된 데이터를 다시 응답으로 반환해주지 않아도 된다면,
204를 이용하여 응답하면 된다.

 

200을 사용하는 경우

지금 같이 성공적인 부재를 위해서는 200을 사용하는 것이 일반적이라고 한다.
그리고 response body 에는 빈 리스트를 반환하는 것이 일반적.

 

404를 사용하는 경우

404는 하나의 결과를 pk(또는 인덱스)를 통해서 조회 할 때 일치하는 데이터가 없는 경우 사용하는 것이 일반적이라고 한다.
예를 들어, 게시글을 클릭한 경우 요청하는 주소가 다음과 같다.

 

abc.com/board/123

 

게시글의 pk가 123이고, 프론트는 123번 글에 대한 데이터를 요청한다.
서버는 123번 글에대한 데이터를 reponse body에 담아 응답해준다.

 

그런데 만약 사용자가 주소창에 직접 abc.com/board/124로 입력을 했는데,
해당 pk에 해당하는 글이 없는 경우에는 서버에서 404를 통해 응답하는 것이 일반적이다.

 

사실 정답은 아님

위에서 세가지 스테이터스 코드를 사용하는 경우에 대해 알아보긴 했는데, 사실 정답은 아니다.
해당 내용을 검색해보면 여기저기 이게 맞다 저게 맞다 논쟁중인 이슈다.

 

내가 정리한 내용은 중론을 정리한 것일 뿐 정답은 아니다.

 

어떠한 팀에 소속되는 경우는 당연히 팀의 컨벤션을 따르는게 우선이지 않을까 싶다.
그래도 혼자 작업하는데에 있어서는 어느정도 기준을 정하는데 도움이 될꺼라 생각한다.

728x90
728x90