본문 바로가기
Daily Dev Q&A 정리 템플릿

25.12.30 @SpringBootApplication 어노테이션이 꼭 필요한가요?

by teg0 2025. 12. 30.

저번에 어노테이션 중 @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이 너무 똑똑해서 굳이 안 해도 될 설정까지 하려고 할 때, 특정 설정을 제외할 수 있다.