본문 바로가기
프로그래밍

[spring boot 2.1] 애노테이션 정리

by 탁구치는 개발자 2019. 8. 5.

스프링에는 수많은 애노테이션들이 존재한다.
스프링을 처음 접하는 개발자 또는 다른 언어를 사용하는 개발자들이 스프링을 접했을 때 공통적으로 하는 말은 "애노테이션이 왜 이렇게 많아?" 일 것이다.

나는 스프링을 2.x 부터 사용했다.
그래서 일까? 스프링이 업그레이드 되면서 추가된 애노테이션들에 대한 거부감이 없다.

각각의 애노테이션들이 어떻게 동작하는지를 이해하고 있기에 느끼는 생각인 것 같다.

스프링을 이용해서 개발하는 사람들 대부분이 알고 있듯이 애노테이션이 어떻게 동작하는지를 잘 이해하고 있다면 큰 어려움 없이 사용할 수 있고 좀 더 간결한 코드로 개발을 할 수 있다는 장점이 있다.
간결한 코드로 개발할 수 있다? 라는 말에 의문을 가질 수도 있다.
부연설명을 하면 DB 커넥션 설정 또는 WAS 설정등을 애노테이션 또는 yaml 파일로 간단하게 할 수 있다.
이는 "설정"과 "로직"의 분리라는 개념이 녹아져 있기 때문이다.

잘 동작하니깐 그냥 써야지가 아니라 각각의 애노테이션이 하는 역할과 책임이 무엇인지를 정확히 알고 있어야 문제가 발생했을 때 쉽게 이를 해결할 수 있다.

 

자~ 그럼 하나 하나 살펴보도록 하자.

@SpringBootApplication 애노테이션 class 를 들여다보면 다음과 같이 애노테이션이 선언되어 있는 것을 확인할 수 있다.

@SpringBootConfiguration

해당 클래스가 스프링 설정 파일이라는 것을 알려주는 의미이다.

@Target({ElementType.TYPE})

@Retention(RetentionPolicy.RUNTIME)

@Documented

@Inherited

@EnableAutoConfiguration
설정 자동 등록
보다 쉽게 프로젝트 구성을 할 수 있다.
스프링 부트에서 추가된 기능으로써 스프링 애플리케이션 컨텍스트를 생성할 때 필요한 설정을 자동으로 해준다.
예를 들어 tomcat-embed-core-9.0.17.jar 파일이 클래스패스에 존재하면 TomcatEmbeddedServletContainerFactory 를 등록한다.

@ComponentScan
스프링 빈을 탐색하는 애노테이션
지정한 위치 이하에 있는 class를 스캔해서 Bean으로 등록한다.
동일 패키지 선상에 있어도 스캔이 된다.
예를 들어 다음과 같은 구조로 프로젝트가 구성되어 있다고 하자.

package 구조

MyApplication 클래스가 위치한 곳의 하위 패키지가 있는 common, controller, service, repository 가 스캔이 된다.
또한 MyApplication 클래스가 위치한 패키지에 Test.class 가 존재한다면 해당 클래스도 스캔된다.

@Async

@EnableAsync

@SpringBootTest