Spring Boot의 @Controller와 @RestController: 차이점 및 관련 오류 대응

song yuheon·2023년 8월 31일
0

Trouble Shooting

목록 보기
7/57
post-thumbnail

스프링 부트 개발 과정에서 다양한 문제를 만나게 된다. 그 중, 템플릿 엔진(예시: Thymeleaf)과 관련된 오류는 @Controller@RestController의 차이점을 명확히 인지하지 못함으로 인해 발생하는 경우가 많다.


문제 상황 개요:

다음과 같은 오류 메시지가 개발 과정에서 발생했다:

org.thymeleaf.exceptions.TemplateInputException: Error resolving template [api/user/signup], template might not exist or might not be accessible by any of the configured Template Resolvers

이와 관련하여, 개발 코드는 아래와 같이 구성되었다:

@PostMapping("/user/signup")
public SignReturn signup(@RequestBody UserDto requestDto) {
    userService.signup(requestDto);
    return new SignReturn("회원가입 성공",200);
}

오류 원인 분석:

이 오류는 @Controller 어노테이션이 컨트롤러에 적용되었기 때문에 발생한 것으로 판단된다. 스프링 부트는 @Controller가 적용된 컨트롤러에서 반환되는 문자열을 뷰의 이름으로 인식하며, "api/user/signup" 뷰를 찾지 못해 해당 오류가 발생했다.


해결 전략:

이 문제를 해결하기 위해 @Controller 어노테이션을 @RestController로 변경했다. @RestController@Controller@ResponseBody의 기능이 결합된 어노테이션이다. 따라서 반환되는 객체를 응답 본문에 직접 작성한다. 결과적으로, SignReturn 객체는 JSON 형태로 변환되어 클라이언트에 반환되었다.


핵심 포인트:

  • @Controller: 웹 페이지 반환에 주로 사용된다. 데이터를 JSON, XML 등으로 반환하고자 할 때는 @ResponseBody를 함께 사용해야 한다.
  • @RestController: RESTful 웹 서비스 생성에 주로 사용된다. 모든 메서드가 응답 본문에 데이터를 작성하는 형태로 동작한다.

이러한 내용을 통해 스프링 부트에서의 컨트롤러 동작 방식과 그에 대한 정확한 어노테이션 선택의 중요성을 알 수 있다.


profile
backend_Devloper

0개의 댓글