이전에 Step3. 인터페이스에서 어노테이션에 대해서 설명할 때
"코드 실행시 컴파일러에게 특별한 정보를 전달하는데 사용된다"라고 설명했었다.
스프링에서 어노테이션은 주로 클래스, 메서드, 필드 등의 요소에 부가적인 정보를 제공하고, 작업을 지시하거나 DI, AOP(Aspect-Oriented Programming)등의 기능을 지원하기 위해 사용된다.
스프링에서는 다양한 어노테이션을 제공하며, lombok라이브러리를 사용하여 어노테이션을 통해 컴파일 시점에 자동으로 코드를 생성할 수도 있다.(ex. 모든 필드의 getter를 작성하기보다 @getter를 사용하여 컴파일 시점에 자동으로 코드를 생성하도록 함)
이 어노테이션들 중에서 많이 쓰이는 어노테이션들에 대해서 간단하게 알아보자.
DI를 구현하기 위한 핵심적인 어노테이션이다.
Bean을 자동으로 주입한다.
Bean으로 등록되는 클래스의 종류를 나타낸다.
@Component는 알반적인 Bean, @Service는 비즈니스 로직을 처리하는 Bean
@Repository는 데이터 엑세스 처리를 위한 Bean, @Controller는 웹 요청을 처리하는 클래스 Bean을 나타낸다.
특정 uri로 웹 요청을 보냈을 때 Controller에서 어떠한 방식으로 처리할지 정의를 한다.
이때 들어온 요청을 특정 메서드와 매핑하기 위해 사용되는 어노테이션이다.
HTTP GET 요청을 처리하는 메서드에 적용된다.
이 어노테이션은 특정 URL 경로에 대한 GET 요청을 처리하는 메서드를 지정하는데 사용된다.
HTTP POST 요청을 처리하는 메서드에 적용된다.
이 어노테이션은 특정 URL 경로에 대한 POST 요청을 처리하는 메서드를 지정하는데 사용된다.
해당 메서드가 부모 클래스(혹은 인터페이스)에서 정의된 메서드를 Override되었다는것을 나타낸다.
Bean을 정의하는 메서드에 사용되며, 해당 메서드가 반환하는 객체를 스프링 컨테이너에 Bean으로 등록한다.
해당 클래스가 스프링 설정파일임을 나타내거나 Bean을 등록하기 위한 어노테이션이다.
1개 이상의 @Bean을 제공하는 클래스의 경우 반드시 @Configuration을 명시해야 한다.
Get 방식의 웹 요청에서 파라미터를 메서드 배개변수에 바인딩하기 위해 사용되는 어노테이션이다.
웹 요청이 발생할 때, 클라이언트가 전달하는 쿼리의 파라미터 같은 정보를 Controller 메서드의 매개변수로 받을 때 사용된다.
트랜잭션 처리를 위해 사용되며, 메서드나 클래스에 트랜잭션을 적용한다.
Bean의 스코프를 지정한다.
기본값은 Singleton이며, Prototype, Request 등의 다양한 스코프를 사용할 수 있다.