Day 81 · 4/5
🌳 고급 서버리스

Serverless Cold Start가 뭔가요?

쉽게 이해하기

겨울에 자동차 시동을 걸면 엔진이 데워지는 시간이 필요하죠? 한참 운전하다가 시동을 끄면, 다음에 다시 켤 때 또 데워야 합니다. Serverless도 마찬가지예요. 함수를 오랫동안 안 쓰면 서버가 꺼지고, 다음 요청이 오면 다시 켜는 데 시간이 걸립니다. 이게 Cold Start예요.

핵심 정리

서버리스 함수가 처음 실행될 때 초기화 시간이 걸리는 현상입니다.

자세히 알아보기

Serverless는 요청이 없을 때 서버를 꺼두고, 요청이 오면 켭니다. 비용을 절약하려는 거죠. 하지만 서버를 켜는 데는 시간이 걸립니다. 컨테이너를 띄우고, 코드를 로드하고, 런타임을 초기화하는 과정이 필요하거든요. 이 초기화 시간이 바로 Cold Start입니다. 보통 수백 밀리초에서 수 초까지 걸릴 수 있어요. 얼마나 걸리는지는 언어와 환경에 따라 다릅니다. Python이나 Node.js는 비교적 빠른 편이고(200~500ms), Java나 .NET은 느린 편입니다(1~3초). 함수 크기가 클수록, 의존성이 많을수록 더 느려집니다. Cold Start는 첫 요청에만 발생하고, 이후 요청은 서버가 이미 떠 있어서 빠릅니다. 이걸 Warm Start라고 하죠. 문제는 트래픽이 적거나 불규칙한 서비스입니다. 오랫동안 요청이 없으면 서버가 꺼지고, 다음 요청마다 Cold Start가 발생합니다. 사용자 입장에서는 '왜 가끔 느려지지?' 하고 느끼게 되죠. 해결 방법은 몇 가지가 있습니다. 첫째, Warm-up 함수를 주기적으로 호출해서 서버를 깨워두는 방법입니다. 둘째, Provisioned Concurrency를 설정해서 항상 일정 개수의 인스턴스를 띄워두는 방법이 있습니다. 실무에서는 Cold Start가 중요한지 판단해야 합니다. 배치 작업이나 백그라운드 작업은 큰 문제가 안 되지만, 실시간 API나 사용자 대면 서비스는 중요합니다. AWS Lambda의 경우 최근 SnapStart 같은 기능으로 Cold Start를 줄이려는 시도가 계속되고 있습니다.