개인의 기록
  • 소개
  • 프로젝트
  • 글
  • 링크

© 2026 newgirok

← 글 목록

ECS — 컨테이너 오케스트레이션

2026년 3월 16일
AWSECSDocker컨테이너

ECS(Elastic Container Service)는 AWS에서 Docker 컨테이너를 실행하고 관리하는 완전 관리형 컨테이너 오케스트레이션 서비스입니다. 여러 서버에 분산된 컨테이너의 배포, 스케줄링, 스케일링, 헬스 체크를 자동으로 처리합니다.

컨테이너 하나를 수동으로 EC2에 올리는 것은 간단합니다. 그러나 수십 개의 컨테이너를 여러 서버에서 운영하면서 장애 시 자동 재시작, 트래픽에 따른 자동 스케일링, 무중단 배포를 구현하려면 오케스트레이션 도구가 필요합니다. ECS는 AWS 환경에 최적화된 이 역할을 담당합니다.

ECS의 핵심 구성 요소

Cluster (컴퓨팅 자원 묶음)
|
+-- Service (장기 실행 작업 관리자)
|     |
|     +-- Task (실행 중인 컨테이너 묶음) [인스턴스 1]
|     +-- Task (실행 중인 컨테이너 묶음) [인스턴스 2]
|     +-- Task (실행 중인 컨테이너 묶음) [인스턴스 3]
|
+-- Task (독립 실행 배치 작업)

Task Definition (설계도 — Task 생성 시 참조)

Cluster — 컴퓨팅 자원의 집합

Cluster는 ECS가 컨테이너를 실행할 수 있는 컴퓨팅 자원의 논리적 묶음입니다. EC2 인스턴스들의 그룹이거나, 서버가 없는 Fargate 환경일 수 있습니다.

EC2 Launch Type을 사용하는 경우, Cluster에 EC2 인스턴스를 등록하면 ECS Agent가 인스턴스 위에서 실행되며 ECS Control Plane과 통신합니다.

Task Definition — 컨테이너 실행 설계도

Task Definition은 컨테이너를 어떻게 실행할지 정의하는 JSON 형식의 설계도입니다. 한 번 정의하면 버전(revision)으로 관리됩니다.

Task Definition에 포함되는 주요 설정은 다음과 같습니다.

{
  "family": "my-web-app",
  "containerDefinitions": [
    {
      "name": "web",
      "image": "123456789012.dkr.ecr.ap-northeast-2.amazonaws.com/my-app:1.0.0",
      "cpu": 256,
      "memory": 512,
      "portMappings": [
        { "containerPort": 3000, "hostPort": 3000 }
      ],
      "environment": [
        { "name": "NODE_ENV", "value": "production" }
      ],
      "logConfiguration": {
        "logDriver": "awslogs",
        "options": {
          "awslogs-group": "/ecs/my-web-app",
          "awslogs-region": "ap-northeast-2"
        }
      }
    }
  ],
  "requiresCompatibilities": ["FARGATE"],
  "networkMode": "awsvpc",
  "cpu": "256",
  "memory": "512"
}

하나의 Task Definition 안에 여러 컨테이너(사이드카 패턴)를 정의할 수 있습니다. 예를 들어 웹 애플리케이션 컨테이너와 로그 수집 에이전트 컨테이너를 함께 정의하는 방식입니다.

Task — 실행 중인 컨테이너 단위

Task는 Task Definition을 기반으로 실제로 실행 중인 컨테이너(또는 컨테이너 묶음)입니다. Task Definition이 Class라면 Task는 Instance에 비유할 수 있습니다.

Task는 두 가지 방식으로 실행됩니다.

  • 독립 실행(Run Task): 배치 처리처럼 한 번 실행하고 완료되면 종료되는 단기 작업
  • Service를 통한 실행: 웹 서버처럼 항상 지정된 수의 Task가 실행 상태를 유지해야 하는 장기 작업

Service — Task의 상태 유지 관리자

Service는 지정한 수의 Task가 항상 Cluster 안에서 실행되도록 유지하고 관리하는 컨트롤러입니다.

Service의 핵심 기능은 다음과 같습니다.

  • 자동 복구: Task가 비정상 종료되면 자동으로 새 Task를 시작합니다.
  • 스케일링: 원하는 Task 수(Desired Count)를 조정하거나 Auto Scaling 정책으로 자동 확장/축소합니다.
  • 로드 밸런서 연동: ALB(Application Load Balancer)와 연결하여 트래픽을 여러 Task에 분산합니다.
  • 무중단 배포: 새 Task Definition으로 업데이트할 때 Rolling Update 또는 Blue/Green 방식으로 다운타임 없이 배포합니다.

전체 배포 흐름

[개발자]
    |
    | 1. Dockerfile 수정 & docker build
    | 2. ECR에 새 이미지 push
    | 3. Task Definition 새 revision 등록
    | 4. ECS Service 업데이트 (새 Task Definition 지정)
    v
[ECS Service]
    |
    | 5. 새 Task 시작 (새 이미지 사용)
    | 6. 헬스 체크 통과 확인
    | 7. 기존 Task 종료
    v
[사용자] <- 무중단으로 새 버전 서비스 중

ECS는 Kubernetes보다 학습 곡선이 낮고 AWS 서비스와의 통합이 자연스러워, Kubernetes의 복잡성이 필요하지 않은 팀에 적합한 선택입니다.

← 이전 글ECR — Docker 이미지 저장소
다음 글 →Fargate — 서버 없이 컨테이너 실행