얼마 전, 검색 기능 구현을 하다가 GET 메서드에 RequsetBody를 사용하게 되었었는데, 그렇게 하면 안된다는 피드백을 들었다.
왜 그런걸까? 하며 리팩토링 진행하면서 가볍게 안되는 이유를 정리해보기로 했다.
RequestBody
가 안 되는 이유RequestBody는 길이제한도 없고, 본문이기 때문에 위의 특징들과 합쳐지면 위험한 합주가 시작될 것이다.
RequestBody
를 사용하면 안 되는 이유캐싱 문제
일단 캐싱이 가능하다면 값이 임시저장된다는 의미와 동일한데, 사용자가 입력한 정보가 임시저장 된다는 건 보안상 매우 안 좋은 사례가 될 듯 하다.
브라우저 히스토리 및 보안 문제
그리고 기록이 남은 것도 마찬가지다. 검색 한 번 하려 한건데 내가 뭐라고 검색했는지까지 브라우저에 남아버린다는 얘기이기 때문이다.
북마크 가능성
GET의 북마크에는 URL만이 저장된다. 이로하여금 검색 내용을 알 수 있게 해야하는데, 본문이 있다면 북마크에 저장된 URL로는 내용을 알 수 없어서 GET의 특성과 맞지 않게 된다.