서버리스 컴퓨팅은 사용량에 따라 머신 리소스를 할당하는 클라우드 컴퓨팅 실행 모델입니다. 서버리스 모델에서는 개발자가 서버를 관리할 필요 없이 애플리케이션을 빌드하고 실행할 수 있으며 정확히 사용한 리소스에 대해서만 비용을 지불하면 됩니다. 대신 클라우드 서비스 제공업체가 애플리케이션 코드를 실행하는 클라우드 인프라의 프로비저닝, 관리, 확장을 담당합니다.
이름에 오해의 소지가 있지만 서버리스가 '서버 없음'을 의미하지는 않습니다. 그 대신 서버리스 앱은 애플리케이션 개발과 관련된 일상적인 인프라 작업을 추상화합니다. 애플리케이션을 실행하는 머신을 파악할 수 없고 머신을 구성할 수 없으며 관리하거나 확장할 필요도 없습니다. 즉, 서버 자체가 아닌 서버의 서비스에 대해 비용을 지불합니다.
개발 관점에서 보면 서버가 전혀 없는 것과 같습니다. 개발자가 코드를 작성하고 프로덕션에 배포하기만 하면 나머지는 클라우드 제공업체에서 처리합니다.
애플리케이션을 빌드할 때 개발자는 일반적으로 처리 및 저장을 위한 리소스 정의, 패치 적용, 부하 분산 등과 같이 코드 배포를 위해 수행해야 하는 다양한 기타 서버 관리 작업을 수행합니다. 이러한 모든 추가 항목으로 인해 프로비저닝 시간이 길어지고 운영 오버헤드가 증가하여 결국 개발팀의 속도가 느려집니다.
서버리스 컴퓨팅은 개발자에게 보이지 않는 '서버리스' 환경을 제공하므로 서버나 애플리케이션 실행에 필요한 모든 것에 대해 생각할 필요가 없습니다. 대신 서비스 제공업체는 유휴 용량에 대한 비용 청구 없이 코드를 실행하고 요구사항을 충족할 수 있는 리소스를 확보할 수 있도록 백그라운드에서 모든 작업을 수행합니다.
서버리스는 집에 물을 공급하는 것과 같습니다. 직접 우물을 파고 수질을 테스트하고 집으로 물을 연결하는 데 필요한 모든 외부 배관을 설치하고 유지관리할 수 있습니다. 또는 도시의 주 상수도에 연결할 수 있습니다. 수도꼭지를 돌려 필요할 때 정확히 원하는 만큼 물을 얻을 수 있습니다. 그러면 시에서 정확한 물 사용량에 대해 매달 청구서를 발행해 줍니다.
마찬가지로 클라우드 제공업체는 서버리스 앱을 실행하는 데 필요한 인프라 리소스와 런타임 환경을 자동으로 가동하고 실행이 완료되면 자동으로 0으로 다시 축소합니다. 일반적으로 실행 시간 동안 리소스를 기준으로 요금이 청구됩니다. 하지만 이는 서비스와 공급업체에 따라 달라질 수 있습니다.
하지만 다른 유형의 클라우드 컴퓨팅은 사용한 만큼만 지불하는 방식으로 주문형 리소스를 제공하지 않나요? Infrastructure as a Service(IaaS) 및 Platform as a Service(PaaS)와 같은 클라우드 서비스 모델도 컴퓨팅 리소스에 대한 주문형 액세스를 제공하는 것은 사실입니다.
하지만 할당된 클라우드 인프라는 사용하지 않더라도 활성 상태로 유지됩니다. 서버 용량을 확장하거나 사용자 수요에 따라 확장 또는 축소하도록 애플리케이션을 구성하는 것도 개발자의 책임입니다.
반면 서버리스 아키텍처는 이벤트 기반입니다. 이 모델에서 제공업체는 이벤트가 코드 실행을 트리거하고 요청에 따라 즉시 자동으로 확장되는 경우에만 리소스를 제공합니다.
서버리스 클라우드 컴퓨팅에는 일반적으로 Function as a Service(FaaS)와 Backend as a Service(BaaS)라는 두 가지 유형의 서비스가 있습니다.
FaaS는 요청에 대한 응답으로 애플리케이션 로직을 실행하는 데 필요한 컴퓨팅 리소스를 제공합니다. 이러한 로직(또는 함수)는 클라우드 서비스 제공업체가 완전히 관리하는 컨테이너에서 실행됩니다. 서버리스 애플리케이션은 일반적으로 이벤트에 대한 응답으로 하나의 작업을 수행하는 단일 함수로 구분됩니다.
BaaS는 인증 서비스, 데이터베이스 관리, 클라우드 스토리지, 푸시 알림, 호스팅과 같은 웹 또는 모바일 애플리케이션의 전체 백엔드 기능을 서비스로 제공합니다. 또한 BaaS를 사용하면 서버, 컨테이너, 가상 머신을 관리할 필요가 없습니다.
개발 단계에서 '서버리스'라는 용어는 일반적으로 FaaS 제품을 설명하는 데 사용됩니다. 하지만 FaaS는 기술적으로 서버리스 기술의 하위 집합입니다. 서버리스 컴퓨팅에는 최종 사용자로부터 서버 관리, 구성, 확장, 청구를 추상화하는 모든 유형의 서비스가 포함됩니다. 여기에는 데이터베이스, 스토리지, 이벤트 스트리밍, 메시징, API 게이트웨이가 포함될 수 있습니다.
일반적으로 서버리스 컴퓨팅은 여전히 주로 간단한 단기 작업에 사용됩니다. 가장 일반적인 서버리스 컴퓨팅의 예는 다음과 같습니다.
개발자 생산성 향상
서버리스 지원 개발자는 인프라 프로비저닝, 관리, 확장에 대해 걱정할 필요 없이 코드 작성과 비즈니스 로직 최적화에 집중합니다.
즉시 사용 가능한 확장성
서버리스 아키텍처는 본적으로 확장되거나 축소됩니다. 규칙을 미세 조정해야 하는 다른 유형의 클라우드 컴퓨팅의 자동 확장과 달리 서버리스 자동 확장은 즉시 실행되며 0으로 축소할 수 있습니다.
유연한 가격 책정 방식
서버리스 가격 책정 모델은 실제 사용량과 함수를 실행하는 데 걸리는 시간을 기준으로 요금이 청구되는 경우가 많습니다. 또한 유휴 용량에 대한 비용을 지불하지 않으므로 자체 서버 실행 및 관리와 관련된 운영 비용을 절감할 수 있습니다.
더 빠른 배포
서버리스를 사용하면 DevOps팀은 코드 통합, 테스트, 전송 또는 배포에 필요한 인프라를 정의하는 데 시간을 소비할 필요가 없습니다. 작성한 후 프로덕션에 배포하기만 하면 됩니다.
모든 언어 사용
서버리스 환경은 모든 언어 또는 프레임워크를 지원하므로 팀은 Go, Python, Java, Node.js, .NET 등의 언어나 프레임워크를 사용하여 가장 편안하게 개발할 수 있습니다.
서버리스 컴퓨팅의 가장 큰 단점 중 하나는 비교적 새로운 기술이라는 것입니다. 따라서 모든 잠재적 사용 사례를 충족하기에 아직 적합하지 않습니다.
또한 서버리스는 의도적으로 임시적인 특성이 있고 0으로 축소할 수 있으므로 특정 유형의 애플리케이션에는 적합하지 않습니다. 이는 장기간 코드를 실행하도록 빌드되지 않았으며 금융 서비스 애플리케이션과 같이 지연 시간이 짧은 요구사항이 엄격한 애플리케이션을 항상 제공할 수는 없습니다.
마지막으로, 모든 컴퓨팅 리소스 관리를 제3자 제공업체에 맡기는 데 따른 이점이 있지만 몇 가지 단점도 따라올 수 있습니다. 코드에 집중할 시간을 확보할 수 있지만 새로운 클라우드 제공업체로 마이그레이션하기가 까다로울 수 있습니다. 또한 서비스가 실행되는 위치나 방법을 파악할 수 없고 확장 방법, 실행되는 하드웨어 코드 유형, 재해 복구 상황을 제한적으로 제어할 수 있습니다.
그럼에도 불구하 서버리스 컴퓨팅과 관련하여 마음에 드는 점이 많습니다. 특히 개발자가 더 빠르게 움직일 수 있도록 지원하고 클라우드 기반 애플리케이션을 빌드하기 위한 더 간단하고 비용 효율적인 방법을 찾고 있는 조직에 특히 유용합니다.
서버리스 컴퓨팅이 계속 발전함에 따라 현재의 일부 약점은 시간이 지남에 따라 해결될 수 있다는 점도 분명합니다. 특히 서버리스의 오픈소스를 구현하고 클라우드 서비스의 개방성을 높여 다양한 플랫폼과 환경에서 솔루션을 이식할 수 있는 방법을 찾기 위해 많은 노력을 기울이고 있습니다.