어느 날 아침, 커피를 마시며 AWS 월간 비용 청구서를 열어본 당신. 예상보다 훨씬 높게 찍힌 숫자에 숨이 턱 막혔던 경험이 있으신가요? 분명 리소스 사용량을 예측하고 인스턴스를 띄웠는데, 왜 비용은 항상 예측을 벗어나는 걸까요? 저 역시 풀스택 개발자로서 수많은 프로젝트를 진행하며 이러한 '클라우드의 배신'을 여러 번 경험했습니다. 특히 트래픽 예측이 어려운 초기 스타트업이나 이벤트 기반 서비스를 운영할 때 이 고민은 더욱 깊어집니다. 이처럼 끝없이 솟구치는 클라우드 비용 문제에 대한 해답으로 많은 이들이 '서버리스', 그리고 그 중심에 있는 AWS Lambda를 이야기합니다. 하지만 정말 Lambda로 전환하기만 하면 모든 비용 문제가 해결되는 만병통치약일까요? 이 글에서는 장밋빛 전망 뒤에 숨겨진 현실적인 고민과 기술적인 트레이드오프까지, 현업 개발자의 시선으로 AWS Lambda를 사용한 비용 절감 사례를 낱낱이 파헤쳐 보겠습니다.
이 글에서 다룰 내용:
- 기존 EC2 방식이 왜 예상치 못한 비용을 발생시키는지 근본적인 원인 분석
- AWS Lambda가 어떤 원리로 비용을 절감하는지 핵심 개념 파악
- 실제 사례(API 서버, 이미지 처리)를 통한 EC2 vs Lambda 비용 심층 비교
- Lambda가 오히려 독이 될 수 있는 워크로드와 그 대안
- 비용 절감을 극대화하기 위한 스토리지, 스팟 인스턴스, 모니터링 종합 전략
1. 모든 문제의 시작: 예측 불가능성과 고정 비용의 덫
서버리스를 논하기 전에, 우리는 왜 기존의 방식에 문제를 느끼는지부터 명확히 해야 합니다. 가장 보편적인 클라우드 컴퓨팅 모델은 가상 서버, 즉 AWS에서는 EC2(Elastic Compute Cloud) 인스턴스를 할당받아 사용하는 것입니다. 이는 마치 월세로 사무실을 계약하는 것과 비슷합니다. 직원이 있든 없든, 일을 하든 안 하든 매달 고정된 월세를 내야 하는 것처럼, EC2 인스턴스는 실행되는 시간 내내 과금됩니다. 요청이 1초에 100번 들어오는 피크 타임이든, 새벽 시간에 아무도 접속하지 않아 CPU가 1% 미만으로 '놀고' 있든 비용은 동일하게 발생합니다.
이것이 바로 '오버 프로비저닝(Over-provisioning)'의 문제입니다. 우리는 최악의 상황, 즉 최대 트래픽을 감당하기 위해 필요보다 더 큰 사양의 서버를 준비해 둡니다. 예를 들어, 하루 중 단 1시간의 피크 타임을 위해 나머지 23시간 동안 불필요한 비용을 지불하는 셈입니다. Auto Scaling을 사용하면 어느 정도 탄력적으로 대응할 수 있지만, 스케일업/다운에 걸리는 시간, 최소 인스턴스 유지 비용 등 여전히 비효율은 존재합니다. 이러한 비효율을 관리하고 최적화하려는 움직임이 바로 FinOps(Financial Operations) 문화의 핵심이며, AWS EC2 인스턴스 비용 줄이기는 모든 클라우드 엔지니어의 숙명과도 같은 과제입니다.
결국 전통적인 IaaS(Infrastructure as a Service) 모델의 본질적인 한계는 '사용량'이 아닌 '점유 시간'에 기반한 과금 방식에 있습니다. 우리는 서버라는 공간을 빌렸고, 그 공간을 얼마나 효율적으로 쓰는지와 무관하게 임대료를 내는 것입니다.
이러한 구조적 문제를 해결하기 위해 등장한 패러다임이 바로 서버리스 컴퓨팅입니다.
2. 새로운 패러다임: AWS Lambda는 어떻게 작동하는가
AWS Lambda는 서버의 존재를 완전히 잊게 만드는 FaaS(Function as a Service)의 대표 주자입니다. 개발자는 더 이상 OS 패치, 보안 업데이트, 서버 스케일링을 고민할 필요 없이 오직 '코드(함수)'에만 집중하면 됩니다. Lambda의 가장 혁신적인 부분은 과금 모델에 있습니다. '점유 시간'이 아닌, '실제 실행 시간'과 '호출 횟수'에 대해서만 비용을 지불합니다. 아무도 함수를 호출하지 않으면 비용은 정확히 0원입니다.
EC2와 Lambda의 근본적인 차이점을 표로 비교해 보겠습니다.
| 항목 | EC2 (가상 서버) | AWS Lambda (서버리스 함수) |
|---|---|---|
| 과금 단위 | 인스턴스 실행 시간 (초/시간) | 호출 횟수 + 실행 시간 (밀리초) |
| 기본 상태 | 항상 실행 중 (Always-on) | 비활성 상태, 이벤트 발생 시 실행 |
| 확장성 (Scaling) | Auto Scaling 그룹 설정 필요, 스케일업/다운에 시간 소요 | 자동으로 동시 실행 수 확장 (이론상 무한대) |
| 관리 포인트 | OS, 런타임, 보안, 네트워크, 애플리케이션 코드 등 | 오직 애플리케이션 코드 |
| 유휴 비용 | 발생함 (CPU가 놀고 있어도 비용 지불) | 발생하지 않음 (호출이 없으면 비용 0) |
이 표에서 가장 주목할 점은 '유휴 비용'입니다. Lambda는 트래픽이 0일 때 비용도 0이 되는, 진정한 의미의 '사용한 만큼만 지불(Pay-as-you-go)' 모델을 구현합니다. 이제 구체적인 사례를 통해 이 차이가 실제 비용에서 얼마나 극적인 결과로 나타나는지 확인해 보겠습니다.
3. [사례 분석 1] 간헐적 트래픽을 처리하는 API 서버 비용 비교
가장 흔한 시나리오 중 하나인 모바일 앱의 백엔드 API 서버를 가정해 봅시다. 이 앱은 출퇴근 시간과 점심시간에 사용량이 집중되고, 새벽 시간에는 거의 트래픽이 발생하지 않는 특징을 가집니다.
시나리오 설정:
- 월간 총 API 요청 수: 300만 건
- 평균 API 처리 시간: 200ms
- API에 필요한 메모리: 512MB
3.1. 전통적인 EC2 방식의 비용
안정적인 서비스를 위해 최소 사양인 t3.small 인스턴스(2 vCPU, 2GB RAM)를 24시간 365일 운영한다고 가정해 보겠습니다. 이 인스턴스는 위에서 설정한 API를 처리하기에 충분한 사양입니다.
- 인스턴스 유형:
t3.small(서울 리전 기준) - 온디맨드 시간당 비용: 약 $0.0248
- 월간 비용 계산: $0.0248/시간 * 24시간/일 * 30일/월 = $17.86
여기에 데이터 전송 비용, EBS 스토리지 비용 등을 더하면 실제 비용은 조금 더 증가할 수 있습니다. 중요한 점은 월 300만 건의 요청을 처리하든, 10만 건을 처리하든 이 고정 비용은 거의 변하지 않는다는 사실입니다.
3.2. 서버리스 Lambda 방식의 비용
이제 동일한 워크로드를 API Gateway와 AWS Lambda를 사용하여 서버리스 아키텍처로 구현해 보겠습니다.
- 필요 메모리: 512MB
- 월간 요청 수: 3,000,000 건
- 평균 실행 시간: 200 ms
AWS Lambda 비용 계산 (서울 리전 기준):
- 실행 시간(GB-초) 비용:
- 월간 총 실행 시간(초): 3,000,000 * 0.2초 = 600,000초
- 월간 총 GB-초: 600,000초 * (512MB / 1024MB) = 300,000 GB-초
- GB-초당 비용: $0.0000166667
- 총 실행 비용: 300,000 * $0.0000166667 = $5.00
- 요청 횟수 비용:
- 100만 건당 비용: $0.20
- 총 요청 비용: 3 * $0.20 = $0.60
API Gateway 비용 계산:
- 100만 건당 비용: $4.25 (HTTP API 기준)
- 총 요청 비용: 3 * $4.25 = $12.75
최종 Lambda 방식 월간 총비용: $5.00 (Lambda 실행) + $0.60 (Lambda 요청) + $12.75 (API Gateway) = $18.35
어? 비용이 별 차이 없거나 오히려 더 비싼데요?
네, 맞습니다. 이 특정 시나리오에서는 EC2와 Lambda의 비용이 거의 비슷하게 나옵니다. 여기서 중요한 함의를 발견할 수 있습니다. 서버리스가 항상 저렴한 것은 아니다라는 사실입니다. API Gateway의 비용이 상당 부분을 차지하기 때문이죠. 하지만 만약 월간 요청 수가 100만 건으로 줄어든다면 어떨까요?
- EC2 비용: 여전히 $17.86 (고정비)
- Lambda 방식 비용: 약 $6.12 로 감소합니다.
트래픽이 예측보다 적거나 변동성이 클 때, Lambda의 비용 절감 효과는 극대화됩니다. 반면, 트래픽이 꾸준하고 매우 높다면 고정 비용을 내는 EC2가 더 유리해지는 역전 현상이 발생할 수 있습니다.
3.3. 심층 분석: 콜드 스타트(Cold Start)의 함정
비용 외에도 고려해야 할 기술적 트레이드오프가 있습니다. 바로 '콜드 스타트'입니다. Lambda 함수는 호출될 때 실행 환경(컨테이너)을 준비하는 과정이 필요한데, 한동안 호출이 없다가 처음 호출될 때 이 준비 시간 때문에 응답 지연이 발생할 수 있습니다. API 서버처럼 즉각적인 응답이 중요한 서비스에서는 이 몇백 밀리초의 지연이 치명적일 수 있습니다. 이를 해결하기 위해 '프로비저닝된 동시성(Provisioned Concurrency)' 기능을 사용하여 특정 수의 실행 환경을 항상 준비된 상태(Warm)로 유지할 수 있지만, 이는 유휴 상태에서도 비용이 발생하는 것을 의미하므로 Lambda의 핵심 장점인 '비용 0'을 포기하는 셈이 됩니다. 비용 최적화는 단순히 저렴한 서비스를 선택하는 것이 아니라, 이러한 성능과 비용 간의 균형점을 찾는 과정입니다.
4. [사례 분석 2] 이벤트 기반 데이터 처리 파이프라인
이번에는 Lambda가 거의 항상 압도적인 우위를 보이는 시나리오를 살펴보겠습니다. 사용자가 이미지를 S3 버킷에 업로드하면, 자동으로 썸네일(Thumbnail), 워터마크(Watermark) 버전 등 여러 사이즈의 이미지를 생성하여 다른 버킷에 저장하는 파이프라인입니다.
시나리오 설정:
- 월간 업로드되는 이미지 수: 10,000개
- 이미지 1개당 처리 시간: 3초
- 이미지 처리에 필요한 메모리: 1024MB
4.1. 전통적인 EC2 방식의 비용과 문제점
이 작업을 처리하기 위해 EC2 인스턴스는 S3 버킷에 새 파일이 올라왔는지 주기적으로 확인(Polling)하거나, SQS(Simple Queue Service) 같은 메시지 큐를 사용하여 작업을 전달받아야 합니다. 이 방식의 문제점은 명확합니다.
- 비효율적인 폴링: 아무런 이벤트가 없을 때도 EC2 인스턴스는 계속해서 "새로운 일 없어?"라고 물어보며 CPU와 네트워크 자원을 낭비합니다.
- 처리량 병목: 이미지가 동시에 100개 업로드된다면, 단일 EC2 인스턴스는 이 작업들을 순차적으로 처리해야 하므로 지연이 발생합니다. 이를 해결하려면 복잡한 워커(Worker) 관리 및 스케일링 로직을 직접 구현해야 합니다.
비용 측면에서도, 가장 저렴한 t3.micro 인스턴스를 24/7 실행한다고 가정해도 월 $8.93 정도의 고정 비용이 발생합니다. 이는 실제 작업 시간과는 무관한 비용입니다.
4.2. 서버리스 Lambda 방식의 비용과 장점
AWS Lambda는 이러한 이벤트 기반 아키텍처에 완벽하게 부합합니다. S3 버킷에 '객체 생성(ObjectCreated)' 이벤트가 발생할 때마다 Lambda 함수를 트리거하도록 설정하면 됩니다.
Lambda 비용 계산:
- 실행 시간(GB-초) 비용:
- 월간 총 실행 시간(초): 10,000 * 3초 = 30,000초
- 월간 총 GB-초: 30,000초 * (1024MB / 1024MB) = 30,000 GB-초
- 총 실행 비용: 30,000 * $0.0000166667 = $0.50
- 요청 횟수 비용:
- 월 100만 건까지 무료이므로, 10,000건은 무료 구간에 해당합니다. 비용: $0
최종 Lambda 방식 월간 총비용: $0.50
EC2의 $8.93과 비교했을 때 압도적으로 저렴합니다. 비용뿐만 아니라 아키텍처의 간결함과 확장성 측면에서도 비교가 불가능할 정도입니다. 이미지가 1개가 올라오든 1,000개가 동시에 올라오든, Lambda는 각각의 이벤트를 처리하기 위해 자동으로 1,000개의 실행 환경을 만들어 병렬로 처리합니다. 개발자는 스케일링에 대해 전혀 걱정할 필요가 없습니다.
4.3. 심층 분석: S3 스토리지 클래스와의 연계
이러한 데이터 처리 파이프라인은 스토리지 비용 최적화와 결합될 때 더욱 강력해집니다. 원본 이미지는 자주 접근하지 않을 가능성이 높으므로, Lambda 처리가 끝난 후 S3 수명 주기 정책(Lifecycle Policy)을 사용하여 자동으로 저렴한 스토리지 클래스로 이동시킬 수 있습니다. 이것이 바로 AWS S3 스토리지 클래스 비교가 중요한 이유입니다.
| 스토리지 클래스 | 주요 사용 사례 | 비용 (저장 용량) | 비용 (검색) |
|---|---|---|---|
| S3 Standard | 자주 액세스하는 데이터, 웹사이트, 동적 콘텐츠 | 가장 높음 | 없음 |
| S3 Intelligent-Tiering | 액세스 패턴을 알 수 없거나 변동이 심한 데이터 | 자동으로 계층 간 이동하며 비용 최적화 | 모니터링 비용 발생 |
| S3 Standard-IA | 자주 액세스하지 않지만 필요시 즉시 검색해야 하는 데이터 (백업, 재해 복구) | Standard보다 저렴 | 검색 비용 발생 |
| S3 Glacier Instant Retrieval | 분기당 한 번 정도 액세스하는 아카이브 데이터 (밀리초 단위 검색) | IA보다 저렴 | IA보다 검색 비용 높음 |
| S3 Glacier Flexible Retrieval | 몇 분에서 몇 시간 내에 검색해도 되는 아카이브 (백업) | 매우 저렴 | 검색 시간에 따라 비용 변동 |
예를 들어, 이미지 처리 파이프라인에서 원본 이미지는 30일 후 `S3 Standard-IA`로, 90일 후에는 `S3 Glacier Flexible Retrieval`로 자동으로 이동하도록 설정하여 스토리지 비용을 수십 배까지 절감할 수 있습니다. 이처럼 클라우드 비용 최적화는 컴퓨팅과 스토리지를 함께 고려하는 종합적인 접근이 필요합니다.
5. Lambda가 만능은 아니다: EC2가 더 유리한 경우
지금까지의 사례를 보면 Lambda가 모든 문제의 해결책처럼 보일 수 있습니다. 하지만 현실은 그렇지 않습니다. 특정 워크로드에서는 전통적인 EC2 방식이 비용과 성능 면에서 훨씬 더 효율적입니다. 무조건적인 서버리스 도입은 오히려 독이 될 수 있습니다.
Lambda 도입을 신중하게 고려해야 할 경우
- 지속적이고 높은 트래픽의 워크로드:
서버의 CPU 사용률이 24시간 내내 80~90%에 육박하는 서비스(예: 대규모 실시간 게임 서버, 스트리밍 서비스)의 경우, Lambda의 호출당/시간당 과금은 EC2의 고정 비용을 훨씬 초과하게 됩니다. 이런 경우에는 1년 또는 3년 약정으로 큰 할인을 받는 Savings Plans나 Reserved Instances를 사용하는 것이 절대적으로 유리합니다. 꾸준히 높은 트래픽은 더 이상 '예측 불가능성'이 아니기 때문입니다. - 장시간 실행이 필요한 작업:
AWS Lambda는 최대 실행 시간이 15분으로 제한됩니다. 따라서 3D 렌더링, 대규모 데이터 분석, 머신러닝 모델 학습 등 15분을 초과하는 작업은 Lambda로 처리할 수 없습니다. 이런 작업들은 EC2, AWS Batch, 또는 컨테이너 기반의 ECS/EKS Fargate가 더 적합한 선택지입니다. - 특수한 하드웨어나 OS 레벨 제어가 필요한 경우:
GPU 가속이 필요한 계산, 특정 커널 모듈을 설치해야 하는 작업, 혹은 WebSocket처럼 지속적인 연결이 필요한 프로토콜을 사용하는 애플리케이션은 Lambda 환경에서 구현하기 어렵거나 불가능합니다. 이 경우에도 해당 요구사항을 충족하는 특정 EC2 인스턴스 유형을 선택해야 합니다.
결국 기술 선택의 핵심은 '내 서비스의 워크로드 특성을 정확히 이해하는 것'입니다. 이벤트 기반이고 트래픽 변동성이 크다면 Lambda를, 예측 가능하고 꾸준하며 무거운 작업이라면 EC2를 선택하는 것이 합리적입니다.
6. 비용 절감을 극대화하는 추가 전략들
서버리스 전환 외에도 AWS 비용을 절감할 수 있는 강력한 도구들이 많이 있습니다. 진정한 비용 최적화는 이러한 전략들을 유기적으로 결합할 때 완성됩니다.
6.1. Spot 인스턴스 효과적으로 사용하기
Spot 인스턴스는 AWS의 남는 EC2 용량을 경매 방식으로 최대 90%까지 할인된 가격에 사용하는 제도입니다. AWS가 해당 용량을 필요로 할 경우 2분 전에 통보하고 회수해갈 수 있다는 단점이 있지만, 이 특징을 잘 활용하면 엄청난 비용 절감이 가능합니다.
- 적합한 워크로드: CI/CD 빌드 작업, 배치 데이터 처리, 렌더링 팜, 상태를 저장하지 않는 웹 서버 그룹 등 중단되어도 큰 문제가 없거나 다른 인스턴스가 작업을 이어받을 수 있는 경우.
- 주의사항: 언제든 중단될 수 있으므로 데이터베이스처럼 상태를 유지해야 하는 중요한 서버에는 절대 사용해서는 안 됩니다. Spot Fleet이나 Auto Scaling 그룹과 결합하여 중단 시 다른 유형의 인스턴스나 온디맨드 인스턴스로 대체되도록 설계하는 것이 중요합니다.
Spot 인스턴스 효과적으로 사용하기의 핵심은 '중단 가능성'을 아키텍처 수준에서 어떻게 처리할 것인지에 대한 명확한 계획을 세우는 것입니다.
6.2. 모든 것의 시작: AWS Cost Explorer 활용 팁
최적화의 첫걸음은 측정입니다. 내가 어디에 돈을 쓰고 있는지 모른다면 비용을 줄일 수 없습니다. AWS Cost Explorer는 AWS 비용을 시각화하고 분석할 수 있는 가장 강력한 기본 도구입니다.
AWS Cost Explorer 활용 팁:
- 서비스별 비용 분석: 가장 많은 비용을 차지하는 서비스(EC2, S3, RDS 등)를 파악하는 것이 급선무입니다.
- 태그(Tag) 기반 비용 추적: 모든 리소스에 'Project', 'Team', 'Environment' 등의 태그를 일관되게 적용하세요. 이를 통해 특정 프로젝트나 팀에서 발생하는 비용을 정확하게 분리하여 추적하고 책임 소재를 명확히 할 수 있습니다. FinOps의 기본입니다.
- RI 및 Savings Plans 사용률 보고서: 약정 할인을 구매했다면, 이 보고서를 통해 내가 구매한 플랜을 얼마나 효율적으로 사용하고 있는지(낭비는 없는지) 반드시 확인해야 합니다.
- 비용 이상 감지(Cost Anomaly Detection): 갑작스러운 비용 급증을 자동으로 감지하고 알려주는 기능을 활성화하여 예상치 못한 '요금 폭탄'을 방지할 수 있습니다.
Cost Explorer를 매일, 또는 최소한 매주 확인하는 습관을 들이는 것만으로도 불필요한 비용 누수를 막는 데 큰 도움이 됩니다.
결론: 정답은 없다, 최적의 조합이 있을 뿐
다시 처음의 질문으로 돌아가 보겠습니다. "AWS Lambda 전환, 정말 클라우드 비용 절감의 정답일까?" 이 글을 통해 우리가 내릴 수 있는 결론은 "상황에 따라 다르다"입니다.
Lambda는 이벤트 기반, 간헐적 트래픽, 예측 불가능한 워크로드에서 놀라운 비용 효율성과 운영의 편리함을 제공하는 혁신적인 도구임이 분명합니다. 특히 이미지 처리 파이프라인과 같은 작업에서는 기존 EC2 방식과 비교할 수 없는 장점을 가집니다. 하지만 꾸준하고 높은 트래픽을 처리하는 서비스에서는 오히려 비용이 더 많이 발생할 수 있으며, 콜드 스타트와 같은 기술적 한계도 명확히 존재합니다.
진정한 클라우드 비용 최적화는 하나의 기술을 맹신하는 것이 아니라, 내 서비스의 특성을 정확히 분석하고 그에 맞는 최적의 도구들을 조합하는 능력에서 나옵니다. 어떤 부분은 Lambda로, 어떤 부분은 EC2 Reserved Instance로, 또 어떤 부분은 Spot 인스턴스로 구성하는 하이브리드 아키텍처가 가장 현명한 답이 될 수 있습니다. 그리고 이 모든 과정의 기반에는 AWS Cost Explorer를 통한 꾸준한 모니터링과 FinOps 문화가 자리 잡고 있어야 합니다.
지금 바로 시작해 보세요.
당신의 AWS 청구서를 열고 가장 많은 비용을 차지하는 항목을 살펴보세요. 그리고 그 워크로드의 특성을 분석해 보세요. 만약 트래픽 변동성이 크고 유휴 시간이 길다면, 작은 기능 하나부터 Lambda로 전환하는 파일럿 프로젝트를 시작해 보는 것은 어떨까요? 작은 변화가 당신의 다음 달 청구서에 놀라운 차이를 만들어낼 수 있습니다.
Post a Comment