500 Internal Server Error A generic error message, given when no more specific message is suitable. 해결방법

박지성 학부생·2024년 2월 8일
1

BackEnd Develop log

목록 보기
8/27

결론

  • java.lang.IllegalArgumentException: rawPassword cannot be null 에러가 발생한다.

    @RequestBody 안해줘서 생긴문제

설명

웹 개발 과정에서 500 Internal Server Error는 서버가 요청을 처리할 수 없을 때 반환하는 일반적인 오류 메시지다. 이 오류는 다양한 원인으로 발생할 수 있지만, 특히 자바 백엔드에서는 요청 처리 중 예상치 못한 예외가 발생했을 때 자주 보게 된다. 구체적인 오류 메시지가 없을 때, 개발자는 디버깅을 통해 문제의 원인을 찾아야 한다.

이 경우, java.lang.IllegalArgumentException: rawPassword cannot be null이라는 구체적인 예외가 발견되었다. 이는 클라이언트로부터 받은 데이터 중 rawPassword가 null로 넘어와 발생한 오류다. 문제의 원인은 클라이언트로부터 넘어온 데이터가 서버에서 제대로 파싱되지 않았기 때문이다.

원인: @RequestBody의 누락

스프링 부트에서 @PostMapping 어노테이션을 사용하여 POST 요청을 처리할 때, 클라이언트로부터 넘어온 JSON 데이터를 자바 객체로 변환하기 위해서는 @RequestBody 어노테이션이 필수다. @RequestBody가 없으면, 스프링은 요청 본문을 PostRequestDTO 객체로 자동 변환하지 못한다. 결과적으로, 객체의 필드는 초기화되지 않은 상태(null 포함)로 남게 되며, 이는 예외를 발생시킬 수 있다.

해결 방법

이 문제를 해결하기 위해선, 컨트롤러 메서드의 파라미터에 @RequestBody 어노테이션을 추가해야 한다. 이를 통해 스프링 프레임워크는 클라이언트로부터 받은 JSON 요청 본문을 PostRequestDTO 타입의 객체로 변환할 수 있다.

@PostMapping("/create")
public ResponseEntity<PostResponseDTO> createPost(@RequestBody PostRequestDTO createPostRequestDTO) {
    return ResponseEntity.ok(postService.createPost(createPostRequestDTO));
}

위 코드에서 @RequestBody 어노테이션을 createPostRequestDTO 파라미터에 추가함으로써, 클라이언트로부터 받은 JSON 데이터가 PostRequestDTO 객체로 올바르게 매핑될 수 있게 되었다. 이로써 rawPassword cannot be null과 같은 오류를 방지할 수 있다.

결론

500 Internal Server Error와 같은 일반적인 오류 메시지 뒤에 숨겨진 구체적인 문제를 해결하기 위해서는, 요청 처리 과정에서 발생하는 예외를 주의 깊게 살펴보는 것이 중요하다. 이 경우, @RequestBody 어노테이션의 누락이 원인이었으며, 이를 추가함으로써 문제를 해결할 수 있었다. 데이터 바인딩과 관련된 문제는 상대적으로 쉽게 해결할 수 있지만, 이를 위해서는 스프링 프레임워크가 요청 데이터를 어떻게 처리하는지 이해하는 것이 필수적이다.

profile
참 되게 살자

0개의 댓글