사실상 Spring boot의 hello world 격인 Basic Application을 명확하게 알고가야하지 않을까? 라는 생각이 들어 정리하기로 마음먹었습니다.
Spring boot 스타터로 스프링부트 프로젝트를 생성할 경우 아래와 같이 main이 자동으로 생성되는데, 기본적으로 @SpringBootApplication을 주입한 상태로 BasicApplication클래스가 주어지는 것을 볼 수 있습니다.
package com.springboot.basic;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class BasicApplication {
public static void main(String[] args) {
SpringApplication.run(BasicApplication.class, args);
}
}
위의 코드는 Spring Boot 프로젝트의 기본 구조와 엔트리 포인트를 나타내는 클래스입니다. 코드를 하나씩 살펴보면서 각 부분의 기능과 내부 동작 방식에 대해 설명해보겠습니다.
패키지 및 import 선언:
com.springboot.basic
패키지에 BasicApplication
클래스를 정의합니다.org.springframework.boot.SpringApplication
클래스와 org.springframework.boot.autoconfigure.SpringBootApplication
어노테이션을 import합니다.@SpringBootApplication
어노테이션:
@Configuration
, @EnableAutoConfiguration
, @ComponentScan
세 가지 어노테이션을 하나로 묶은 메타 어노테이션입니다.@Configuration
: 애플리케이션의 구성 요소를 정의하는 클래스임을 나타냅니다.@EnableAutoConfiguration
: 클래스경로와 빈 설정을 기반으로 스프링 부트의 자동 구성을 활성화합니다.@ComponentScan
: @Component
, @Service
, @Repository
등과 같은 컴포넌트를 검색하고 스프링에 등록합니다.BasicApplication
클래스:
public static void main(String[] args)
메서드를 포함하고 있습니다.SpringApplication.run(BasicApplication.class, args)
메서드를 호출하여 애플리케이션을 실행합니다.BasicApplication
클래스는 @SpringBootApplication
어노테이션이 있는 패키지와 하위 패키지에 있는 구성 요소를 검색하고 구성합니다.SpringApplication.run()
메서드:
- Spring Boot 애플리케이션을 실행하는 역할을 합니다.
- BasicApplication.class
는 애플리케이션의 주 구성 클래스를 나타냅니다.
- args
는 프로그램 실행 시 전달되는 명령행 인수(arguments)입니다.
Spring Boot는 내부적으로 다음과 같은 동작 방식을 따릅니다:
@SpringBootApplication
어노테이션이 선언된 클래스에서 main()
메서드를 실행합니다.SpringApplication.run()
메서드가 호출되면 스프링 부트 애플리케이션 컨텍스트가 생성됩니다.BasicApplication
클래스를 선택합니다.BasicApplication
클래스의 main()
메서드가 호출됩니다.SpringApplication.run()
메서드가 실행되면 스프링 부트 애플리케이션 컨텍스트가 생성됩니다.@SpringBootApplication
어노테이션이 선언된 클래스와 해당 클래스가 속한 패키지를 스캔합니다.@Component
, @Service
, @Repository
등과 같은 어노테이션이 지정된 클래스를 찾고 스프링 컨테이너에 등록합니다.IntelliJ는 Spring Boot 애플리케이션을 실행하기 위해 Maven 또는 Gradle을 사용하여 필요한 종속성을 가져오고 빌드합니다. 또한 IntelliJ는 내장된 서버를 시작하고 애플리케이션을 구성하기 위해 Spring Boot의 자동 구성 기능을 활용합니다. 이렇게 함으로써 개발자는 별도의 외부 서버 구성 없이 간단하게 Spring Boot 애플리케이션을 실행하고 개발할 수 있습니다
컨텍스트 생성후 애플리케이션이 실행 되는데, 이는 Spring Boot에서 내장 톰캣(Embedded Tomcat)을 사용하여 웹 서버를 실행했기 때문입니다. 아래는 내장 웹서버가 호출되는 구조 및 동작방식입니다.
SpringApplication.run()
메서드를 호출하여 애플리케이션을 실행합니다.Tomcat
클래스를 찾아 사용합니다.내장 톰캣은 Spring Boot 애플리케이션의 클래스패스에서 Tomcat 라이브러리를 찾아 사용하며, 별도의 톰캣 설치나 구성 없이 애플리케이션을 실행할 수 있습니다. 이는 개발 환경에서 간편한 실행과 배포를 가능하게 해주는 Spring Boot의 특징 중 하나입니다.