서론
이번 프로젝트는 특히 코드, 네이밍, 구조에 신경을 많이 쓰면서 개발을 하다 보니 기존에 했던 방식에 의문이 생겼다.
로그인 시에 사용자가 입력한 id를 백 단에서 조회할 때 해당 id가 없다면, 해당 id가 없다는 것을 성공적으로 확인했으니 클라이언트에게 status code를 200(ok)으로 응답하는 게 맞는 걸까? 아니면 해당 id가 없기 때문에 404(not found)로 응답하는 게 맞는 걸까?
영한님 강의에서도 200을 던지는 것도 방법 중 하나라는 것을 얼핏 들었던 것 같기도 하고 서버에서 정상적으로 처리를 한 것이기 때문에 200을 던져도 무방하다고 생각은 했지만 뭔가 찝찝해서 이번 기회에 개발 오픈 채팅방에 물어봤다.
200인가 404인가
질문을 잘..한 것 같진 않지만 뭐 XY 문제는 피했다고 생각한다.
첫 번째 답변에서 얻을 수 있는 것은 사람마다 다르다는 것이었다. 세분화를 많이 시켜놓은 곳도 있고 그렇지 않은 곳도 있다는 것이다.
이 분은 http status code 정의대로 404를 줄 것 같다고 하셨다.
사실 소마에서 했던 프로젝트 때도 404를 주긴 했어서 역시 404가 맞는 건가..? 싶었다.
그러던 중 다른 분께서 의견을 하나 더 주셨다.
해킹 방지를 위해 에러 시 무조건 404를 주는 데도 있다고 한다.
오히려 세세하게 코드를 줄 때는 보안 상으로 문제가 생길 수도 있다는 답변이었다.
실제로 공격을 몇 번 받아보셨다고,,
한 분이 의견을 더 주셨다.
윗 분과 비슷하게 세분화를 하지 않고 성공 or 실패 정도로만 던져주라고 하셨다.
재밌었던 포인트는 UX와 보안의 연관성이었다.
UX를 위해 세분화된 정보를 던져주는 게 오히려 보안 상 문제를 일으킬 수 있다는 사실이 흥미로웠다.
결론
200을 쓰던 404를 쓰던 상관은 딱히 없어 보이긴 한다. 어쨌든 status code라는 것을 통해 클라이언트와 소통하는 것이기 때문에 우리 팀이 정하기 나름이라는 게 결론인 것 같다.
내가 느꼈던 포인트는 클라이언트 쪽에서 너무 세분화된 정보를 주지 않는 것이 보안 상으로 좋다는 것인데, 그렇다면 404 같은 구체적인 status code 보다는 200으로 보내고 그 안에서의 status를 true, false 정도로만 주는 것이 합리적이라고 생각했다.
'BE > Spring Boot' 카테고리의 다른 글
Open ID Connect 으로 구글 로그인 구현하기 (feat. SpringBoot) (1) | 2023.11.02 |
---|---|
Jwt와 Interceptor 사용 시 CORS 에러가 발생하는 이유 (0) | 2023.06.09 |
Spring Boot + Docker로 배포하기 (0) | 2022.07.24 |
REST API와 flutter sdk를 이용한 카카오 로그인의 차이점 (0) | 2022.07.07 |
의존관계 주입 (2) | 2022.03.20 |