[실전 서버리스 02] 콜드 스타트 240배 차이, 엣지 컴퓨팅이 빠른 이유

서버리스를 이야기하면 늘 따라오는 걱정이 콜드 스타트다. 서버리스는 요청이 없으면 코드가 잠들어 있다가, 요청이 오면 깨어나 실행되는데, 이 깨어나는 시간이 느리면 첫 요청이 굼뜨다는 것이다. 전통적인 서버리스의 약점으로 자주 지적됐다. 그런데 엣지 방식에서는 이게 거의 사라진다. 이번 편은 콜드 스타트가 뭔지, 왜 엣지에서는 문제가 안 되는지를 숫자로 본다.


앞 편에서 엣지가 빠르다고 했는데, 그 빠름의 정체 중 하나가 바로 이 콜드 스타트 차이다. 개념을 정확히 알면 서버리스 플랫폼을 고를 때 판단 기준이 생긴다.


1. 콜드 스타트란 무엇인가

콜드 스타트는 잠들어 있던 서버리스 함수가 요청을 받고 처음 실행되기까지 걸리는 준비 시간이다. 자주 쓰이는 함수는 깨어 있는 상태라 바로 실행되지만(웜 스타트), 한동안 요청이 없어 잠든 함수는 실행 환경을 새로 띄워야 해서 시간이 걸린다. 이게 콜드 스타트다.


왜 이게 문제냐면, 사용자가 어쩌다 잠든 함수를 처음 깨우는 불운한 첫 손님이 되면 그 사람만 느린 응답을 받기 때문이다. 트래픽이 뜸한 개인 사이트일수록 함수가 자주 잠들어서 콜드 스타트를 겪을 확률이 높다. 그래서 전통적인 서버리스에서 이건 실질적인 고민거리였다.


콜드 스타트 시간은 플랫폼과 언어에 따라 크게 다르다. 무거운 실행 환경을 쓰는 플랫폼은 콜드 스타트가 몇 초까지 갈 수 있다. 몇 초면 사용자가 느리다고 체감하기 충분한 시간이다. 그래서 이걸 줄이려고 함수를 인위적으로 계속 깨워두는 편법까지 쓰기도 했다.


콜드 스타트를 조금 더 직관적으로 비유하면, 자주 여는 냉장고는 늘 시원하지만 오래 안 연 김치냉장고는 문을 열고 안이 준비되기까지 잠깐 걸리는 것과 비슷하다. 자주 쓰이는 함수는 준비돼 있고, 오래 잠든 함수는 깨우는 시간이 필요하다. 그 깨우는 시간이 콜드 스타트다.


조금 더 짚으면, 콜드 스타트는 트래픽 패턴과 밀접하다. 인기 서비스는 늘 요청이 있어 함수가 안 잠들지만, 개인 사이트는 뜸한 시간이 많아 자주 잠든다. 그래서 콜드 스타트는 역설적으로 작은 사이트일수록 더 자주 겪는 문제였다. 엣지가 이걸 해결해준 게 개인 개발자에게 특히 반가운 이유다.


2. 240배라는 숫자

구체적인 비교를 보자. 대표적인 전통 서버리스 플랫폼의 콜드 스타트는 자바스크립트 환경에서 상위 구간 기준 대략 1초에서 3초 가까이 걸린다. 사용자가 첫 클릭에서 몇 초를 기다리는 셈이다. 반면 내가 쓴 엣지 플랫폼의 콜드 스타트는 5밀리초 미만이다.


이 차이가 대략 240배다. 3초와 5밀리초는 사람이 체감하기에 완전히 다른 세계다. 3초는 답답해서 뒤로 가기를 누를 시간이고, 5밀리초는 아예 인지조차 안 되는 순간이다. 사실상 콜드 스타트가 없는 것과 마찬가지다. 서버리스의 최대 약점이 이 플랫폼에서는 없다시피 한 것이다.


이게 개인 사이트에 특히 중요하다. 트래픽이 적어 함수가 자주 잠드는 개인 사이트일수록 콜드 스타트를 겪을 일이 많은데, 그게 5밀리초라면 아무 문제가 안 된다. 트래픽이 뜸하든 몰리든 항상 빠른 첫 응답을 줄 수 있다. 개인 개발자에게 이건 큰 안심이다.


전통 서버리스에서 콜드 스타트를 줄이려던 편법들이 오히려 문제를 드러낸다. 함수를 계속 깨워두려고 몇 분마다 가짜 요청을 보내는 식인데, 이러면 안 쓰는 시간에도 함수가 돌아 비용이 나가고, 서버리스의 쓴 만큼만 낸다는 장점이 훼손된다. 약점을 편법으로 덮으려다 다른 장점을 잃는 것이다.


3. 왜 이렇게 빠른가, V8 아이솔레이트

이 차이는 실행 방식의 근본적 차이에서 온다. 전통적인 서버리스는 요청마다 컨테이너나 가상 머신 같은 무거운 실행 환경을 띄운다. 이걸 새로 부팅하는 데 시간이 걸린다. 운영체제 수준의 환경을 통째로 올리는 셈이라 무겁다.


반면 내가 쓴 엣지 플랫폼은 자바스크립트 엔진의 아이솔레이트라는 훨씬 가벼운 단위로 코드를 격리해 실행한다. 무거운 컨테이너를 띄우는 게 아니라, 이미 돌고 있는 엔진 안에서 격리된 실행 공간만 하나 만드는 것이다. 이건 거의 즉시 만들어진다. 그래서 콜드 스타트가 밀리초 단위로 떨어진다.


