Spring Boot 프로젝트를 생성하면 가장 먼저 보이는 클래스가 @SpringBootApplication
이 붙은 메인 클래스입니다. 많은 초보 개발자들이 "이 어노테이션이 정확히 뭘 해주는 거지?"라는 의문을 갖습니다. 이번 글에서는 @SpringBootApplication의 내부 동작과 구성 요소를 실무적인 관점에서 정리해 보겠습니다.
1. @SpringBootApplication의 역할
@SpringBootApplication
은 단일 어노테이션처럼 보이지만, 실제로는 여러 어노테이션을 합쳐놓은 메타 어노테이션(Meta-Annotation)입니다. 이 어노테이션을 붙이면 Spring Boot 애플리케이션이 실행 가능한 기본 설정을 자동으로 제공합니다.
2. 내부 구성 요소
@SpringBootApplication은 아래 세 가지 어노테이션을 포함하고 있습니다.
- @SpringBootConfiguration:
@Configuration
과 동일하게 동작하며, 현재 클래스를 설정 클래스(Configuration Class)로 지정합니다. - @EnableAutoConfiguration: 클래스패스에 있는 라이브러리들을 기준으로 필요한 Bean을 자동으로 등록합니다. 예를 들어,
spring-boot-starter-web
의존성이 있으면 Tomcat과 DispatcherServlet이 자동 설정됩니다. - @ComponentScan: 현재 패키지와 하위 패키지를 스캔하여
@Component
,@Service
,@Repository
,@Controller
등이 붙은 클래스를 자동으로 Bean으로 등록합니다.
3. 실행 구조
아래는 기본적인 Spring Boot 메인 클래스 예시입니다.
@SpringBootApplication
public class DemoApplication {
public static void main(String[] args) {
SpringApplication.run(DemoApplication.class, args);
}
}
실행 시 SpringApplication.run()
메서드가 호출되면서 내장 서버(Tomcat, Jetty 등)가 구동되고, 앞서 설명한 자동 설정과 컴포넌트 스캔이 순차적으로 적용됩니다.
4. 실무에서의 활용과 주의사항
- 패키지 구조:
@SpringBootApplication
이 선언된 클래스 패키지 기준으로 컴포넌트 스캔이 이루어지므로, 메인 클래스는 프로젝트의 루트 패키지에 두는 것이 좋습니다. - 자동 설정 제어: 불필요한 자동 설정이 있을 경우
@EnableAutoConfiguration(exclude = ...)
옵션으로 제외할 수 있습니다. - 프로파일 별 설정:
application.yml
또는application.properties
와 함께 사용하면 환경별 구성을 유연하게 제어할 수 있습니다.
5. 마무리
@SpringBootApplication
은 단순히 “시작점” 이상의 의미를 가집니다. 자동 설정, 컴포넌트 스캔, 설정 클래스 지정까지 기본적인 환경을 자동으로 세팅해주므로, 개발자는 비즈니스 로직에만 집중할 수 있습니다. 실무에서는 이 동작 원리를 이해하고, 필요에 따라 적절히 확장하거나 제어하는 것이 중요합니다.
'개발 > PHP' 카테고리의 다른 글
[PHP] in_array 사용방법 (1) | 2023.02.04 |
---|---|
[PHP] foreach 사용하기 (0) | 2022.11.27 |
[php] 날짜와 시간함수 사용하기 (0) | 2022.10.23 |
[php] 문자를 아스키코드로 변환해보자 ord(), chr() 함수 (0) | 2022.10.23 |
[php] $_REQUEST 글로벌 변수 와 variables_order (0) | 2022.10.23 |