
AWS Fargate: 서버 없이 컨테이너를 실행하는 시대
EC2 인스턴스를 직접 관리하던 시대에서, 컨테이너만 정의하면 나머지는 AWS가 알아서 해주는 시대로. Fargate가 왜 탄생했고, 어떻게 작동하며, 언제 써야 하고 언제 쓰지 말아야 하는지를 실전 관점에서 풀어본다.

EC2 인스턴스를 직접 관리하던 시대에서, 컨테이너만 정의하면 나머지는 AWS가 알아서 해주는 시대로. Fargate가 왜 탄생했고, 어떻게 작동하며, 언제 써야 하고 언제 쓰지 말아야 하는지를 실전 관점에서 풀어본다.
이전 글에서 ECS가 컨테이너의 배치·복구·스케일링·배포를 자동화한다고 설명했다. 하지만 ECS를 EC2 런치 타입으로 사용하면, 여전히 한 가지 짐이 남는다 — EC2 인스턴스 관리.
ECS가 컨테이너를 관리해 주지만, 그 컨테이너가 돌아갈 EC2 인스턴스는 여전히 당신의 몫이다:
이 마지막 질문이 특히 골치 아프다. ECS 서비스가 태스크를 10개로 늘리려 하는데, EC2 인스턴스에 빈 자원이 없으면? 새 인스턴스를 띄워야 하는데, EC2 Auto Scaling은 별도로 설정해야 한다. 두 레이어의 스케일링을 동기화하는 것은 운영의 복잡성을 크게 높인다.
"컨테이너만 정의하면, 그 아래의 서버는 알아서 처리되면 안 되나?"
2017년 AWS re:Invent에서 공개된 Fargate가 정확히 이 질문에 답한다.
AWS Fargate는 ECS(또는 EKS)에서 컨테이너를 실행할 때, EC2 인스턴스를 프로비저닝하거나 관리할 필요 없이 컨테이너를 직접 실행하는 서버리스 컴퓨팅 엔진이다.
핵심 개념: Fargate는 ECS의 대체가 아니라 런치 타입(Launch Type) 이다.
태스크 정의, 서비스, 클러스터 — ECS의 모든 개념이 동일하다. 달라지는 것은 누가 인프라를 관리하는가뿐이다.
이전 글들의 비유를 이어가면:
서버리스(Serverless)라는 용어가 처음 주목받은 것은 2014년 AWS Lambda의 출시다. "코드 조각을 올리면 서버 없이 실행된다"는 개념이었다. 하지만 Lambda에는 제약이 있었다:
Fargate는 서버리스의 개념을 컨테이너에 적용한 것이다. Lambda의 제약 없이 — 어떤 언어든, 어떤 프레임워크든, 얼마나 오래 실행하든 — Docker 컨테이너를 서버리스로 실행할 수 있다.
UC Berkeley의 연구팀은 2019년 논문 "Cloud Programming Simplified: A Berkeley View on Serverless Computing"에서 서버리스의 본질을 이렇게 정의했다:
서버리스 컴퓨팅의 핵심은 자원 관리와 운영의 책임을 클라우드 사업자에게 이전하는 것이다.
이 논문은 서버리스가 단순히 "서버가 없다"는 것이 아니라, 운영 복잡성의 추상화 레벨을 한 단계 올리는 것이라고 설명한다. EC2가 하드웨어를 추상화했고, ECS가 컨테이너 배치를 추상화했고, Fargate가 서버 관리 자체를 추상화했다.
Fargate의 내부 작동 방식은 AWS가 2019년 re:Invent 및 2020년 USENIX ATC에서 일부 공개했다.
핵심 기술: Firecracker
2018년, AWS는 Firecracker라는 오픈소스 경량 가상화 기술을 공개했다. Lambda와 Fargate의 기반이다.
Firecracker는 microVM — 초경량 가상 머신을 생성한다. 각 Fargate 태스크는 전용 Firecracker microVM 안에서 실행된다.
왜 microVM인가? 일반 컨테이너는 커널을 공유하므로 격리가 완벽하지 않다. 멀티테넌트 환경(여러 고객의 워크로드가 같은 서버에서 실행)에서는 하드웨어 수준의 격리가 필요하다. Firecracker는 컨테이너의 가벼움과 VM의 보안성을 결합했다.
Fargate에서 태스크가 실행되는 과정:
사용자 관점에서 달라지는 것은 거의 없다. 태스크 정의에서 "requiresCompatibilities": ["FARGATE"]를 지정하고, cpu와 memory를 Fargate 지원 조합으로 설정하면 된다.
Fargate의 가격은 EC2보다 단위 자원 기준으로 20~40% 비싸다. 하지만 총 소유 비용(TCO)은 다른 이야기다.
| 항목 | ECS + EC2 | ECS + Fargate |
|---|---|---|
| 컴퓨팅 단가 | 저렴 | 20~40% 높음 |
| EC2 인스턴스 관리 인건비 | 발생 | 없음 |
| OS 패치/보안 | 직접 | AWS |
| 유휴 자원 비용 | 발생 (인스턴스 여유분) | 없음 (사용량만 과금) |
| 스팟 인스턴스 활용 | 가능 (최대 70% 절감) | Fargate Spot (최대 70% 절감) |
Fargate를 선택하라:
EC2 런치 타입을 선택하라:
EC2 런치 타입과 거의 동일하지만, 몇 가지 차이가 있다:
{
"family": "my-api",
"requiresCompatibilities": ["FARGATE"],
"networkMode": "awsvpc",
"cpu": "512",
"memory": "1024",
"executionRoleArn": "arn:aws:iam::role/ecsTaskExecutionRole",
"containerDefinitions": [
{
"name": "api",
"image": "123456789.dkr.ecr.ap-northeast-2.amazonaws.com/my-api:1.0",
"portMappings": [
{ "containerPort": 8080, "protocol": "tcp" }
],
"logConfiguration": {
"logDriver": "awslogs",
"options": {
"awslogs-group": "/ecs/my-api",
"awslogs-region": "ap-northeast-2",
"awslogs-stream-prefix": "ecs"
}
}
}
]
}
Fargate 전용 설정:
requiresCompatibilities: ["FARGATE"] 필수networkMode: awsvpc 필수 (각 태스크가 고유 IP 확보)cpu/memory: Fargate가 지원하는 조합만 사용 가능Fargate는 임의의 CPU/메모리 조합을 쓸 수 없다. 지원되는 조합이 정해져 있다:
| vCPU | 메모리 범위 | 용도 예시 |
|---|---|---|
| 0.25 | 0.5~2 GB | 경량 사이드카, 크론 작업 |
| 0.5 | 1~4 GB | 소규모 API, 마이크로서비스 |
| 1 | 2~8 GB | 일반 웹 서비스 |
| 2 | 4~16 GB | 중규모 API, 백엔드 |
| 4 | 8~30 GB | 대규모 API, 데이터 처리 |
| 8 | 16~60 GB | 고성능 워크로드 |
| 16 | 32~120 GB | 메모리 집약 워크로드 |
aws ecs create-service \
--cluster my-cluster \
--service-name my-api \
--task-definition my-api:1 \
--desired-count 3 \
--launch-type FARGATE \
--network-configuration '{
"awsvpcConfiguration": {
"subnets": ["subnet-abc", "subnet-def"],
"securityGroups": ["sg-123"],
"assignPublicIp": "DISABLED"
}
}' \
--load-balancers '[{
"targetGroupArn": "arn:aws:...",
"containerName": "api",
"containerPort": 8080
}]'
EC2 런치 타입과 비교했을 때 추가되는 것은 networkConfiguration뿐이다. 서브넷, 보안그룹, 퍼블릭 IP 할당 여부를 지정한다.
2019년에 도입된 Fargate Spot은 EC2 스팟 인스턴스의 개념을 Fargate에 적용한 것이다. AWS의 유휴 Fargate 용량을 최대 70% 할인된 가격에 사용할 수 있다.
EC2 스팟과 마찬가지로 AWS가 용량을 필요로 하면 2분 전 통보 후 회수할 수 있다. 하지만 ECS 서비스의 자동 복구 기능과 결합하면 실용적이다:
{
"capacityProviderStrategy": [
{ "capacityProvider": "FARGATE", "base": 2, "weight": 1 },
{ "capacityProvider": "FARGATE_SPOT", "weight": 3 }
]
}
이 설정이면 최소 2개는 온디맨드로 보장하고, 추가 태스크는 75% 확률로 Spot에 배치된다.
시드 단계 (팀원 3~5명):
시리즈 A (팀원 15~30명):
시리즈 B 이후 (팀원 50명+):
Fargate는 항상 실행되는 서비스뿐 아니라 간헐적 배치 작업에 특히 강하다.
예: 매일 새벽 3시에 데이터 분석 작업을 실행해야 한다. 30분 걸리는 작업이다.
EC2로 하면:
Fargate로 하면:
이것이 Fargate의 진짜 강점이다. 항상 실행되는 서비스에서는 EC2와 비용 차이가 크지 않지만, 실행 시간이 짧은 간헐적 워크로드에서는 압도적으로 저렴하다.
GitHub Actions이나 CodeBuild에서 빌드한 이미지를 Fargate에 배포하는 전형적인 파이프라인:
전체 과정이 5~10분. 개발자가 코드를 Push하면 자동으로 프로덕션까지 배포된다. 서버 접속, 수동 배포, 서비스 재시작 — 이런 것이 전혀 필요 없다.
Fargate 태스크는 시작 시 이미지를 Pull해야 한다. 이미지가 크면 시작이 느려진다.
scratch 이미지에 넣으면 10~20MB로 줄일 수 있고, 시작 시간이 수 초 이내로 단축된다.Fargate에서는 SSH로 서버에 접속할 수 없다. 로깅과 모니터링이 더욱 중요하다:
awslogs 드라이버 설정 (필수)# ECS Exec으로 실행 중인 컨테이너에 접속
aws ecs execute-command \
--cluster my-cluster \
--task arn:aws:ecs:... \
--container api \
--interactive \
--command "/bin/sh"
Fargate 비용을 추적하는 핵심:
이 시리즈를 통해 우리는 인프라의 추상화가 어떻게 진화해 왔는지를 따라왔다:
각 단계에서 개발자가 신경 써야 할 것이 하나씩 줄어들었다. Fargate에 이르면 개발자가 관리하는 것은 Docker 이미지와 태스크 정의뿐이다. 서버가 몇 대인지, 어떤 OS인지, 어떤 패치가 필요한지 — 이 모든 것이 보이지 않는다.
클라우드 글에서 말했듯, 인프라는 보이지 않을수록 좋다. Fargate는 그 비전에 가장 가까운 현재의 도달점이다.
코어닷투데이의 AI 서비스들 — 추론 API, 데이터 파이프라인, 모니터링 시스템 — 이 Fargate 위에서 실행될 때, 개발팀은 인프라 관리 대신 AI 모델의 품질과 사용자 경험에 집중할 수 있다. 그것이 바로 서버리스 컨테이너의 진짜 가치다.