초보자를 위한 서버리스 컴퓨팅 이해
서버리스 컴퓨팅에 대한 오해와 진실
흔히 "서버리스" 컴퓨팅이라는 용어를 들으면, 서버 없이 코드를 실행하고 개발 작업을 수행하는 환경이라고 생각하기 쉽습니다. 하지만 이는 명백한 오해입니다.
그렇다면 왜 "서버리스"라는 이름이 붙었을까요? 그 이유를 알아보기 전에, 흔한 오해를 먼저 짚고 넘어가겠습니다.
실제로는 서버가 없는 것이 아니라, 서버를 관리하고 운영하는 방식이 "서버리스"의 핵심입니다. 즉, 개발자가 직접 서버를 관리하는 대신 클라우드 제공업체가 서버 관리를 대신해주는 것입니다.
복잡하게 들리시나요? 이제 서버리스 컴퓨팅에 대해 자세히 알아보면서, 관련된 용어들과 함께 여러분의 궁금증을 해소해 드리겠습니다. 서버리스는 현재 매우 인기 있는 기술이며, 그 시장 규모는 2016년 19억 달러에서 2021년에는 77억 달러로 급성장했습니다.
이제 서버리스에 대한 논의를 시작하고, 왜 이렇게 인기가 있는지 그 이유를 살펴보겠습니다.
서버리스 컴퓨팅이란 무엇인가?
서버리스 컴퓨팅은 클라우드 서비스 공급자가 필요에 따라 시스템 자원을 제공하고, 고객이나 개발자 대신 서버를 직접 관리하는 클라우드 기반 실행 모델입니다. 이는 개발자가 서버 관리에 대한 부담 없이 코드에만 집중하여 클라우드 기반 앱을 구축할 수 있도록 지원하는 방법입니다.
AWS나 Google Cloud Platform과 같은 클라우드 서비스 공급자는 리소스 할당, 용량 계획, 관리, 구성, 확장, 패치, 업데이트, 예약, 유지 관리 등 모든 공통 인프라 작업을 책임집니다. 결과적으로 개발자는 프로세스 및 애플리케이션의 비즈니스 로직에 집중할 수 있습니다.
서버리스 컴퓨팅 아키텍처는 컴퓨팅 자원을 휘발성 메모리에 저장하지 않습니다. 대신 컴퓨팅은 짧은 단위로 이루어지며, 애플리케이션이 사용되지 않을 때는 자원이 할당되지 않습니다. 즉, 실제로 소비한 자원에 대해서만 비용을 지불하게 됩니다.
서버리스 모델의 주요 목표는 코드 배포 프로세스를 단순화하여 생산성을 높이는 것입니다. 이 모델은 마이크로 서비스와 같은 기존 스타일과도 호환됩니다. 서버리스가 배포되면, 이를 지원하는 애플리케이션은 필요에 따라 자동으로 확장 또는 축소되며 수요에 신속하게 대응할 수 있습니다.
서버리스 컴퓨팅은 이벤트 기반 모델을 사용하여 확장 요구 사항을 결정합니다. 따라서 개발자는 더 이상 필요한 서버나 대역폭을 예측할 필요가 없습니다. 언제든지 요구 사항 증가에 따라 더 많은 서버와 대역폭을 요구하거나, 필요에 따라 축소할 수 있습니다.
서버리스는 어떻게 발전해 왔는가?
기존 시스템은 앱 개발 및 배포 과정에서 확장성과 유연성 문제에 직면해 있었습니다. 고품질 앱에 대한 요구와 빠른 시장 출시 필요성이 증가하면서 더 나은 확장성과 유연성을 제공하는 시스템에 대한 요구가 생겨났고, 클라우드 컴퓨팅과 서버리스 모델이 발전하게 되었습니다.
서버리스 모델은 모놀리식 구조에서 마이크로 서비스, 서버리스 아키텍처 또는 FaaS(Function-as-a-Service)까지 다양한 단계를 거쳐 발전해 왔습니다.
- 모놀리식 아키텍처는 소프트웨어 개발을 위한 전통적인 통합 방식입니다. 각 구성 요소와 하위 구성 요소가 밀접하게 결합되어 코드를 컴파일하거나 실행하는 방식입니다. 서비스에 문제가 발생하면 전체 애플리케이션 서버와 실행 중인 서비스가 중단될 수 있습니다.
- 마이크로 서비스 아키텍처는 특정 기능을 수행하기 위해 독립적으로 배포되는 작은 서비스 모음입니다. 이는 신속하게 대규모 앱을 제공하는 데 도움이 되며, IaaS(Infrastructure-as-a-Service) 및 PaaS(Platform as a Service)를 사용하여 개발자에게 유연성을 제공합니다. 하지만 이 모델에서는 PaaS와 IaaS 중에서 선택해야 하는 어려움이 있습니다.
- 서버리스 아키텍처는 클라우드 컴퓨팅과 함께 발전했으며, 확장성과 민첩성을 더욱 높였습니다. IaaS와 PaaS 대신 FaaS와 BaaS(Backend-as-a-Service)를 사용합니다. 이 아키텍처에서는 필요에 따라 자원을 배포하고, 서버를 관리할 필요 없이 코드 실행이 완료되면 비용 지불을 중단할 수 있습니다.
서버리스 컴퓨팅의 특징
서버리스 컴퓨팅의 주요 특징은 다음과 같습니다.
- 서버리스 애플리케이션은 대부분 단일 기능과 작은 코드 단위로 구성됩니다.
- 일반적으로 상태 비저장 소프트웨어 컨테이너에서 요청 시에만 코드가 실행되며, 요청에 따라 원활하게 확장됩니다.
- 사용자는 서버 관리에 대해 신경 쓸 필요가 없습니다.
- 요청을 실행하기 위해 함수가 트리거되거나 이벤트가 수신되면 컴퓨팅 환경이 생성되는 이벤트 기반 실행 방식을 사용합니다.
- 유연한 확장성으로 필요에 따라 쉽게 확장 또는 축소할 수 있습니다. 코드가 실행되면 인프라 실행이 중지되어 비용을 절감할 수 있으며, 필요에 따라 무한대로 확장할 수도 있습니다.
- 관리형 클라우드 서비스를 사용하여 파일 저장소, 대기열, 데이터베이스 등 복잡한 작업을 처리할 수 있습니다.
서버리스는 어떻게 작동하는가?

