2024.06.20 - [Spring] - [SpringBoot] 스프링부트 프로젝트 시작하기 - 3. Validation 이용하여 예외처리하기
[SpringBoot] 스프링부트 프로젝트 시작하기 - 3. Validation 이용하여 예외처리하기
@Datapublic class MemberRegisterRequest { private String loginId; private String password; private String email; private String name; private LocalDate birthDate;}위 코드는 회원가입 시 Request로 받는 데이터이다. 보통의 데이터베이
ng-log.tistory.com
위의 글을 작성하면서 Response에 대한 의문이 생겨 해당 포스팅을 하루종일 작성하는 사태가 발생하였다.
이전의 포스팅을 하면서도 의문을 가졌던 주제였는데 개발하기에 급급하여 그냥 맞춰서 구현했다가 이번에 여러 자료를 찾아보게 되었다.
위 포스팅에서 Response를 아래와 같은 형태로 작성하였다.
{
"dataHeader": {
"successCode": 1,
"resultCode": "200 OK",
"resultMessage": "정상 처리 되었습니다."
},
"data": "가입되었습니다.",
"error": null
}
나의 의문점은 successCode가 1이면 resultCode는 당연히 200이고, resultMessage는 무족건 정상 처리가 되었다는 결과가 나오게 된다.
반대로 successCode가 0이면 resultCode는 400이 되고, resultMessage는 에러가 발생되었다는 결과인데 왜 굳이 같은 의미를 3개나 쓰는 것인가였다.
그리고 resultCode를 통해 상태코드를 반환하게 된다면 400으로 반환할때도 http 상태코드는 200으로 보내야하는가, HttpStatus를 다루면 굳이 responseBody에 상태코드를 또 작성하는 이유는 무엇인가도 궁금하였다.
그러면서 다양한 Response의 형태를 찾아보게 되었다.
1.
{
"resultCode": "SUCCESS",
"resultMessage": "정상 처리 되었습니다.",
"data": ""
}
2.
{
"resultCode": "400",
"resultStatus": "Bad Request",
"message": "ERROR",
"data": {
"ID": "중복된 아이디입니다."
}
3.
{
"resultCode": "400",
"resultStatus": "Bad Request",
"message": "중복된 아이디입니다.",
"data": null,
"api": "api/member/signup",
"method": "POST",
"requestBody": {
"id": "id"
}
}
전부 다 작성할 순 없지만 간략한 코드도 있었고, 마지막 코드처럼 요청들어온 api와 method, 사용자가 작성한 내용을 전부 다시 반환하여 보여주는 코드도 있었다.
찾아본 결론은 결국 명확한 정답은 존재하지 않는다는 것이다. 각 서비스마다, 개발자, 팀마다 저들만의 규칙을 정하고 사용한다는 것이었다. 굳이 상태 코드와 메시지를 사용하는 이유도 서버에서 클라이언트가 처리하기 위해 반환한다는 이유도 있고, 사용자에게 에러메시지를 알려야 할 경우가 있기 때문도 있다고 한다.
하지만 하직도 의문이 해결되지는 않았다.
통신 코드를 제외하고도 서비스단에서 HttpStatus를 다뤄 반환하는것은 납득이 되지만 error가 발생한다면 해당 에러메시지를 반환하는데 왜 Message 필드가 존재하여 SUCCESS/ERROR를 적어주는 것인지@_@
BadRequest, "중복된 아이디가 존재합니다"가 반환되는데 왜! `"message": "ERROR"`가 존재하는가
형태에 대한 명확한 답은 없을거라 예상했고 받아드리지만, message는 왜 사용하는가. message에 "중복된 아이디가 존재합니다"를 적는게 아니라 왜 SUCCESS/ERROR를 적는건데...?🙄