Spring boot에서 Bean을 등록해서 사용하는 경우가 빈번하게 있지만 해당 등록하지도 않은 기본 라이브러리의 Bean들이 어떤 방식으로 등록 되는지 확인해 보았습니다.


상당히 많은 어노테이션들 이걸 어디다 쓰는지 확인해 보았습니다.
1. Target
해당 어노테이션을 적용 가능한 레벨을 정의 하기 위해 사용
- TYPE → 클래스, 인터페이스
- METHOD → 메서드
- FIELD → 필드 (변수)
- PARAMETER → 메서드 매개변수
- CONSTRUCTOR → 생성자
- LOCAL_VARIABLE → 지역 변수
- ANNOTATION_TYPE → 애노테이션 정의에만
- PACKAGE → 패키지 선언
- TYPE_PARAMETER → 제네릭 타입 매개변수
- TYPE_USE → 타입이 사용되는 모든 곳 (Java 8 이후)
2. Retention
해당 어노테이션이 언제까지 보존 되는지에 대한 정의
- SOURCE
- 컴파일 전에 사라짐
- IDE/컴파일러용 표시 (ex: @Override)
- CLASS (기본값)
- .class 파일까지 보존
- JVM 리플렉션에서는 보이지 않음
- 프레임워크가 런타임에 읽지 못함
- RUNTIME
- 런타임까지 살아 있음
- 리플렉션으로 읽을 수 있음
- 스프링 같은 프레임워크가 반드시 필요로 함
3. Documented
JavaDoc에 표시되는 내용을 코드상에 지정하기 위해 사용
- 예시
- @Deprecated
- @Override
- @FunctionalInterface
- @Controller, @Service, @Autowired 등
4. Indexed
프로젝트 내에 모든 annotation을 등록 할때 classPath를 스캔하지 않고 Indexed로 등록된 후보군을 빠르게 찾아내어 런타임 시점에 해당 class를 실행해주기 위해 spring 5부터 도입
5. SpringBootConfiguration
SpringBoot의 root 설정이 되는 annotation 즉 이 프로젝트의 시작점을 나타내지만 spring boot init 프로젝트를 ide나 공식사이트에서 생성하는 경우에는 사용할 필요가 없음
6. EnableAutoConfiguration
Spring boot가 처음 빌드 되는 경우 기본적으로 설정할 bean 정보들을 가져오는데 해당 라이브러리 등을 여기서 등록처리 되

서버가 빌드되어 올라오는 시점에 META-INF 파일의 *.imports 파일의 내용들을 기준으로 빌드 되는걸 확인 가능한데 이러한 패키지들은 spring boot에서 maven, gradle에 import 되어 있지 않아도 자체적인 검증과 proxy들을 생성하기 위한 기초 단계라고 합니다.
References.
'Spring Boot > etc' 카테고리의 다른 글
| Spring 개발자의 FastAPI 찍먹기: URL 단축기 프로젝트 (0) | 2026.01.07 |
|---|---|
| Spring boot 3.0 Pre-Update 내용 정리 (1) | 2022.11.14 |
| [Spring boot] FilterRegistrationBean - url 패턴으로 Filter 설정 (0) | 2022.08.10 |
| [Spring boot] url query string 안 보이게 처리하기 (0) | 2022.08.09 |
| [Spring Boot] profile 지정하여 실행하고자 할때 (0) | 2022.02.16 |