스프링 부트 개발 과정에서 다양한 문제를 만나게 된다. 그 중, 템플릿 엔진(예시: 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 웹 서비스 생성에 주로 사용된다. 모든 메서드가 응답 본문에 데이터를 작성하는 형태로 동작한다.이러한 내용을 통해 스프링 부트에서의 컨트롤러 동작 방식과 그에 대한 정확한 어노테이션 선택의 중요성을 알 수 있다.