☁️ 클라우드

AWS Fargate

서버리스 컨테이너 실행 환경

📖 상세 설명

AWS Fargate는 컨테이너를 위한 서버리스 컴퓨팅 엔진입니다. EC2 인스턴스를 프로비저닝하거나 관리할 필요 없이 컨테이너를 실행할 수 있습니다. Task(또는 Pod)에 필요한 vCPU와 메모리만 지정하면, AWS가 자동으로 적절한 인프라를 할당하고 관리합니다.

2017년 re:Invent에서 ECS용으로 출시되었고, 2019년부터 EKS에서도 사용 가능해졌습니다. "서버리스 컨테이너"라는 개념을 AWS에서 처음 상용화한 서비스로, EC2 기반 컨테이너 운영의 복잡성(패치, 스케일링, 용량 계획)을 완전히 제거합니다.

Fargate는 각 Task마다 전용 격리 환경(microVM)을 제공합니다. Firecracker 기술 기반으로 VM 수준의 격리를 제공하면서도 컨테이너 수준의 빠른 시작 시간(보통 30초 이내)을 달성합니다. 멀티테넌트 환경에서 보안이 중요한 워크로드에 적합합니다.

비용은 vCPU와 메모리 사용량 기준으로 초 단위 청구됩니다. EC2보다 GB당 비용은 높지만, 오버프로비저닝이 없고 운영 오버헤드가 없어 총 비용(TCO)은 오히려 낮을 수 있습니다. 특히 가변적인 워크로드나 작은 컨테이너들이 많은 경우 비용 효율적입니다.

💻 코드 예제

{
  "family": "my-fargate-task",
  "networkMode": "awsvpc",
  "requiresCompatibilities": ["FARGATE"],
  "cpu": "512",
  "memory": "1024",
  "executionRoleArn": "arn:aws:iam::123456789:role/ecsTaskExecutionRole",
  "taskRoleArn": "arn:aws:iam::123456789:role/myAppTaskRole",
  "containerDefinitions": [
    {
      "name": "my-app",
      "image": "123456789.dkr.ecr.ap-northeast-2.amazonaws.com/my-app:latest",
      "essential": true,
      "portMappings": [
        {
          "containerPort": 8080,
          "protocol": "tcp"
        }
      ],
      "logConfiguration": {
        "logDriver": "awslogs",
        "options": {
          "awslogs-group": "/ecs/my-fargate-task",
          "awslogs-region": "ap-northeast-2",
          "awslogs-stream-prefix": "ecs"
        }
      },
      "environment": [
        {"name": "NODE_ENV", "value": "production"}
      ],
      "secrets": [
        {
          "name": "DB_PASSWORD",
          "valueFrom": "arn:aws:secretsmanager:ap-northeast-2:123456789:secret:db-password"
        }
      ],
      "healthCheck": {
        "command": ["CMD-SHELL", "curl -f http://localhost:8080/health || exit 1"],
        "interval": 30,
        "timeout": 5,
        "retries": 3
      }
    }
  ]
}

🗣️ 실무에서 이렇게 말하세요

💬 아키텍처 설계 회의에서
"이 서비스는 트래픽 패턴이 불규칙하고 피크 타임에만 부하가 높으니까 Fargate가 적합해요. EC2 노드 그룹으로 하면 평소에 노는 인스턴스가 많을 거고, Fargate는 Task 단위로 정확히 필요한 만큼만 과금되니까요. 콜드 스타트는 30초 정도인데, 항상 minimum 2개 유지하면 사용자 경험에 문제없습니다."
💬 면접에서
"ECS Fargate로 마이크로서비스 20개를 운영한 경험이 있습니다. Task Definition에서 컨테이너별로 Secrets Manager 연동하고, Service Auto Scaling으로 CPU 70% 기준 스케일링 정책을 적용했어요. EC2 대비 운영 부담이 크게 줄었고, 야간 배치 작업은 Fargate Spot으로 전환해서 70% 비용 절감했습니다."
💬 비용 리뷰 미팅에서
"Fargate가 EC2보다 vCPU 단가는 비싸지만, 우리 워크로드는 평균 CPU 사용률이 20%밖에 안 돼요. EC2는 항상 100% 비용이 나가는데 Fargate는 실제 사용량만 과금되니까 총 비용은 오히려 저렴해요. 게다가 EC2 패치하고 AMI 관리하는 DevOps 인력 비용도 아끼는 거죠."

⚠️ 흔한 실수 & 주의사항

GPU나 특수 하드웨어 필요 시 선택

Fargate는 GPU, Inferentia, Custom AMI를 지원하지 않습니다. ML 추론이나 영상 인코딩 같은 GPU 워크로드는 EC2 기반을 사용해야 합니다. 또한 대용량 ephemeral storage가 필요한 경우 Fargate는 최대 200GB까지만 지원합니다.

리소스 사이즈 조합 무시

Fargate는 vCPU/메모리 조합이 정해져 있습니다. 예를 들어 0.25 vCPU는 0.5-2GB 메모리만 선택 가능합니다. 지원되지 않는 조합을 요청하면 Task가 시작되지 않으니, AWS 문서에서 지원 조합을 확인하세요.

올바른 접근법

awsvpc 네트워크 모드로 각 Task에 ENI를 할당하고, Private Subnet + NAT Gateway 구성으로 보안을 강화하세요. ECR 이미지 풀은 VPC Endpoint를 설정하면 NAT 비용도 절약됩니다.

🔗 관련 용어

📚 더 배우기