서버리스 아키텍처는 FaaS(Function-as-a-Service)와 BaaS(Backend-as-a-Service)라는 두 가지 주요 개념을 결합합니다. FaaS는 완전히 프로비저닝된 인스턴스 없이도 코드를 실행할 수 있도록 클라우드 서비스를 제공합니다. FaaS는 클라우드 서비스에 의해 완전히 관리되는 상태 비저장, 이벤트 중심, 확장 가능한 서버 측 함수로 구성됩니다.
이 모델을 통해 DevOps 팀은 비즈니스 로직에 집중한 코드를 작성할 수 있습니다. HTTP 요청과 같은 이벤트를 정의하여 함수를 트리거할 수 있으며, 클라우드 제공업체가 함수를 실행하고 결과를 사용자에게 전달합니다.
이러한 방식으로 서버리스 모델은 자동 확장, 온디맨드, 종량제 기능을 통해 비용 효율성과 편리성을 제공합니다. 따라서 많은 기업과 DevOps 팀이 서버리스로 전환하고 있습니다.
누가 서버리스를 사용하고 그 이유는 무엇인가?
서버리스는 소프트웨어 개발 분야에서 가장 빠르게 성장하는 기술 중 하나이며, 향후 인프라 관리 및 프로비저닝 요구 사항을 제거할 수 있는 잠재력이 있습니다.
다음과 같은 경우에 서버리스가 유용합니다.
- 더 나은 앱 테스트 기능과 확장성 및 유연성을 원하는 조직
- 민첩하고 고성능 앱을 구축하여 시장 출시 기간을 단축하려는 개발자
- 항상 서버를 실행할 필요가 없는 회사 (필요할 때 모듈 기반 기능을 호출하여 비용 절감)
- 효율적인 클라우드 기반 앱을 구축하고 클라우드 마이그레이션을 간소화하려는 조직
- 대기 시간을 줄여 사용자에게 앱 또는 기능에 대한 접근성을 높이려는 개발자
- IT 인프라 유지 관리에 충분한 자원이 없는 회사 (서버리스 컴퓨팅으로 문제 자동 해결 및 유지 관리 부담 감소)
서버리스 모델을 사용하는 대표적인 기업으로는 Slack, Coca-Cola, Netflix 등이 있습니다.
서버리스 모델은 다음과 같은 다양한 사용 사례에 적합합니다.
- 웹 애플리케이션: 사용자 요구에 빠르게 대응하는 빠르고 확장 가능한 웹 애플리케이션을 구축할 수 있습니다. 이는 즉시 시작 가능한 상태 비저장 앱과 예측할 수 없고 드물게 발생하는 사용자 수요 급증에 대응해야 하는 앱을 만드는 데 이상적입니다.
- API 백엔드: 서버리스 플랫폼에서는 모든 기능을 클라이언트가 사용할 수 있는 HTTP 엔드포인트로 쉽게 전환할 수 있습니다. 이러한 기능은 웹에서 활성화될 때 웹 액션으로 알려져 있습니다. API 게이트웨이를 사용하면 보안, 도메인 지원, 속도 제한, OAuth 지원 등의 기능을 추가할 수 있습니다.
- 마이크로 서비스: 서버리스는 단일 기능을 수행하고 API를 사용하여 서로 통신하는 작은 서비스를 구축하는 마이크로 서비스 모델에서 널리 사용됩니다. 서버리스는 소프트웨어 컨테이너 및 PaaS보다 효율적입니다. 이는 신속한 프로비저닝, 자동 확장, 유연한 가격 정책, 작은 코드 단위 지원 등의 장점을 제공합니다.
- 데이터 처리: 서버리스는 비디오, 오디오, 이미지, 구조화된 텍스트 등 다양한 데이터 처리에 적합합니다. 데이터 유효성 검사, 변환, 보강, 정리, 오디오 정규화, PDF 처리 등 다양한 작업을 처리할 수 있으며, 이미지 처리 (선명도 조정, 회전, 썸네일 생성, 노이즈 감소), 비디오 트랜스코딩, OCR(광학 문자 인식)에도 사용될 수 있습니다.
- 스트림/일괄 처리: Apache Kafka와 함께 FaaS 및 데이터베이스를 사용하여 강력한 스트리밍 앱과 데이터 파이프라인을 구축할 수 있습니다. 서버리스 모델은 앱 로그, IoT 센서, 비즈니스 로직, 금융 시장 데이터 등 다양한 스트림 수집에 적합합니다.
- 병렬 계산: 서버리스는 각 작업이 병렬로 실행되는 병렬 계산과 관련된 작업에 적합합니다. 데이터 검색, 처리, 지도 작업, 웹 스크래핑, 게놈 처리, 하이퍼파라미터 튜닝 등에 활용될 수 있습니다.
- 기타 용도: 서버리스는 CRM, 재무, 챗봇, 비즈니스 인텔리전스, 분석 등 다양한 애플리케이션에도 사용됩니다.
주의: 서버리스는 모든 경우에 적합한 것은 아닙니다. 예측 가능하고 일정한 워크로드가 있는 대형 앱은 기존 시스템 아키텍처에서 더 큰 이점을 얻을 수 있으며, 관리형 또는 자체 관리형 전용 서버로 이전하는 것이 더 효율적일 수 있습니다. 또한 기존 시스템 및 애플리케이션으로 구축된 환경에서 서버리스로 완전히 전환하는 데에는 많은 비용과 어려움이 따를 수 있습니다.
서버리스 컴퓨팅의 장단점
모든 기술에는 장단점이 있으며, 서버리스 아키텍처 또한 예외는 아닙니다. 어떤 경우에는 장점이 될 수 있는 요소가 다른 경우에는 단점이 될 수도 있습니다. 따라서 조직에 적합한지 판단하기 위해 서버리스의 양면을 모두 알아볼 필요가 있습니다.
장점 👍
- 비용 효율성: 서버리스는 사용하지 않는 리소스에 대해 비용을 지불하지 않으므로, 항상 실행되는 서버를 구매하거나 임대하는 것보다 비용 효율적일 수 있습니다. 종량제 모델을 사용하므로 실제로 사용한 리소스에 대해서만 비용을 지불합니다. 서버리스 공급자는 할당된 메모리나 유휴 시간에 대한 비용 없이 코드 실행 시간에 대해서만 비용을 청구합니다. 결과적으로 설치, 라이센스, 유지 관리, 패치 적용, 지원 등과 관련된 운영 비용을 절감할 수 있으며, 하드웨어 비용과 인건비도 절감됩니다.
- 확장성: 서버리스 시스템은 필요에 따라 자동으로 확장 및 축소될 수 있으므로 뛰어난 확장성을 제공합니다. 개발자가 Auto-Scaling 시스템을 설정하거나 조정하는 데 시간을 할애할 필요 없이, 클라우드 공급자가 모든 것을 관리합니다. 소규모 팀의 개발자도 지원 엔지니어나 인프라 없이 코드를 실행할 수 있습니다.
- 대기 시간 감소: 앱은 단일 서버에 호스팅되는 것이 아니라 어디에서나 코드를 실행할 수 있습니다. 클라우드 공급자가 지원한다면 최종 사용자와 가까운 서버에서 앱 기능을 실행할 수 있으며, 이는 사용자 요청과 서버 간의 거리를 줄여 대기 시간을 감소시킵니다.
- 생산성 향상: 서버리스 모델은 서버 관리의 부담을 덜어 개발자의 생산성을 높입니다. HTTP 요청 관리나 코드 멀티스레딩에 대해 신경 쓸 필요 없이, 백엔드 개발을 단순화합니다. 개발자는 FaaS(Function-as-a-Service) 덕분에 코드를 개선하는 데 집중할 수 있습니다.
- 더 빠른 앱 배포: 서버리스를 사용하면 개발자가 앱 버전을 배포하기 위해 백엔드를 구성하거나 코드를 서버에 업로드할 필요가 없습니다. 코드 배포 속도가 빨라 새로운 제품을 빠르게 출시할 수 있습니다. 또한 모놀리식 아키텍처와 달리 코드를 한 번에 배포하거나 순차적으로 배포할 수 있으며, 패치, 업데이트, 기능 추가 또는 앱 오류 수정이 용이합니다.
- 그 외에도 온디맨드 서버로 인한 에너지 소비 감소, 쉬운 앱 구축을 위한 통합 기능, 시장 출시 시간 단축 등의 장점이 있습니다.
단점 👎
- 성능: 자주 사용되지 않는 서버리스 코드는 전용 서버, 소프트웨어 컨테이너, VM(가상 머신)에서 지속적으로 실행되는 코드보다 응답 시간이 더 길 수 있습니다. 이는 다시 시작하고 추가적인 대기 시간을 발생시키기 때문입니다.
- 디버깅 및 테스트의 어려움: 서버리스 환경에서는 코드 실행 결과를 확인하고 디버깅하기가 어려울 수 있습니다. 개발자가 백엔드 프로세스에 대한 가시성이 부족하고 앱이 작은 기능으로 분할되어 있기 때문입니다.
- 보안 문제: 클라우드 공급자의 보안을 완벽하게 측정하고 파악하는 것은 불가능하므로, 민감한 데이터를 다루는 경우 보안 위험이 존재합니다.
- 장기 실행 애플리케이션에 부적합: 서버리스는 비용 효율적이지만 모든 유형의 애플리케이션에 적합한 것은 아닙니다. 장기 실행 프로세스가 있는 애플리케이션의 경우 서버리스를 사용할 때 비용이 매우 높아질 수 있으며, 전용 서버를 사용하는 것이 더 나을 수 있습니다.
- 그 외에도 한 공급업체에서 다른 공급업체로 전환하기 어렵고, 개인 정보 보호 문제도 고려해야 합니다.
서버리스 아키텍처에서 중요한 용어
서버리스 컴퓨팅에 대해 이야기할 때 빼놓을 수 없는 중요한 용어들이 있습니다. FaaS와 BaaS는 서버리스 발전에 큰 영향을 미친 개념이며, 서버리스 시스템을 구축하려면 데이터베이스, 저장 시스템, 기술 스택, 프레임워크 등이 필요합니다. 이제 이러한 용어들에 대해 자세히 알아보겠습니다.
FaaS (Function-as-a-Service)

