서버리스(Serverless)란 무엇인가?
서버리스는 이름 그대로 서버 없는 컴퓨팅을 의미합니다. 서버 없이 어떻게 컴퓨팅이 가능할까요? 실제로는 서버가 아예 없다는 뜻이 아닙니다. 기술을 통해 서버라는 개념을 비즈니스 로직에서 추상화하여, 개발자가 기반 인프라에 신경 쓸 필요 없이 애플리케이션에만 집중할 수 있게 해줍니다.
서버리스는 어떻게 작동하나요?
서버리스가 등장한 이후 많은 개발자들이 이를 새로운 기술로 인식해 왔습니다. 편리함 때문에 분명 새로운 기술이 맞지만, 너무 복잡하게 생각하거나 겁먹을 필요는 없습니다. 애플리케이션 실행의 기본 로직은 변하지 않았습니다. 서버리스는 단지 다른 클라우드 기술과 마찬가지로 기술적 수단을 통해 관련 복잡성을 숨겨줄 뿐입니다.
서버리스 이전에는 웹 애플리케이션을 배포하는 과정이 번거로웠습니다. 애플리케이션을 실행하려면 먼저 서버 측에 런타임 환경을 구축해야 했습니다. 가상 머신을 구매하고, 환경을 초기화하고, 필요한 의존성을 설치하고 — 가능한 한 로컬 개발 환경과 일관성을 유지해야 했습니다. 그다음에는 사용자가 애플리케이션에 접근할 수 있도록 도메인을 구매하고, 가상 머신의 IP 주소로 등록하고, Nginx를 구성하고 시작한 후, 마지막으로 애플리케이션 코드를 업로드하고 실행해야 했습니다.
전통적인 워크플로와 달리, 서버리스 배포는 단 세 단계만 필요하며, 이는 서버 측 작업을 극도로 추상화한 것입니다. 본질적으로 사용자 HTTP 데이터 요청의 전체 체인은 질적으로 변하지 않았습니다. 서버리스는 단지 전체 모델을 단순화했을 뿐입니다.
자세히 설명하자면, 이전에는 서버 측에 런타임 환경을 직접 구축해야 했지만, FaaS 애플리케이션은 이 단계를 함수 서비스로 추상화합니다. 예전에는 로드 밸런싱과 리버스 프록시가 필요했지만, FaaS 애플리케이션은 이를 HTTP 함수 트리거로 추상화합니다. 코드 업로드와 애플리케이션 시작도 필요했지만, FaaS 애플리케이션은 이를 함수 코드로 추상화합니다.
사용자가 처음으로 HTTP 함수 트리거에 접근하면, 트리거는 사용자의 HTTP 요청을 보유하고 함수 서비스에 HTTP Request 이벤트 알림을 생성합니다.
함수 서비스는 유휴 함수 인스턴스가 있는지 확인합니다. 없으면 함수 코드 저장소에서 코드를 가져와 함수 인스턴스를 초기화하고 실행한 후, HTTP Request 객체를 매개변수로 전달하여 함수를 실행합니다.
또한 함수 실행의 HTTP Response는 함수 트리거로 반환되고, 트리거는 결과를 기다리고 있던 사용자 클라이언트에 다시 전달합니다.
서버리스와 애플리케이션 호스팅 PaaS 플랫폼의 가장 큰 차이는 리소스 활용도에 있으며, 이것이 서버리스의 가장 주목할 만한 혁신입니다. 서버리스 애플리케이션 인스턴스는 0으로 축소될 수 있는 반면, PaaS 플랫폼은 항상 최소한 하나의 서버나 컨테이너가 실행 중이어야 합니다.
첫 번째 호출 전에는 함수의 실제 서버 점유율이 0입니다. 사용자가 HTTP 데이터 요청을 해야만 HTTP 이벤트에 의해 함수 서비스가 트리거되어 함수 인스턴스를 시작합니다. 즉, 사용자 요청이 없으면 함수 서비스는 실행 중인 인스턴스가 없고 서버 리소스를 소비하지 않습니다. 반대로 PaaS 플랫폼에서 애플리케이션 인스턴스를 생성하는 데는 보통 수십 초가 걸리며, 서비스 가용성을 보장하려면 최소한 하나의 서버가 애플리케이션 인스턴스를 계속 실행해야 합니다.
비유를 들자면, 서버리스는 음성 인식 조명과 같습니다. 사람이 있을 때 빠르게 켜지고, 아무도 없을 때 꺼집니다. 전통적인 수동 조명과 비교하면 음성 인식 조명은 에너지 효율성이 뛰어납니다. 하지만 이러한 에너지 절약 기능은 음성 인식 조명이 필요할 때 빠르게 켜질 수 있어야 가능합니다.
마찬가지로 서버리스의 장점은 빠른 시작 시간에 달려 있습니다. 어떻게 이를 가능하게 할까요?
서버리스는 왜 이렇게 빠르게 시작할 수 있나요?
콜드 스타트(cold start)는 원래 PC 개념으로, 전원을 껐다 켠 후 BIOS 테이블을 다시 로드하는 과정 — 본질적으로 하드웨어 드라이버부터 부팅하는 과정 — 을 의미하며, 시작 시간이 느렸습니다.
오늘날의 클라우드 환경에서는 물리적 서버의 전원을 껐다 켜는 경우가 거의 없습니다. 서버리스 맥락에서 콜드 스타트는 함수 호출부터 함수 인스턴스가 준비될 때까지의 전체 과정을 말합니다. 여기서 우리는 시작 시간을 최소화하는 데 집중합니다. 시작 시간이 짧을수록 리소스 활용도가 직접적으로 높아지기 때문입니다. 현재 클라우드 제공업체들은 언어별 최적화를 통해 평균 콜드 스타트 시간을 100~700밀리초 사이로 달성했습니다. Google의 JavaScript 엔진 JIT(Just-In-Time) 컴파일 덕분에 Node.js는 가장 빠른 콜드 스타트를 자랑합니다.
서버리스 서비스가 완전히 처음부터 시작하여 함수를 실행하고 프로세스를 완료하는 데 100밀리초 이내가 가능하다는 점은 주목할 만합니다. 이것이 서버리스가 자신 있게 0으로 축소할 수 있는 핵심 이유입니다. 웹 페이지를 열 때 1초 미만의 응답 시간은 일반적으로 훌륭한 것으로 간주됩니다. 이러한 맥락에서 100밀리초의 시작 시간은 페이지 로드 시간에 미치는 영향이 미미합니다.
또한 클라우드 제공업체가 인프라를 지속적으로 최적화하여 더 빠른 시작 시간을 달성하고 궁극적으로 리소스 활용도를 높일 것이라고 가정하는 것이 안전합니다. 예를 들어, 함수 코드 다운로드는 콜드 스타트 중 시간이 많이 걸리는 단계입니다. 따라서 코드가 업데이트되면 클라우드 제공업체는 사전에 리소스 스케줄링을 시작하여 함수 인스턴스를 위한 컨테이너 이미지를 다운로드하고 빌드합니다. 첫 번째 요청이 도착하면 캐시된 이미지를 활용하여 콜드 스타트의 코드 다운로드 단계를 건너뛰고 이미지에서 직접 컨테이너를 시작할 수 있습니다. 이 기술을 웜 스타트(warm start)라고 합니다. 따라서 지연 시간에 민감한 애플리케이션의 경우 웜 스타트나 인스턴스 사전 워밍 전략을 사용하여 콜드 스타트 시간을 가속화하거나 우회할 수 있습니다.
서버리스는 어떻게 계층화되어 있나요?
서버리스 인스턴스가 실행될 때 최소한 세 가지 계층으로 구성됩니다: 컨테이너, 런타임, 함수 코드.
컨테이너를 운영체제(OS)로 생각하면 됩니다. 코드 실행은 하드웨어와의 상호작용이 필요하며, 컨테이너는 커널과 하드웨어 정보를 시뮬레이션하여 코드와 런타임이 그 안에서 작동할 수 있게 합니다. 컨테이너 정보에는 메모리 크기, OS 버전, CPU 세부 정보, 환경 변수 등이 포함됩니다. 현재 FaaS 구현은 Docker 컨테이너, 가상 머신(VM), 또는 샌드박스 환경을 사용할 수 있습니다.
런타임은 함수가 실행되는 컨텍스트를 나타냅니다. 런타임 정보에는 사용된 프로그래밍 언어와 버전(Node.js v10, Python 3.6 등), 호출 가능한 객체(예: aliyun SDK), 시스템 정보(환경 변수 등)가 포함됩니다.
이러한 계층화의 이점은 무엇일까요? 컨테이너 계층은 더 넓은 적용성을 제공하여 클라우드 제공업체가 많은 수의 컨테이너 인스턴스를 사전 워밍하고 물리적 서버 리소스를 효과적으로 조각낼 수 있게 합니다. 런타임 인스턴스는 적용성이 낮으므로 더 적은 수를 사전 워밍할 수 있습니다. 컨테이너와 런타임이 고정되면 코드를 다운로드하고 실행하는 것은 간단해집니다. 이 계층화된 아키텍처는 효율적인 리소스 최적화를 가능하게 하여 코드를 빠르고 비용 효율적으로 실행할 수 있게 합니다.
요약
- 순수 서버리스 애플리케이션의 호출 체인은 함수 트리거, 함수 서비스, 함수 코드의 세 가지 주요 구성 요소로 이루어집니다. 이들은 각각 전통적인 서버 측 작업인 로드 밸런싱 & 리버스 프록시, 서버 & 애플리케이션 런타임 환경, 애플리케이션 코드 배포를 대체합니다.
- 서버리스와 전통적인 애플리케이션 호스팅 PaaS 플랫폼의 가장 큰 차이점은 서버리스 애플리케이션이 0으로 축소될 수 있고 이벤트 트리거 시 빠르게 시작할 수 있다는 점입니다. 예를 들어 Node.js 함수는 시작 및 실행을 100밀리초 이내에 달성할 수 있습니다.
- 서버리스는 설계상 사용자 제어와 애플리케이션 범위를 희생하여 코드 모델을 단순화합니다. 계층 구조는 리소스 활용도를 더욱 높이며, 이것이 놀라울 정도로 짧은 콜드 스타트 시간의 주요 요인입니다.
Novita AI는 사용자를 위해 서버리스 서비스를 출시할 예정입니다. 지금 대기자 명단에 등록하고 서버리스 컴퓨팅으로 비즈니스를 시작하세요.
Novita AI는 AI 야망을 실현하는 올인원 클라우드 플랫폼입니다. 통합 API, 서버리스, GPU 인스턴스 — 비용 효율적인 도구를 제공합니다. 인프라를 걱정하지 말고, 무료로 시작하여 AI 비전을 현실로 만드세요.
추천 자료
