본문 바로가기

Certificate/AWS SAA-C03

[AWS-SAA] 12. 컨테이너, ECS, Fargate, ECR, EKS 요약

Docker 및 AWS 컨테이너 서비스 통합 정리

1. Docker 개요

Docker는 애플리케이션을 컨테이너라는 격리된 환경에 패키징하여 어디서든 일관되게 실행할 수 있게 해주는 기술이다. OS 종속성이 없고, MSA(마이크로서비스 아키텍처) 구현에 최적화되어 있다.

컨테이너는 VM과 달리 Host OS 위에서 직접 실행되며, 매우 가볍고 빠르게 기동된다. 컨테이너 간 자원 공유가 가능하나, 보안적으로 완벽하게 격리되진 않기 때문에 신중한 설계가 필요하다.

2. Docker 동작 방식

Docker는 Docker 데몬이 백그라운드에서 작동하며, 명령을 받아 이미지를 빌드하고 컨테이너를 실행한다.

Dockerfile을 작성한 후, 빌드 명령어로 이미지를 생성하고, 해당 이미지를 Docker Hub나 ECR 같은 저장소에 업로드한다. 실행 시, 이미지를 pull 받아 컨테이너를 생성한다.

3. Docker vs 가상머신

Docker는 Host OS를 공유하여 리소스 효율이 높고, 빠르게 실행되며 크기도 작다. 반면, VM은 하이퍼바이저 위에 각각 독립된 OS가 올라가 무겁고 느리다. EC2는 VM 기반이며, Docker는 프로세스 기반으로 동작한다.

4. AWS에서의 Docker 이미지 저장 (ECR)

ECR은 AWS에서 제공하는 Docker 이미지 저장소다. 퍼블릭/프라이빗 설정이 가능하며, ECS나 EKS와 긴밀히 통합되어 있다. 이미지 보안 검사, 버전 관리, 태그, 수명 주기 설정이 가능하고, IAM 기반 접근 제어가 적용된다.

5. ECS (Elastic Container Service)

ECS는 AWS에서 제공하는 관리형 컨테이너 오케스트레이션 서비스다. Docker 이미지를 실행하고, 서비스 형태로 관리하며, 클러스터, 태스크, 서비스 개념으로 구성된다.

ECS는 두 가지 시작 유형을 지원한다.

EC2 시작 유형
EC2 인스턴스를 직접 프로비저닝하여 클러스터를 구성하고, 해당 인스턴스에 컨테이너를 실행한다. 인프라 관리가 필요하다.

Fargate 시작 유형
서버리스 방식으로 EC2 인프라를 직접 관리하지 않는다. CPU, 메모리 등을 태스크 정의에 포함하면 AWS가 인프라를 자동 할당한다.

6. ECS IAM 역할 구성

EC2 인스턴스 역할
ECS 에이전트가 동작하며, 해당 역할을 사용해 ECS 서비스와 통신하고 ECR에서 이미지를 가져오며, 로그를 CloudWatch로 전송한다.

ECS 태스크 역할
각 태스크 단위로 IAM 역할을 부여하여 S3, DynamoDB, Secrets Manager 등에 접근할 수 있다. 보안상 태스크마다 최소 권한 역할을 구성하는 것이 권장된다.

7. ECS와 로드밸런서 통합

ALB(Application Load Balancer)를 사용하면 HTTP(S) 트래픽을 ECS 태스크에 분산시킬 수 있다. ALB는 ECS의 서비스 디스커버리와 통합되어 있으며, 다중 AZ에서도 작동한다. 고성능 또는 PrivateLink 사용 시에는 NLB를 활용할 수 있다.

8. ECS의 파일 스토리지 연동

ECS는 S3를 파일 시스템처럼 마운트할 수 없지만, EFS(Elastic File System)를 통해 공유 파일 시스템을 컨테이너에 마운트할 수 있다. Fargate에서도 EFS를 마운트할 수 있어 서버리스 환경에서 영속적인 스토리지가 가능하다.

9. ECS 오토스케일링

ECS 서비스는 태스크 수를 자동으로 스케일링할 수 있으며, CPU/메모리 사용률 또는 ALB 요청 수 등을 기준으로 조정한다. EC2 시작 유형에서는 EC2 오토스케일링도 함께 관리해야 한다. Fargate에서는 인프라 관리 없이 태스크 수만 조절하면 된다.

10. Event 기반 ECS 활용 사례

  • S3에 객체 업로드 → EventBridge로 전달 → ECS 태스크 트리거
  • 시간 기반 배치 작업 → EventBridge 스케줄러 → ECS 태스크 실행
  • SQS 메시지 수 증가 → ECS 서비스 오토스케일링 트리거
  • ECS 태스크 종료 이벤트 → EventBridge → SNS 알림

11. EKS (Elastic Kubernetes Service)

EKS는 AWS의 관리형 Kubernetes 서비스로, 쿠버네티스 기반 컨테이너 오케스트레이션을 제공한다. 표준 K8s API를 사용하여 벤더 종속성을 줄이고, 멀티 클라우드 호환성을 확보할 수 있다.

EC2 모드에서는 워커 노드를 EC2 인스턴스로 구성하며, 노드 그룹을 ASG로 관리할 수 있다. Fargate 모드에서는 서버리스로 K8s Pod를 실행할 수 있다.

EKS는 VPC 기반으로 구성되며, 각 AZ의 프라이빗 서브넷에 노드를 배치하여 고가용성을 구현할 수 있다.

12. EKS에서의 볼륨 및 스토리지

EKS는 CSI(Container Storage Interface) 기반으로 다양한 스토리지 백엔드를 지원한다. EBS, EFS, FSx 시리즈 등이 Kubernetes의 PersistentVolume 형태로 연결될 수 있다. 스토리지 클래스는 manifest 파일에 명시하여 사용할 수 있다.

13. AWS App Runner

App Runner는 개발자가 코드나 Docker 이미지만 제공하면 자동으로 빌드, 배포, 확장까지 처리해주는 완전 관리형 웹 애플리케이션 호스팅 서비스다.

서버나 클러스터 구성 없이 자동 스케일링, HTTPS 인증서, 로드밸런싱, 로그 및 모니터링을 제공하며, 단순한 웹 서비스나 API를 빠르게 프로덕션 환경에 배포할 수 있다.

코드를 직접 올리면 빌드 → 컨테이너화 → 배포가 자동화되며, App Runner는 ECS/Fargate 기반으로 동작하되, 사용자는 인프라를 인식할 필요가 없다.

14. 컨테이너 서비스 비교 요약

  • Docker는 컨테이너를 생성하고 실행하는 기술적 기반
  • ECS는 Docker 컨테이너를 AWS에서 운영하기 위한 관리형 플랫폼
  • EKS는 Kubernetes 환경을 AWS에서 운영하기 위한 관리형 서비스
  • Fargate는 ECS/EKS에서 사용할 수 있는 서버리스 컨테이너 실행 엔진
  • ECR은 Docker 이미지를 저장하고 배포하기 위한 이미지 레지스트리
  • App Runner는 코드나 이미지만으로 웹 애플리케이션을 자동 배포하는 고수준 서비스