개발/infra

[infra/terraform] ec2와 ecs, fargate

2ivii 2025. 11. 19. 11:37

지난 글에서는 Docker가 무엇인지 정리했다. 이제 본격적으로 AWS에서 도커를 “어디서, 어떻게” 돌릴지 알아보자.

 

AWS에서 서버를 돌리는 방법을 크게 나누면

1) EC2 위에 직접 애플리케이션을 올리는 방식
2) ECS 같은 컨테이너 오케스트레이션을 사용하는 방식

으로 볼 수 있다.

그리고 ECS 안에서도 컨테이너를 실제로 어디서 돌릴지에 따라

- ECS on EC2 모드
- ECS on Fargate 모드

로 나뉜다.

그래서 실무에서 자주 듣는 이름이 바로 이 세 가지다

  • EC2 (서버 자체를 직접 운영)
  • ECS (컨테이너를 관리하는 서비스)
  • Fargate (ECS가 컨테이너를 '서버리스'로 실행하는 방식)

이 세개에 대해 아래서 더 다뤄보겠다!

 


EC2란?

EC2를 한 줄로 표현하면 “리눅스 서버 한 대를 빌리는 것”이다. EC2는 그냥 컴퓨터다.

  • OS 설치
  • Java 설치
  • Docker 설치
  • 포트 설정
  • 보안 패치
  • 서버 크기 조절
  • 장애 나면 다시 켜기

이 모든 걸 직접 해야 한다.

 

EC2 켜기 → Java 설치 → JAR 옮겨 넣기 → nohup 실행 → 죽으면 다시 실행

 

완전 수동이다.

장점
  • 제어권 100% (원하면 뭐든 설치 가능)
  • 서버 내부까지 마음대로 만질 수 있음
단점
  • 직접 관리해야 해서 귀찮음
  • 장애나면 새벽에 깨서 서버 재부팅해야 함
  • 확장(스케일링) 어려움

ecs란?

EC2가 “컴퓨터 전체를 운영하는 방식”이라면, ECS는 그 위에서 도커 컨테이너만 관리해주는 서비스다. ECS는 "어떤 이미지를 몇 개 돌릴지"만 정의하면 된다. 대표 개념은 아래와 같이 3개가 있다.

task definition

 

얘는 "컨테이너 실행 레시피”이다.

  • 어떤 이미지?
  • 어떤 포트?
  • 어떤 환경변수?
  • CPU/메모리 몇?

이런 설정을 전부 담아두는 문서인 것이다.

task


얘는 컨테이너 한 개이고 Task Definition는 실제 실행한 객체이다.

service


Task 여러 개 유지하고, 죽으면 자동 복구시켜준다. 

gitfit-dev-svc → Task 2개 유지

 

이렇게 해두면 컨테이너가 죽어도 자동 재시작된다.  

 

ecs는 장애 복구도 자동으로 하고 배포 자동화 매우 쉽고 확장성이 뛰어나지만, ECS는 관리자일 뿐, 서버가 없다. 즉 컨테이너를 돌릴 머신이 따로 필요하다. 이 머신이 바로 ec2나 fargate를 선택하는 것이다.

Fargate란?

EC2를 완전히 숨겨버린 “서버리스 컨테이너”이다. 즉 ECS는 관리만 하고
실제 실행은 Fargate가 한다. 

 

fargate는 아래와 같은걸 해준다.

  • EC2 자동 생성
  • 용량 자동 조절
  • Docker 엔진 자동 설치
  • OS 패치 자동
  • 장애 자동 복구
  • 리소스(메모리/CPU) 정확히 사용한 만큼만 비용 부과

그래서 우리가 아래와 같이만 적어도 알아서 fargate가 컨테이너를 띄워준다! 

cpu = 256
memory = 512
task 개수 = 1
이미지 = ECR latest

 


EC2 vs ECS vs Fargate 비교

역할 서버 직접 실행 컨테이너 관리 시스템 컨테이너 실행 엔진
서버 필요 필요 필요(Fargate 없으면) 필요 없음(서버리스)
환경변수 직접 설정 Task Definition 설정 Task Definition + AWS 환경변수 자동
스케일링 어렵고 수동 쉬움 매우 쉬움
관리 부담 많음 중간 거의 없음
비용 인스턴스 유지비 EC2 or Fargate 기반 사용한 만큼만 과금
배포 난이도 제일 높음 중간 제일 쉬움

마무리

  • EC2 = 컴퓨터 한 대 직접 관리
  • ECS = 컨테이너 관리 시스템
  • Fargate = 컨테이너를 실제로 실행하는 서버리스 플랫폼

그래서 요즘 실무에서는 ECS + Fargate 조합이 가장 많이 쓰인다.
특히 서버 관리 경험이 적거나, 인프라 규모가 빠르게 변하는 서비스라면
EC2를 직접 운영하는 것보다 훨씬 안정적이고 유지 보수도 쉽다.

 

반대로,

  • 커스텀 네이티브 설치가 필요하거나
  • 컨테이너 기반이 아닌 레거시 서버를 운영해야 하거나
  • 아주 작은 프로젝트에서 비용을 더 아끼고 싶으면

EC2 한 대로도 충분한 경우가 있다.

결국 서비스 규모와 운영환경에 따라 선택이 달라진다! 라고 생각하면 될 거 같다!