본문 바로가기
Kotlin Spring/Kotlin Spring

Spring Boot warm up 순서

by Bill Lab 2025. 8. 31.
728x90

1. JVM & SpringApplication 시작

    - main() → SpringApplication.run() 호출

    - Spring Boot 내부에서 ApplicationContext, Environment 준비

 

2. Environment 준비

    - application.yml / application.properties / OS env / JVM args 로드

    - 이때 Redis, Kafka, DB의 연결 정보(URL, username, password, cluster info 등) 도 Environment에 로드됨

    - 어떤 profile(local, dev, prod)을 쓸지도 결정됨

 

3. ApplicationContext 생성 & BeanDefinition 등록

     - @Configuration 클래스 스캔

     - @EnableAutoConfiguration에 따라 Redis, Kafka, DataSource 관련 AutoConfig 클래스 로딩
       예) DataSourceAutoConfiguration, RedisAutoConfiguration, KafkaAutoConfiguration

 

4. BeanFactoryPostProcessor 실행

    - 프로퍼티 치환(@Value, ${...})

    - DB, Redis, Kafka 설정값(spring.datasource.*, spring.redis.*, spring.kafka.*)을 Bean에 주입할 준비

 

5. BeanPostProcessor 등록   
    - AOP, 트랜잭션 프록시, 메시지 컨버터, JPA Proxy 준비

 

6. 외부 연결 관련 Bean 생성 & 초기화(외부 시스템 커넥션 시작)

     1) DB

         - DataSource Bean 생성

         - HikariCP 등 커넥션 풀 초기화 (풀 사이즈만큼 미리 DB 연결 맺음)

         - JPA/Hibernate 사용 시 EntityManagerFactory 초기화 + DDL 실행(hibernate.hbm2ddl.auto)

      2) Redis

         - LettuceConnectionFactory 또는 JedisConnectionFactory Bean 생성

         - Redis 서버와 연결 테스트 → 연결 실패 시 애플리케이션 부팅 실패

      3) Kafka

         - KafkaTemplate, KafkaProducerFactory, KafkaConsumerFactory Bean 초기화

         - Consumer는 리스너 컨테이너(ConcurrentMessageListenerContainer) 생성

         - 이 시점에서 Kafka 브로커와 연결을 맺고 토픽/파티션 metadata fetch 수행

 

7. 싱글톤 Bean 초기화 완료

     : 이때 만약 특정 Service Bean이 DB, Redis, Kafka를 주입받는다면 이미 커넥션

       Bean이 준비되어 있기 때문에 사용 가능 상태입니다.

 

    - @Service, @Repository, @Controller 생성

    - DI 주입 완료

    - @PostConstruct, afterPropertiesSet() 실행

 

8. Web Server 기동

    - 내장 Tomcat/Jetty/Undertow 실행

    - DispatcherServlet 등록

 

9. ApplicationRunner / CommandLineRunner 실행

    - 여기서 DB 시드(seed) 데이터 insert, Redis 캐시 warm-up, Kafka 토픽 존재 여부 체크/생성 같은 초기화 작업을 넣을 수 있음

 

10. ApplicationReadyEvent 발행

    - Spring Boot 애플리케이션이 정상적으로 DB, Redis, Kafka 연결까지 완료된 Ready 상태

    - 이 시점부터 외부 요청을 안정적으로 처리 가능

728x90