일반적으로 HTTP 요청을 처리하기 위해 어느정도 제어할 수 있는 서버를 통해 웹 응용프로그램을 구축하고 배포했습니다. 이렇게 배포된 응용프로그램은 해당 서버에서 실행되며 해당 서버의 자원을 구성하고 관리하는 것은 우리의 책임입니다. 여기에는 몇 가지 이슈들이 있습니다.

  1. 우리는 요청을 처리하지 않는 시간대에도 서버 유지 비용을 지불해야 합니다.
  2. 우리는 서버 및 모든 리소스의 가동 시간 및 유지 보수를 책임져야 합니다.
  3. 우리는 서버에 적절한 보안 업데이트를 적용 할 책임이 있습니다.
  4. 우리는 사용 규모가 커짐에 따라 서버의 규모를 키워야하며 사용량이 많지 않을 때에는 규모를 축소해야 합니다.

소규모의 기업과 개별 개발자들이 처리하기에는 적지 않은 일들이지만, 정말로 처리해야할 중요한 업무들을(실제 응용프로그램을 작성하고 관리하는 일) 소홀히하기에는 충분한 일들입니다. 대규모 조직의 경우에는 인프라 팀에서 처리하는 일이며 보통은 개별 개발자들이 담당하는 업무가 아닙니다. 그러나 이를 지원하는데 필요한 프로세스가 개발 시간을 지연시킬 수 있습니다. 따라서 애플리케이션을 구축하고 실행하기 위해서는 인프라팀과 협력해야만 합니다. 개발자들이 이런 문제들에 대한 해결책을 찾고 있었으며 이에 서버리스가 등장하게 됩니다.

서버리스 컴퓨팅

서버리스 컴퓨팅(줄여서 서버리스)은 클라우드 서비스 공급자들(AWS, 애저, 구글 클라우드)이 리소스를 동적으로 구성하여 코드 실행을 책임지는 실행 모델입니다. 또한 코드를 실행하는 데에 사용된 리소스의 양에 따라서 요금을 부과합니다. 이러한 코드는 일반적으로 http 요청, 데이터베이스 이벤트, 대기열 서비스, 모니터링 경고, 파일 업로드, 예약된 이벤트(cron 작업) 등 다양한 이벤트에 의해 트리거되는 스테이트리스(Stateless: 특정 상태를 저장하지 않는) 컨테이너 내부에서 실행됩니다. 실행을 위해 클라우스 서비스 공급자에게 보내지는 코드는 보통 함수 형태로 구성됩니다. 그래서 서버리스는 가끔 “서비스로 제공되는 함수(Functions as a Service)” 또는 “FaaS” 라고도 불립니다. 다음은 FaaS를 제공하는 주요 클라우드 서비스 공급업체들입니다.

서버리스(Serverless)는 기본 인프라를 개발자로부터 추상화하는 반면, 서버는 여전히 우리의 함수를 실행하는 데 관여합니다.

코드가 개별 함수로 실행되기 때문에 우리가 미리 알아 둬야 할 몇 가지가 있습니다.

마이크로서비스(Microservices)

서버리스 세계로 전환하면서 우리가 직면 한 가장 큰 변화는 애플리케이션의 기능을 구조화해야한다는 것입니다. 하나의 Rails 또는 Express 모노리스 응용 프로그램을 기존처럼 단순히 배포하는 데 사용할 수도 있습니다. 그러나 serverless 세계에서는 일반적으로 더욱 마이크로 서비스 기반의 아키텍처를 채택해야합니다. 모노리스 처럼 하나의 함수로 전체 애플리케이션을 실행하고 라우팅을 직접 처리하면 됩니다. 그러나 함수의 크기를 줄이는 것이 좋기 때문에 권장하지 않습니다. 이것에 대해서는 아래에서 좀 더 자세히 이야기 하겠습니다.

스테이트리스 함수(Stateless Functions)

함수는 일반적으로 상태가 저장되지 않는(stateless) 컨테이너에서 보안적으로 안전하게(거의) 실행됩니다. 즉, 이벤트가 완료된 이후 한 참이 지난 응용 프로그램 서버에서 코드를 재실행하거나 이전 실행 컨텍스트를 사용하여 요청을 제공하는 코드를 실행시킬 수 없습니다. 이것은 마치 여러분의 함수가 매번 새로운 컨테이너를 통해 호출되는 것이라고 가정할 수 있어야만 한다는 이야기입니다.

여기에 약간의 미묘한 차이가 있으며 Lambda는 무엇인가 챕터에서 논의할 것입니다.

콜드 스타트(Cold Starts)

함수(Function)는 이벤트에 응답하도록 설정된 컨테이너 내부에서 실행되기 때문에 이벤트와 관련된 어느 정도의 대기 시간을 필요로합니다. 이를 콜드 스타트(Cold Start)라고 합니다. 그리고 함수 실행이 완료된 이후에도 한동안 유지가 되는데 만일 이 시간 동안 다른 이벤트가 발생하면 훨씬 빨리 응답하게 됩니다. 이것을 “웜 스타트(Warm Start)”라고 부릅니다.

콜드 스타트 기간은 특정 클라우드 공급 업체의 구현 방식에 따라 다릅니다. AWS Lambda에서는 몇 백 밀리 초에서 몇 초 사이의 범위가 될 수 있습니다. 사용 된 런타임(또는 언어), 기능의 크기(패키지) 및 클라우드 공급 업체에 따라 다릅니다. 콜드 스타는 클라우드 공급자가 대기 시간을 줄이기 위해 수년간 최적화하면서 개선되어 왔기 때문에 크게 향상되었습니다.

기능을 최적화하는 것 외에도, 여러분이 직접 별도의 예약 기능과 같은 간단한 트릭을 사용하여 몇 분마다 기능을 호출하여 워밍 상태를 유지할 수도 있습니다. Serverless Framework 에서는 몇 가지 플러그인을 이용해 이러한 워밍 상태를 유지하는 방법을 제공하고 있습니다.

지금까지 서버리스 컴퓨팅에 대한 개념에 대해 다뤄봤습니다. 이제 Lambda의 기능과 코드 실행 방법에 대해 자세히 살펴 보겠습니다.