FaaS는 서버리스의 핵심 개념으로, 서버리스 하위 집합처럼 작동합니다. 이 이벤트 기반 코드 실행 모델을 사용하면, 클라우드 플랫폼이 관리하는 소프트웨어 컨테이너에 배포되고 요청 시에 실행되는 로직을 작성할 수 있습니다.
BaaS와 비교했을 때, FaaS는 미리 만들어진 코드를 포함하는 라이브러리를 사용하는 대신 맞춤형 앱을 개발할 때 개발자에게 더 많은 제어 기능을 제공합니다. 코드가 배포된 소프트웨어 컨테이너는 데이터 통합을 단순화하기 위해 상태 비저장으로 유지되며, 코드는 짧은 시간 동안 실행됩니다. 개발자는 클라우드 공급자가 API 게이트웨이를 통해 관리하는 FaaS를 사용하여 API를 통해 서버리스 애플리케이션을 호출할 수 있습니다.
BaaS (Backend-as-a-Service)
BaaS는 타사 서비스 공급자가 필요하다는 점에서 FaaS와 유사합니다. 이 모델에서 클라우드 공급자는 개발자가 프런트엔드 코드 작성에 집중할 수 있도록 데이터 저장소와 같은 백엔드 서비스를 제공합니다. 그러나 BaaS 애플리케이션은 서버리스 앱처럼 이벤트 중심이거나 에지에서 실행되지 않을 수 있습니다.
BaaS의 대표적인 예시는 AWS Lambda입니다. 개발자는 코드를 제출할 때 따라야 할 지침을 제공하는 Lambda와 함께 컨테이너에서 서버리스 코드를 사용할 수 있습니다. 또한 소프트웨어 컨테이너에 코드를 입력하는 프로세스를 자동화하고 관리형 서비스를 제공합니다.
서버리스 스택
다른 소프트웨어 기술과 마찬가지로 서버리스 아키텍처에도 기술 스택이 필요합니다. 서버리스 시스템 또는 애플리케이션을 만드는 데 필수적인 다양한 구성 요소를 제공합니다.
서버리스 스택에는 다음 요소가 포함됩니다.
- 프로그래밍 언어: 개발자가 코드를 작성하는 데 사용되는 언어입니다. 공급업체에 따라 Java, JavaScript, Python, C#, Go, Node.js, F# 등을 선택할 수 있습니다.
- 서버리스 프레임워크: 코드에 구조를 제공하는 프레임워크입니다. 코드를 빌드, 패키징, 컴파일하여 클라우드 배포를 가능하게 합니다. 서버리스 프레임워크는 코딩 과정을 가속화하고 구성 시간을 줄여 확장성을 단순화합니다. Apex, AWS Serverless Application Model 등이 있습니다.
- 서버리스 데이터베이스: 코드에서 액세스해야 하는 데이터를 저장하는 데 사용됩니다. 트리거 기능을 활용하는 데도 필요합니다. 서버리스 데이터베이스는 서버리스 기능처럼 작동하지만 데이터를 무기한으로 저장합니다. DynamoDB, Azure Cosmos DB, Aurora Serverless, Cloud Firestore 등이 있습니다.
- 트리거: HTTP 요청과 같이 코드 실행을 시작하는 이벤트입니다.
- 소프트웨어 컨테이너: 서버리스 모델을 강화하고 복잡성 없이 컨테이너화된 마이크로 서비스를 제공합니다. 코드 저장소 역할을 하며, 다양한 플랫폼(데스크톱, iOS 등)용 코드를 작성하는 데 도움을 줍니다.
- API 게이트웨이: 웹 액션에 대한 프록시 역할을 합니다. HTTP 라우팅, 속도 제한, API 사용 및 응답 로그 확인, 클라이언트 ID 등을 제공합니다.
서버리스 모델을 구현하고 최적화하는 방법
서버리스로 전환하면 애플리케이션, 기술, 비용, 보안, 이점 등 다양한 측면에서 큰 변화가 발생합니다.
신생 기업이나 중소기업의 경우 서버리스는 시장 출시 시간을 단축하고 테스트, 디버깅, 피드백 수집, 문제 해결 등을 단순화하여 세련된 애플리케이션을 신속하게 사용자에게 제공할 수 있게 해줍니다.
대규모 조직은 사용자 요구 충족을 위해 더 큰 확장성과 같은 이점을 얻을 수 있지만, 상당한 비용 투자가 필요할 수 있습니다.
따라서 비즈니스 유형과 요구 사항에 따라 서버리스의 장단점을 신중하게 검토한 후 진행하는 것이 가장 좋습니다. 다음은 서버리스 도입 시 고려해야 할 사항입니다.
- 요구 사항을 정확히 파악하고 적합한 서버리스 기술 스택을 결정합니다.
- Google Cloud Functions, Azure Functions, AWS Lambda 등과 같은 서버리스 벤더를 선택합니다.
- 시스템 성능과 기능을 모니터링하는 강력한 도구를 사용하여 팀 역량을 강화합니다. 총 요청 수, 스로틀, 오류 수, 성공률, 요청 기간 및 대기 시간 등을 주의 깊게 확인합니다.
서버리스 공급업체

