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)를 지향하는 팀에게 좋은 선택지가 될 수 있습니다.
참고 자료: