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 메시지가 로그에 출력되면 성공적으로 실행된 것입니다.