Amazon ECR 상세 가이드
ECR은 개발자가 컨테이너 이미지를 손쉽게 푸시(Push), 풀(Pull) 및 관리할 수 있게 해주는 안전하고 확장 가능한 서비스이다.
1. 왜 Docker Hub 대신 ECR을 쓸까?
- 보안 및 권한 관리 (IAM): AWS IAM과 완벽하게 통합된다. 특정 개발자나 특정 서버(EC2, ECS)만 이미지를 가져갈 수 있도록 세밀하게 제어할 수 있다.
- 네트워크 성능: 동일한 AWS 리전 내에서 이미지를 가져오기 때문에 속도가 매우 빠르고, 네트워크 비용(Data Transfer) 절감 효과가 있다.
- 이미지 취약점 스캐닝: 업로드한 이미지에 보안 취약점이 있는지 자동으로 검사해주는 기능을 제공한다.
- 고가용성: AWS 인프라를 사용하므로 저장된 이미지가 손실될 걱정이 없다.
2. ECR의 주요 개념
2.1. 리포지토리 (Repository)
- 특정 프로젝트나 마이크로서비스의 이미지를 담는 공간이다. (예:
my-api-server, payment-service)
- 각 리포지토리는 고유한 URI를 가진다. (예:
123456789012.dkr.ecr.ap-northeast-2.amazonaws.com/my-api-server)
2.2. 이미지 태그 (Image Tag)
- 동일한 이미지의 버전을 구분한다. (예:
latest, v1.0.1, build-123)
- 백엔드 배포 시 보통 Git의 커밋 해시나 빌드 번호를 태그로 사용하여 추적성을 높인다.
2.3. 수명 주기 정책 (Lifecycle Policy)
- "최근 이미지 10개만 남기고 나머지는 삭제" 또는 "태그가 없는 이미지는 7일 뒤 삭제" 같은 규칙을 정해 저장 비용을 절약할 수 있다.
3. 백엔드 개발자의 실무 워크플로우 (CLI 기준)
로컬이나 CI/CD 환경에서 ECR을 사용하는 4단계 과정이다.
STEP 1: ECR 로그인 (인증)
AWS CLI를 사용하여 도커 클라이언트를 ECR에 인증시킨다.
aws ecr get-login-password --region [리전] | docker login --username AWS --password-stdin [계정ID].dkr.ecr.[리전].amazonaws.com
STEP 2: 이미지 빌드
Dockerfile이 있는 위치에서 이미지를 빌드한다.
docker build -t my-api .
STEP 3: 이미지 태그 지정
로컬 이미지를 ECR 주소와 매칭되도록 별칭을 붙인다.
docker tag my-api:latest [계정ID].dkr.ecr.[리전][.amazonaws.com/my-api:v1](https://.amazonaws.com/my-api:v1)
STEP 4: 이미지 푸시
ECR 리포지토리로 이미지를 전송한다.
docker push [계정ID].dkr.ecr.[리전][.amazonaws.com/my-api:v1](https://.amazonaws.com/my-api:v1)
4. 백엔드 개발자 관점의 꿀팁
- 리포지토리 설정에서 '태그 불변성'을 활성화한다. 동일한
v1 태그로 이미지가 덮어씌워지는 것을 방지하여, 운영 환경에 배포된 버전의 일관성을 보장할 수 있다.
4.2. 이미지 스캔 기능 활용
- 이미지를 푸시할 때마다 자동으로 취약점 스캔이 돌아가게 설정한다. 백엔드 앱이 사용하는 베이스 이미지(Java, Python 등)나 라이브러리에 보안 문제가 있는지 즉시 확인할 수 있다.
4.3. 프라이빗 vs 퍼블릭
- 보통 기업용 서비스는 Private Repository를 사용한다. 외부인이 절대 내 소스 코드가 포함된 이미지를 볼 수 없도록 보호해야 한다.
5. 전체 배포 파이프라인에서의 ECR 위치
- Local/Git: 백엔드 코드 커밋
- CI (GitHub Actions/Jenkins): 코드 빌드 및 Docker 이미지 생성
- ECR: 이미지 보관 및 보안 스캔 (← 현재 단계)
- ECS/Fargate: ECR에서 이미지를 당겨와서(Pull) 서비스 실행