본문 바로가기
Programming/Study

HTTP PUT 메서드로 자원을 수정할 때의 응답 : 200 vs 201 vs 202

by JKROH 2023. 11. 27.
반응형

 수정 메서드를 작성하면서 PUT을 사용하기로 결정한 뒤로 HTTP 응답 상태 코드에 대한 고민은 크게 하지 않았는데, 이번에 해당 기능을 구현하면서 고민을 좀 했다. 200이 맞을까, 201이 맞을까, 아니면 202가 맞을까? 관련해서 상태 코드에 대한 공부도 겸할 수 있었다.

 

 여러 자료와 글들을 읽어보았고, 을 통해 나름대로 해답을 내렸다. 아무튼 수정이 잘 되면 200을 보내는게 맞다.

 

 200은 말 그대로 OK다. 서버에서 '그래그래 형이야. 형은 실제로 클라이언트가 요청한 일을 전부 처리했어.' 라고 하면 200 OK를 보낸다. 이 과정에서 새롭게 생긴 자원이 있으면 안된다. 새롭게 생긴 자원이 있으면 201로 넘어간다.

 

 201은 CREATED다. 일단 앞까지는 똑같다. '그래그래 또 형이야. 형은 또 실제로 전부 처리했어.' 하고 보니 뭔가 만들어진 게 있다? 싶으면 201을 보낸다. '이렇게 전부 처리하고나니 새삼 새롭게 무언가를 또 만들어낸 서버가 문득 대단하게 느껴지네...'의 의미를 내포하고 '나 뭐 만들어냈으니까. 알아둬라'라는 뜻으로 201 CREATED를 보낸다.

 

 여기까지 보면 수정을 완료했을 때 200과 201 중 200을 선택해야함을 판단할 수 있다. PUT은 '대체'하는 메서드다. 기존의 A자원의 모든 값들을 A'으로 대체한다. 대체한다고 새로운 자원이 생기나? 그건 아니다. A -> A'이 될 뿐, B라는 새로운 자원이 생기는 건 아니다. 그래서 200과 201 중 선택하라면 200을 선택해야 한다.

 

 그런데, 202는 어떨까? 202는 ACCEPTED다. 말만 보면 사용자의 요청을 수락했다고 보니 나름 말이 된다. 그런데, 여기에는 한 가지 큰 함정이 있다. 수락했다는 말은 수행했다는 말은 아니다. 실제로 202를 사용해 응답을 보낼 때는 '일단 요청은 수락했는데, 이걸 아직 수행하지는 않았을 때'다.

 

 이렇게 보고 나면 202는 수정이 완료됐을 때 사용하는 것은 부적절해 보인다. 수정 처리가 완료되었는데, 202는 완료하지 않았다는 의미니까 말이다. 그래서 결론은 수정에 대한 응답 상태 코드는 200 OK가 되어야 한다.

 

 그런데 202는 대체 왜 존재할까? 다음에 공부해 볼 내용은 202는 왜 존재하며, 언제 사용하는지 유즈 케이스 탐방으로 정했다.

반응형

댓글