TL;DR#
- 서버리스는 서버가 없다는 뜻이 아니라, 개발자가 서버를 관리할 필요가 없는 환경을 뜻합니다. 클라우드 제공업체가 프로비저닝·스케일링·운영을 추상화합니다.
- 구성은 크게 FaaS(Function as a Service)와 BaaS(Backend as a Service)로 나뉘며, 이벤트가 발생할 때만 함수를 실행하고 종료하는 구조입니다.
- 종량제 요금과 자동 스케일링으로 유휴 비용을 줄이지만, 콜드 스타트·실행 시간 제한·벤더 락인 같은 trade-off가 따릅니다.
문제의 배경#
전통적인 웹 개발 환경에서 서버를 직접 운영하는 일은 부담이 큽니다. 서비스가 성장하면 다음과 같은 난제에 부딪힙니다.
- 인프라 프로비저닝: 트래픽을 예측해 서버 사양을 정하고 OS 설정, 런타임 설치 등을 직접 해야 합니다.
- 오토 스케일링: 갑작스러운 트래픽 증가에 대응할 시스템을 구축하기가 복잡합니다.
- 유휴 비용: 트래픽이 없는 시간대에도 서버는 계속 가동되므로 불필요한 비용이 발생합니다.
- 보안 및 업데이트: OS 보안 패치나 시스템 업데이트를 개발자가 직접 관리해야 합니다.
해결 방안 탐색#
이런 고질적인 문제를 풀기 위해 등장한 것이 서버리스(Serverless) 모델입니다. 서버리스는 서버가 실제로 존재하지 않는다는 뜻이 아니라, 개발자가 서버를 관리할 필요가 없는 환경을 뜻합니다. 클라우드 서비스 제공업체(AWS, GCP, Azure 등)가 서버 운영의 전 과정을 자동화해 추상화해 줍니다.
핵심 개념 및 아키텍처#
서버리스 아키텍처는 주로 FaaS(Function as a Service)와 BaaS(Backend as a Service)로 구성됩니다.
동작 원리#
클라이언트가 이벤트를 발생시키면, 클라우드 환경이 필요한 시점에만 함수를 실행하고 종료하는 구조입니다.
- 이벤트 기반 실행: 사용자의 요청이나 DB 트리거 등이 발생할 때만 실행됩니다.
- 자동 스케일링: 요청이 1개든 1,000개든 클라우드가 알아서 인스턴스를 늘려 처리합니다.
- 종량제 요금제: 함수가 실행된 시간과 메모리 사용량에 대해서만 비용을 지불합니다.
구현 및 트러블슈팅#
AWS Lambda 기반 예시 (Node.js)#
서버리스 함수는 최소 단위의 기능(Function)으로 작성합니다.
// lambda-handler.ts
import { APIGatewayProxyEvent, APIGatewayProxyResult } from 'aws-lambda';
export const handler = async (event: APIGatewayProxyEvent): Promise<APIGatewayProxyResult> => {
try {
const { name } = JSON.parse(event.body || '{}');
return {
statusCode: 200,
body: JSON.stringify({
message: `Hello ${name}! Welcome to Serverless World.`,
}),
};
} catch (error) {
return {
statusCode: 500,
body: JSON.stringify({ message: "Internal Server Error" }),
};
}
};
트러블슈팅: 콜드 스타트(Cold Start) 문제#
함수가 오랫동안 실행되지 않으면 해당 인스턴스는 회수됩니다. 이후 첫 요청 시 런타임 환경을 다시 구축하는 데 시간이 걸리는데, 이를 콜드 스타트라고 합니다.
해결 방안은 다음과 같습니다.
- 정기적인 핑(Ping)을 보내 인스턴스를 활성화 상태로 유지합니다.
- 런타임 바이너리 크기를 최소화해 부팅 속도를 높입니다.
- AWS의 경우 'Provisioned Concurrency' 옵션으로 미리 인스턴스를 준비해 둡니다.
결과 및 Trade-off#
얻은 성과#
- 비용 절감: 서버 유휴 시간의 낭비 비용을 0으로 줄일 수 있습니다.
- 생산성 극대화: 서버 관리 인력이 필요 없으며, 개발자는 비즈니스 코드에만 집중할 수 있습니다.
- 빠른 시장 출시(Time to Market): 복잡한 설정 없이 빠르게 서비스를 배포할 수 있습니다.
Trade-off 및 한계점#
- 벤더 락인(Vendor Lock-in): 특정 클라우드 서비스의 전용 API와 환경에 종속될 수 있습니다.
- 실행 시간 제한: 대부분의 FaaS는 최대 실행 시간이 15분 내외로 제한되어 복잡한 연산에는 부적합합니다.
- 로컬 디버깅의 복잡성: 클라우드 환경과 완벽히 일치하는 로컬 테스트 환경을 구축하기가 까다롭습니다.
마치며#
서버리스 아키텍처는 단순한 트렌드를 넘어 현대 백엔드 개발의 표준 중 하나로 자리 잡았습니다. 특히 트래픽이 불규칙한 스타트업이나, 마이크로서비스 아키텍처(MSA)를 지향하는 팀에게 좋은 선택지가 될 수 있습니다.
참고 자료: