Java | Spring
[Spring Boot] 스프링 부트 동작 과정 다시 생각해보기
@leem
2025. 2. 21. 12:10
이번 포스팅에서는 스프링 부트가 어떻게 동작하는지 단계별로 차근차근 살펴보겠습니다.
1. JVM 실행 → Gradle 빌드된 .jar 실행
- 우리가 만든 스프링 부트 애플리케이션은 .jar 파일로 빌드됩니다.
- 이 .jar 파일이 실행되면, JVM(Java Virtual Machine)이 이를 읽고 애플리케이션을 시작합니다.
2. 스프링 부트 초기화 (SpringApplication.run())
- main() 함수에서 SpringApplication.run(Application.class, args)를 호출하면 스프링 부트의 초기화 과정이 시작됩니다.
- 이 과정에서 Spring Boot의 자동 설정(Auto Configuration), 애플리케이션 컨텍스트(Application Context) 생성 등이 이루어집니다.
@SpringBootApplication
public class MyApplication {
public static void main(String[] args) {
SpringApplication.run(MyApplication.class, args);
}
}
3. 설정 파일 로드 (YAML / Properties)
- application.yml 또는 application.properties 파일이 로드됩니다.
- 데이터베이스 설정, 포트 번호, 환경변수 등이 이 단계에서 결정됩니다.
server:
port: 8080
spring:
datasource:
url: jdbc:mysql://localhost:3306/mydb
username: user
password: pass
4. IoC 컨테이너 초기화 및 빈(Bean) 등록
- 스프링은 "제어의 역전(IOC, Inversion of Control)" 개념을 기반으로 동작합니다.
- @Component, @Service, @Repository, @Controller 등의 어노테이션이 붙은 클래스들을 자동으로 스캔하고 빈(Bean)으로 등록합니다.
@Service
public class AccountService {
public String getAccountDetails() {
return "Account Details";
}
}
5. 데이터 소스(DataSource) 설정 및 SqlSessionFactory 생성
- MyBatis와 같은 데이터베이스 ORM을 사용할 경우, 데이터베이스 연결을 위한 DataSource가 설정됩니다.
- SqlSessionFactory가 생성되며, MyBatis 매퍼 XML 파일과 연동됩니다.
@Configuration
@MapperScan("com.example.repository")
public class MyBatisConfig {
@Bean
public SqlSessionFactory sqlSessionFactory(DataSource dataSource) throws Exception {
SqlSessionFactoryBean factoryBean = new SqlSessionFactoryBean();
factoryBean.setDataSource(dataSource);
return factoryBean.getObject();
}
}
6. MyBatis XML 매퍼 로드 및 SQL 실행 가능 상태
- mapper.xml에 정의된 SQL 쿼리들이 로드됩니다.
- 애플리케이션이 실행되면, 이제부터 SQL 실행이 가능해집니다.
<select id="findByAccountIdAndTypeOfHistory" resultType="com.example.dto.HistoryAccountDTO">
SELECT * FROM history_tb
WHERE account_id = #{accountId}
LIMIT #{limit} OFFSET #{offset}
</select>
7. 내장 서버(Tomcat) 실행
- 스프링 부트는 기본적으로 내장된 Tomcat 서버를 실행합니다.
- server.port=8080 과 같은 설정을 통해 원하는 포트에서 실행할 수 있습니다.
8. 애플리케이션 정상 구동 완료
- 모든 설정이 끝나면 애플리케이션이 정상적으로 실행됩니다.
- Started Application in X seconds 메시지가 로그에 출력되면 성공적으로 실행된 것입니다.