[AWS] 핵심 서비스 완전 정리 — EC2, ECR, ECS, RDS, S3

2026. 1. 16. 23:01CI·CD

반응형

AWS로 배포를 처음 해보면 이런 말들을 듣게 된다.

"이미지는 ECR에 올렸어요" "ECS 서비스 업데이트 해야 해요" "EC2 서버는 이미 떠 있어요" "DB는 RDS로 분리했어요" "정적 파일은 S3에 올려요"

처음엔 이게 다 뭔지 전혀 감이 안 온다. 이번 글에서는 EC2, ECR, ECS, RDS, S3가 각각 무엇인지 어떻게 사용되고 있는지 설명해보고자 한다.

한 줄 요약부터

EC2 내가 직접 관리하는 가상 서버
ECR Docker 이미지를 보관하는 창고
ECS Docker 컨테이너를 실행·관리하는 서비스
RDS 직접 관리할 필요 없는 관계형 데이터베이스
S3 파일·이미지·정적 리소스를 저장하는 스토리지

왜 이렇게 나눠져 있을까?

예전에는 서버 하나에 전부 다 했다. 앱 실행, DB 운영, 파일 저장, 업데이트, 장애 대응까지 다 했다. 그런데 요즘은 전부 역할을 분리해서 관리하고 있다.

[코드 실행]   → EC2 또는 ECS
[이미지 저장] → ECR
[데이터베이스] → RDS
[파일 저장]   → S3

 

역할이 나뉘면 각각 독립적으로 스케일을 조정하고 장애가 생겨도 다른 서비스에 영향이 덜 간다.

EC2란 무엇인가?

EC2 (Elastic Compute Cloud)

EC2는 "가상 컴퓨터"다. 실제 내 노트북 대신 AWS 데이터 센터에 있는 원격 컴퓨터 한 대를 빌리는 것이다.

 

EC2에서 할 수 있는 것들은 다음과 같다.

- Ubuntu / Amazon Linux 설치
- SSH 접속
- Node.js, Docker, Nginx 설치 및 설정
- 직접 서버 운영

 

 

서버 접근 SSH 가능
설정 전부 직접
Docker 직접 설치
운영 직접 관리

 

비유로 이해하자면 EC2는 빈 땅을 사서 집을 직접 짓는 것이다. 설계도 작성, 자재 구매, 유지보수까지 전부 내 몫이다.

ECR이란 무엇인가?

ECR (Elastic Container Registry)

ECR은 Docker 이미지를 저장하는 곳이다. 실행은 없고 저장만 한다.

 

Docker 이미지란 앱 코드, 라이브러리, 실행 환경을 하나로 묶은 파일이다. docker build의 결과물이 이미지다.

 

ECR이 할 수 있는건 다음과 같다.

- Docker 이미지 저장
- 버전 관리 (태그별로 관리 가능)
- ECS나 EC2가 이미지를 가져갈 수 있도록 제공

 

실행 안 함
저장
접근 AWS 인증 필요
사용 주체 ECS, EC2

 

비유로 이해하자면 ECR은 냉동 창고다. 요리는 안 하고 보관만 한다. 필요할 때 꺼내 쓰는 것이다.

ECS란 무엇인가?

ECS (Elastic Container Service)

ECS는 Docker 컨테이너를 실행하고 관리하는 서비스다.

 

ECS가 하는 일은 다음과 같다.

- Docker 이미지 실행
- 컨테이너가 죽으면 자동 재시작
- 여러 개 동시에 실행
- 트래픽 분산
- 업데이트 시 무중단 교체

 

ECS 구성 요소는 크게 두 가지다.

 

1. Task Definition은 어떤 이미지를 실행할지, 포트 번호, 환경 변수, 리소스 설정을 정의한다.

2. Service는 컨테이너를 몇 개 띄울지, 배포 전략, 상태 유지를 담당한다.

 

ECS 실행 방식은 두 가지다.

ECS on EC2  → EC2 위에서 ECS 실행. 서버는 있지만 ECS가 관리
ECS on Fargate → 서버 신경 안 써도 됨. 컨테이너만 신경쓰면 됨

 

비유로 이해하자면 ECS는 식당 매니저다. 요리사(컨테이너)를 몇 명 쓸지 결정하고, 한 명이 쓰러지면 대체 인력을 바로 투입한다.

RDS란 무엇인가?

RDS (Relational Database Service)

RDS는 AWS가 대신 관리해주는 관계형 데이터베이스 서비스다. MySQL, PostgreSQL, MariaDB 등을 EC2에 직접 설치하지 않고 AWS에게 운영을 맡기는 것이다.

 

EC2에 직접 DB를 설치하면 이런 것들을 전부 직접 해야 한다.

- DB 설치 및 설정
- 백업 스케줄 관리
- 버전 업그레이드
- 장애 시 복구
- 스토리지 용량 관리

 

RDS를 쓰면 이 모든 걸 AWS가 대신 처리해준다.

아래가 RDS가 해주는 것들이다.

- 자동 백업 (설정한 기간만큼 복원 가능)
- 멀티 AZ (가용 영역 이중화로 장애 시 자동 전환)
- 읽기 전용 복제본 (Read Replica) 생성
- 자동 스토리지 확장
- 모니터링 및 알림

 

설치 직접 AWS가
백업 직접 자동
장애 대응 직접 자동 전환
비용 상대적으로 저렴 상대적으로 비쌈
제어권 높음 낮음

 

RDS는 EC2 안에 두지 않고 별도로 분리해서 운영한다. 앱 서버가 죽어도 DB는 살아있고, DB 부하가 높아도 앱 서버에는 영향이 없다.

 

비유로 이해하자면 RDS는 전문 회계사를 고용하는 것이다. 내가 직접 장부를 쓸 수도 있지만, 전문가에게 맡기면 백업, 감사, 복구까지 알아서 해준다.

S3란 무엇인가?

S3 (Simple Storage Service)

S3는 파일을 저장하는 스토리지 서비스다. 용량 제한이 사실상 없고, 저장한 파일에 URL로 접근할 수 있다.

 

S3에 저장하는 것들이다.

- 이미지, 동영상, PDF 같은 정적 파일
- 프론트엔드 빌드 결과물 (React, Next.js 등)
- 로그 파일
- DB 백업 파일
- 사용자가 업로드한 파일

 

S3의 핵심 개념은 두 가지다.

 

1. 버킷(Bucket)은 파일을 담는 최상위 폴더 개념이다. 버킷 이름은 전 세계에서 유일해야 한다.

2. 객체(Object)는 버킷 안에 저장되는 파일 하나하나다. 키(경로) + 데이터 + 메타데이터로 구성된다.

버킷: my-app-bucket
객체: uploads/profile/user123.jpg
접근: https://my-app-bucket.s3.amazonaws.com/uploads/profile/user123.jpg

 

S3의 특징이다.

용량 사실상 무제한
내구성 99.999999999% (11 nine)
접근 방식 URL 또는 AWS SDK
정적 웹 호스팅 가능
버전 관리 가능

 

특히 프론트엔드 배포에 자주 쓰인다. React 앱을 빌드하면 HTML, CSS, JS 파일이 나오는데, 이걸 S3에 올리고 CloudFront(CDN)와 연결하면 서버 없이 전 세계에 빠르게 배포할 수 있다.

 

비유로 이해하자면 S3는 무한 용량의 구글 드라이브다. 단, 파일마다 URL이 생기고 권한 설정에 따라 누구나 접근하게 하거나 막을 수 있다.

반응형