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 상태
- 이 시점부터 외부 요청을 안정적으로 처리 가능
'Kotlin Spring > Kotlin Spring' 카테고리의 다른 글
CloudWatchClient로 CPUUtilization 메트릭 Data 가져오기 (feat. CPU 상태 확인) for Kafka Throttling (0) | 2025.04.26 |
---|---|
단방향 암호화 sha512 (0) | 2024.12.18 |
오토와이어링할 수 없습니다. '' 타입의 bean을 찾을 수 없습니다. (1) | 2024.12.18 |
Kotlin when 문 (1) | 2024.12.15 |
DataFetchingEnvironment 세팅하는 방법 (0) | 2024.12.11 |