저번에 어노테이션 중 @Component와 하위 어노테이션인 @Controller, @Service, @Repository에 대해 알아봤다면, 이번에 Main에 있는 어노테이션. @SpringBootApplication에 대해 알아볼 것이다.
어노테이션이란?
간단하게 어노테이션이 무엇인지, 스프링에서 어떤 역할을 하는지 알아보면,
과거 스프링은 XML 파일로 설정을 관리했지만, 지금은 어노테이션 덕분에 코드 그 자체에 설정을 직관적으로 남길 수 있게 되었다.
스프링에서 어노테이션(Annotation)은 코드에 @ 기호를 붙여서 프로그램에 추가적인 정보를 제공하는 메타데이터(Metadata)이다.
| 구분 | 설명 |
| 장점 | 코드의 간결성과 생산성 향상. 직관적인 설정으로 높은 가독성 제공. 구조적 유연성. |
| 단점 | 설정의 분산으로 전체 구조를 파악하기 어려움. 코드 침투로 프레임워크 의존성 발생. 수정 시 재컴파일 필요. |
@SpringBootApplication 어노테이션
@SpringBootConfiguration
- 의미: "이 클래스는 설정 파일이야!"
- 역할: 기존 스프링의 @Configuration과 동일하다. 이 클래스 안에서 @Bean을 정의하거나 스프링 설정을 할 수 있다는 뜻이다. 스프링 부트 애플리케이션의 설정 중심지 역할을 한다.
@EnableAutoConfiguration
- 의미: "필요한 설정을 내가 알아서 자동으로 해줄게!"
- 역할: 프로젝트에 추가된 라이브러리(Jar 파일)들을 보고 필요한 설정을 자동으로 세팅한다.
- 예시: spring-boot-starter-web 라이브러리가 보이면? → "아, 웹 애플리케이션이네? 톰캣(Tomcat) 서버 띄우고 스프링 MVC 설정해 줄게."
- 예시: H2 Database 라이브러리가 보이면? → "DB 연결이 필요하네? H2 데이터소스 자동으로 잡아줄게."
@ComponentScan
- 의미: "내 주변에 있는 빈(Bean)들을 싹 다 찾아서 등록해!"
- 역할: @Component, @Service, @Repository, @Controller 등이 붙은 클래스를 찾아서 스프링 빈으로 등록한다.
- 주의점: 기본적으로 이 어노테이션이 붙은 클래스가 위치한 패키지와 그 하위 패키지만 뒤진다.
- 그래서 보통 Application 클래스를 프로젝트의 최상위 루트 패키지에 두는 것이다.
그럼 왜 이렇게 구조로 만들었을까?
과거(레거시 스프링)에는 이 3가지를 개발자가 일일이 설정했어야 실행할 수 있다.
- 설정 클래스 만들고 (Configuration) 어떤 패키지를 스캔할지 경로 지정하고 (ComponentScan) 톰캣 설정, DB 설정 등 수많은 설정을 직접 코드나 XML에 적어야 했다.
하지만, @SpringBootApplication은 이 모든 과정을 단 한 줄로 끝내버리기 위해 등장했고 덕분에 개발자는 비즈니스 로직에만 집중할 수 있게 된 것이다.
만약, 자동 설정이 필요없을 경우
@SpringBootApplication(exclude = {DataSourceAutoConfiguration.class})
public class MyApplication {
public static void main(String[] args) {
SpringApplication.run(MyApplication.class, args);
}
}
DB 자동 설정이 필요 없을 경우 위의 코드를 추가하면 된다.
- exclude 속성: @EnableAutoConfiguration이 너무 똑똑해서 굳이 안 해도 될 설정까지 하려고 할 때, 특정 설정을 제외할 수 있다.
'Daily Dev Q&A 정리 템플릿' 카테고리의 다른 글
| 26.01.01 session로그인방식과 token로그인 방식 (0) | 2026.01.01 |
|---|---|
| 25.12.31 Spring Security의 인증과 인가에 대해. (0) | 2025.12.31 |
| 25.12.29 spring의 예외처리방식 (0) | 2025.12.29 |
| 25.12.26 스프링 어노테이션 (@Component, @Service, @Repository, @Controller) (0) | 2025.12.26 |
| 25.12.26 Spring Bean은 무엇인가요? (0) | 2025.12.26 |