피드로 돌아가기
Dev.toBackend
원문 읽기
Lambda SnapStart를 활성화하면 Java 25 함수에서 Cold Start 시간을 크게 단축할 수 있다
Serverless applications on AWS with Lambda using Java 25, API Gateway and Aurora DSQL - Part 3 Introducing Lambda SnapStart
AI 요약
Context
Lambda 함수에서 Hibernate ORM 사용 시 Cold Start 시간이 8초 이상으로 측정되었다. 초기화 단계에서 함수 코드 로딩, 런타임 시작, 데이터베이스 연결 풀 생성이 주요 병목으로 작용한다.
Technical Solution
- Lambda 함수 버전 배포 시 Firecracker 마이크로VM 스냅샷을 생성하여 메모리와 디스크 상태를 암호화 후 캐싱한다
- ObjectMapper와 ProductDao를 static 초기화 블록에서 인스턴스화하여 SnapStart 스냅샷에 포함시킨다
- HikariCP connection pool 크기를 1로 설정하여 단일 스레드 Lambda에 최적화한다
- JDBC 드라이버 로딩과 Aurora DSQL 연결 생성을 스냅샷 시점에 완료한다
- Tiered Compilation 옵션(-XX:+TieredCompilation -XX:TieredStopAtLevel=1)을 적용한다
Impact
Hibernate 기반 함수에서 SnapStart 미적용 시 Cold Start p99가 8480ms에서, 스냅샷 후속 70회 측정 시 1634ms로 약 80% 감소했다. Warm Start는 9.77ms에서 10.08ms로 거의 동일하게 유지되었다.
Key Takeaway
Static 초기화 블록에서 비용이 큰 객체(ObjectMapper, DataSource)를 미리 초기화하면 SnapStart 스냅샷에 포함되어 복원 시 즉시 사용 가능해진다.
실천 포인트
Java 25 Lambda 함수에서 Cold Start 최적화 시 expensive한 객체 생성(ObjectMapper, Database Connection Pool)을 static 블록에서 수행하여 SnapStart 스냅샷에 포함시키면 Cold Start 시간을 크게 줄일 수 있다