서버리스(Serverless)는 개발자가 서버 관리에 대한 걱정 없이 비즈니스 로직과 코드 작성에만 집중할 수 있도록 클라우드 제공자가 인프라를 자동으로 관리해주는 클라우드 컴퓨팅 모델이다.
서버리스라는 용어는 "서버가 전혀 없다"는 의미가 아니라 실제 서버는 존재하지만 개발자들이 인프라의 구성, 관리, 유지보수 같은 복잡한 작업들을 하지 않아도 된다는 의미이다. 즉, 서버 관리는 클라우드 서비스 제공자가 자동으로 처리하고 개발자는 단순히 작성한 코드를 클라우드에 업로드하고 실행시키기만 하면 된다.
과거의 소프트웨어 개발 방식에서는 개발자가 애플리케이션을 운영하기 위해 물리적인 서버를 직접 구매하거나 임대하여 운영체제 설치부터 웹 서버, 미들웨어 구성, 배포와 모니터링에 이르기까지 모든 과정에 신경 써야 했다. 이러한 전통적인 방식에서는 트래픽 예측이 힘들었고 예상치 못한 트래픽 급증 시 빠른 확장이 어렵다는 문제점도 있었다. 또한 서버의 유지보수와 보안, 성능 튜닝 등 지속적인 관리 비용도 만만치 않았다. 이러한 불편함을 해결하기 위해 등장한 것이 바로 클라우드 컴퓨팅이며 특히 클라우드 컴퓨팅의 진화된 형태인 서버리스(Serverless)는 서버의 존재 자체를 개발자 시야에서 완전히 제거하여 인프라 관리에 대한 부담을 최소화하였다.
서버리스는 크게 BaaS(Backend as a Service)와 FaaS(Function as a Service)로 구분된다.
BaaS는 애플리케이션을 개발할 때 필요한 여러 백엔드 서비스 기능을 클라우드 제공자가 미리 준비해놓은 상태로 제공하는 서비스이다. 예를 들어 인증 및 권한 관리, 데이터베이스 관리, 스토리지 관리, 푸시 알림, 사용자 관리 등을 API 형태로 제공한다. 개발자는 이를 활용하여 별도의 서버 구축 없이 손쉽게 앱이나 웹 서비스의 백엔드를 구축할 수 있다.
대표적인 서비스
장점
FaaS는 특정 작업이나 이벤트에 대응하여 독립된 함수를 실행하는 형태의 서비스이다. 함수는 이벤트가 발생할 때만 실행 환경이 생성되고 작업을 완료한 후에는 실행 환경이 즉시 종료되어 리소스를 효율적으로 관리할 수 있다. 개발자는 이벤트에 대응하는 함수만 작성하여 클라우드 서비스에 배포하면 된다.
대표적인 서비스
장점
서버리스 환경은 크게 다음과 같은 흐름으로 동작한다
즉, 서버리스 환경에서는 실행 요청이 있을 때만 자원이 활성화되고 그 외의 시간에는 자원이 해제되어 비용이 절약된다.
서버리스는 다음과 같은 경우에 유용하다
- 트래픽이 불규칙하고 예측이 어려운 서비스
- 빠른 MVP 제작 및 빠른 배포가 요구되는 스타트업 환경
- 특정 이벤트 발생 시 짧은 작업을 처리하는 경우 (예: 이미지 변환, 이메일 발송, 알림 처리)
- 마이크로서비스 기반의 이벤트 주도형(Event-driven) 아키텍처
서버리스(FaaS)는 일반적으로 요청 수와 함수 실행 시간을 기준으로 과금한다. AWS Lambda 기준으로 아래와 같은 구조이다.
이를 통해 적은 트래픽을 가진 서비스나 간헐적 요청에 매우 경제적인 운영이 가능하다.
서버리스에 대해 알아본 이유는 현재 내가 진행하고 있는 선물 추천 서비스에 이를 적용할 수 있을지 고민하기 위해서였다. 서버리스의 장점인 자동 확장성과 비용 효율성을 생각할 때 내가 개발 중인 선물 추천 서비스는 초기 트래픽이 불규칙할 것으로 예상되므로 서버리스로 전환하면 초기 비용 부담을 크게 낮추면서 안정적으로 서비스를 운영할 수 있을 것으로 기대된다. 다만 외부 API 호출이나 긴 실행 시간이 필요한 로직 부분에서는 Cold Start와 실행 시간 제한 같은 서버리스의 단점을 고려하여 보완책을 마련해야 할 것으로 판단된다.
참고