스프링 부트에서 컨트롤러 역할을 하는 클래스에 선언하는 @RestController
는 @Componet
처럼 취급한다. 이전 포스팅에서 @Componet
애너테이션이 선언된 클래스들을 찾아서 전부 빈으로 등록하는 역할을 하고 @Componet
애너테이션이 @RestController
를 감싸고 있다고 했다. 그래서 다른 두 개의 애너테이션이 어떻게 @Componet
역할을 하는지 얘기해보려고 한다.
라우터 역할을 하는 애너테이션으로 @RestController
애너테이션을 작성해야 요청에 맞는 메소드를 실행할 수 있다.
💡 라우터(router)
HTTP 요청과 메소드를 연결하는 장치를 말한다.
라우터란? -티스토리 링크
@RestController
public class BasicController {
@GetMapping("/test")
public String test() {
//매핑된 주소로 요청이 들어오면 실행할 로직 작성
return "test/test"; //test 폴더의 test.jsp 화면을 여는 응답
}
}
위와 같은 기본 컨트롤러 클래스에서 ctrl을 누른 상태로 @RestController
를 클릭하면 아래와 같은 코드를 확인할 수 있다.
@Controller
와 @ResponsBody
애너테이션이 함께 선언되어 있는 모습을 확인할 수 있는데 이는 @RestController
가 @Controller
와 @ResponsBody
를 포함하고 있다는 것을 알려준다.
여기서 @Controller
애너테이션에 ctrl을 누른 상태로 클릭해서 @Controller
애너테이션을 확인해보면 아래와 같은 코드를 확인할 수 있다.
코드를 보면 바로 알 수 있지만 @Controller
는 @Componet
애너테이션을 선언하고 있다. 앞서 포스팅했을 때 말했던 @Configuration
, @Repository
, @Controller
, @RestController
, @Service
애너테이션들은 전부 @Componet
애너테이션을 갖고 있는 애너테이션들이었다.
그래서 필요에 따라 어떤 애너테이션을 작성해도 빈으로 등록되어 스프링이 관리하게 된다. 애너테이션들의 이름은 해당 클래스를 빈으로 등록하면서 무슨 역할을 하는지 명확하게 구분하기 위해 나뉘어있다고 볼 수 있다.