Java/Spring

[Spring] SpringBoot에서 @RestController의 역할

jwKim96 2021. 10. 5. 20:35

최근 SpringBoot를 공부하던 중에 Controller에 @RestController만 붙였는데 어떻게 ResponseBody를 JSON으로 자동 변환해주는지 문득 궁금하여 찾아보게 되었다.

혹시 Jackson이?

예전에 Spring을 공부할 당시, Jackson 라이브러리를 사용해서 ResponseBody를 JSON 형태로 변환했던것이 기억 났다.

확인해 보니 역시 그랬다.

springboot-starter-web이 참조하는 라이브러리 중에서 spring-boot-starter-json 이라는 라이브러리가 jackson을 사용하고 있었다.

참조하는 라이브러리 중 핵심이 되는 것들은 다음과 같다.

  • jackson-databind : jackson-core 인터페이스 구현체로, jackson의 핵심 기능을 구현함.
  • jackson-datatype-jdk : jackson 애드온 모듈로, JDK의 데이터 타입을 지원하기 위한 모듈.
  • jackson-datatype-jsr310 : jackson 애드온 모듈로, Java의 Date & Time API 를 지원하기 위한 모듈.

Annotation

그리고 Controller에서 반환하는 값이 View의 이름인지 ResponseBody인지 설정을 해주어야하는데, 이 설정은 @RestController에 함께 붙어있다.

@RestController 어노테이션을 따라가보면, 위 사진처럼 RestController의 내부에 @Controller, @ResponseBody와 같은 어노테이션이 이미 붙어있기 때문에, @Controller빈으로 설정함과 동시에 해당 빈의 모든 메소드의 리턴값을 ResponseBody로 설정하게 되는것이다.

  • @Target(ElementType.TYPE) : 내가 선언한 어노테이션이 어떤 형식에 적용될 것인지를 설정(클래스 단위에 적용)
  • @Retention(RetentionPolicy.RUNTIME) : 해당 어노테이션을 언제까지 메모리에 올려놓을건지(런타임까지 메모리에 적재)
  • @Documented : javadoc에 의해 문서화가 되도록 하기위해 붙임
  • @Controller : 해당 클래스를 Bean으로 등록하고, Controller로서 사용된다는 것을 명시
  • @ResponseBody : 리턴되는 값이 HTTP Response Body에 쓰여서 반환됨