시중에는 다양한 서버리스 공급업체 또는 클라우드 공급업체가 있습니다. 주요 공급업체는 다음과 같습니다.
- AWS Lambda: AWS 서비스를 이미 사용하고 있는 조직에 적합합니다. 스토리지, 스트리밍, 데이터베이스 등 다양한 서비스와 통합됩니다.
- Microsoft Azure Functions: Visual Studio Code를 사용하는 경우에 적합하며, CI/CD용 DevOps와 Azure Pipelines와 원활하게 작동합니다. 상태 저장 기능을 위한 Durable Functions를 지원하고 통합 모니터링을 제공합니다.
- Google Cloud Functions: Google 서비스를 사용하고 있다면 적합합니다. JS, Go, Python 앱을 지원하고 Google 어시스턴트나 GCP에서 기능을 트리거할 수 있으며, 내장된 확장 기능을 제공합니다.
- IBM Cloud Functions: Apache OpenWhisk 기반의 서버리스 모델을 사용하고 싶은 경우에 적합합니다. 뛰어난 성능 모니터링, REST API 또는 IBM 클라우드 서비스의 이벤트 트리거를 포함하며, IBM API 게이트웨이와 통합되어 엔드포인트를 관리합니다.
- Knative: Kubernetes에서 서비스를 실행 중인 경우에 적합하며, Google, Red Hat, IBM 등이 지원합니다.
- Cloudflare Workers: 높은 응답성을 요구하는 앱, 특히 JavaScript 앱에 적합합니다. 데이터 저장을 위한 Workers KV와 여러 언어를 컴파일 및 제공하는 데 도움이 되는 WebAssembly를 지원합니다. 193개의 데이터 센터를 갖춘 분산 네트워크는 대기 시간과 응답성을 향상시킵니다.
결론: 서버리스의 미래
서버리스 컴퓨팅은 확장 가능한 애플리케이션에 대한 요구가 증가함에 따라 지속적으로 발전하고 있습니다. 또한 편리성, 비용 효율성, 생산성 향상 등 클라우드 컴퓨팅이 제공하는 다양한 이점을 제공합니다.
오라일리 조사에 따르면 응답자의 40%는 서버리스 아키텍처를 도입한 회사에서 근무합니다.
서버리스는 콜드 스타트로 인한 대기 시간, 테스트, 디버깅 등 몇 가지 문제점을 안고 있지만, 클라우드 공급업체들은 이러한 문제점을 개선하기 위해 노력하고 있습니다. 머지않아 더욱 발전된 형태의 서버리스가 더 많은 이점과 해결된 문제와 함께 등장할 것으로 예상됩니다. 따라서 향후 서버리스 모델의 인기와 활용도는 더욱 높아질 것으로 전망됩니다.
참고: 서버리스 컴퓨팅이 떠오르는 기술인 7가지 방법에 대한 글도 참고해 주세요.