대신 이 방식엔 제약도 따른다. 가벼운 격리 환경이라 전통적인 서버에서 되던 일부 기능이 안 되거나 다르게 동작한다. 예를 들어 파일 시스템을 마음대로 쓰거나 특정 시스템 라이브러리를 부르는 게 제한된다. 이 제약은 뒤에서 한도와 함정을 다룰 때 자세히 짚는다. 빠름에는 대가가 있는 법이다.


240배라는 숫자를 체감으로 바꾸면 이렇다. 3초는 사용자가 화면을 보며 이거 왜 안 뜨지 하고 답답해할 시간이고, 5밀리초는 눈을 깜박이는 것보다 훨씬 짧아 아예 인지 불가능한 시간이다. 같은 콜드 스타트라는 이름을 붙이기 민망할 만큼 다른 경험이다.


240배 차이가 실제 사용자 이탈로 이어진다는 점도 중요하다. 연구들을 보면 첫 화면이 몇 초만 늦어도 이탈률이 크게 오른다. 콜드 스타트로 첫 손님이 3초를 기다리다 떠나면, 그 사람은 다시 안 올 수도 있다. 5밀리초라면 그런 이탈이 아예 없다. 속도가 곧 사용자 유지로 직결되는 것이다.


4. 엣지 거리의 이점

콜드 스타트 외에 엣지가 빠른 또 하나의 이유는 앞 편에서 말한 물리적 거리다. 코드가 사용자 가까운 도시에서 실행되니, 사용자와 서버 사이 왕복 시간이 짧다. 이 왕복 시간을 지연 시간이라고 하는데, 거리가 멀수록 커진다.


한 곳에 있는 중앙 서버는 먼 사용자에게 어쩔 수 없이 느리다. 지구 반대편 사용자는 빛의 속도로 왕복해도 수백 밀리초가 걸린다. 엣지는 이 거리를 없앤다. 사용자가 어디에 있든 가까운 곳에서 응답하니, 전 세계 어디서나 고르게 빠르다. 첫 응답 시간이 크게 개선된다는 측정 결과가 이걸 뒷받침한다.


이 두 가지, 즉 콜드 스타트가 거의 없다는 점과 사용자 가까이서 실행된다는 점이 합쳐져서 엣지 서버리스의 속도가 나온다. 잠들어 있어도 즉시 깨고, 깨서는 가까운 데서 도니 빠르다. 개인 사이트가 대형 서비스 못지않은 응답 속도를 낼 수 있는 비결이다.


아이솔레이트 방식의 원리를 조금 더 설명하면, 자바스크립트 엔진은 원래 한 브라우저 안에서 여러 탭의 코드를 격리해 돌리도록 설계됐다. 그 격리 기술을 서버에 가져와, 하나의 엔진 안에서 수많은 사용자의 코드를 가볍게 격리해 실행하는 것이다. 무거운 운영체제를 매번 띄우지 않으니 빠르다.


5. 속도가 SEO로 이어진다

이 속도는 그냥 기분 좋은 데서 끝나지 않는다. 앞서 SEO 시리즈에서 다룬 페이지 속도와 직접 이어진다. 검색엔진은 빠른 페이지를 선호하고, 특히 첫 화면이 뜨는 속도를 순위 신호로 본다. 엣지에서 서버가 완성된 HTML을 빠르게 내려주면 그 신호에 유리하다.


또 봇이 사이트를 크롤할 때도 빠른 응답이 도움이 된다. 봇은 응답이 느린 사이트에서는 크롤을 줄이는 경향이 있는데, 엣지에서 항상 빠르게 응답하면 봇이 부담 없이 자주 방문한다. 속도가 크롤 효율로도 이어지는 것이다. 서버리스 선택이 SEO에도 은근히 기여한다.


정리하면 콜드 스타트는 서버리스의 약점이었지만 엣지 아이솔레이트 방식에서는 사실상 사라졌고, 거기에 물리적 거리 이점까지 더해져 엣지 서버리스는 매우 빠르다. 다음 편에서는 이 서버리스의 또 다른 큰 매력, 비용 구조를 다룬다. CPU 시간만 내는 과금이 왜 개인 개발자에게 유리한지를 파고든다.


엣지 거리의 이점을 실감한 경험이 있다. 중앙 서버 시절엔 해외에서 접속한 사용자가 느리다는 피드백이 있었는데, 엣지로 옮긴 뒤엔 어느 나라에서 접속해도 응답이 고르게 빨랐다. 특정 지역 사용자만 손해 보는 일이 사라진 것이다. 글로벌 서비스에 이 균일한 속도는 큰 값어치다.


속도가 SEO로 이어진다는 걸 실감한 건 검색 도구의 지표에서였다. 첫 화면 로딩 관련 지표가 좋게 나오고, 봇의 크롤 응답 시간도 짧게 찍혔다. 앞서 SEO 시리즈에서 페이지 속도는 순위의 마지막 한 끗이라고 했는데, 엣지 서버리스는 그 한 끗을 기본으로 깔아주는 셈이다. 인프라 선택이 SEO의 밑돌이 된다.


덧붙이면, 콜드 스타트가 없다는 건 개발과 테스트에서도 편하다. 배포하고 바로 눌러도 즉시 응답이 오니, 이게 지금 느린 건지 잠들었다 깨는 건지 헷갈릴 일이 없다. 개발 경험 자체가 매끄러워진다. 사용자만이 아니라 개발자에게도 이 즉시성은 작지만 꾸준한 이점이다.