1. ECR이 뭔데?


AWS ECR(Elastic Container Registry)은 아마존에서 제공하는 완전 관리형 Docker 컨테이너 레지스트리다. Docker Hub처럼 이미지를 저장하고 관리하는 곳인데, AWS 생태계와 완벽하게 통합되어 있다는 게 가장 큰 특징이다.

Docker Hub vs ECR 비교로 이해하면 쉽다:

Docker Hub는 공공 도서관 같은 곳이다. 누구나 책(이미지)을 올릴 수 있고, 전 세계 사람들이 자유롭게 열람할 수 있다. 오픈소스 프로젝트나 공개 이미지를 공유하기 좋지만, 회사의 중요한 코드를 올리기엔 보안이 걱정된다.

ECR은 회사 내부 서고다. AWS 계정을 가진 사람만 접근할 수 있고, IAM(AWS 권한 관리 시스템)으로 누가 어떤 이미지를 볼 수 있는지 세밀하게 통제할 수 있다. 특히 AWS의 다른 서비스(ECS, EKS, Lambda 등)와 바로 연결되기 때문에 배포가 매우 빠르고 간편하다.

ECR을 선택해야 하는 경우:

2. ECR에 이미지 푸시하는 전체 과정


로컬에서 빌드한 이미지를 ECR로 올리는 과정은 4단계로 진행된다. 각 단계를 자세히 살펴보자.


2-1) ECR Repository 생성

aws ecr create-repository --repository-name next15-app

ECR에 이미지를 푸시하려면 먼저 이미지를 담을 "저장소(Repository)"를 만들어야 한다. 이건 마치 GitHub에 코드를 올리기 전에 먼저 레포지토리를 만드는 것과 같은 원리다. 명령어를 실행하면 JSON 형태의 응답이 돌아온다:

{
    "repository": {
        "repositoryArn": "arn:aws:ecr:ap-northeast-2:123456789012:repository/next15-app",
        "registryId": "123456789012",
        "repositoryName": "next15-app",
        "repositoryUri": "123456789012.dkr.ecr.ap-northeast-2.amazonaws.com/next15-app",
        "createdAt": "2024-01-15T10:30:00.000000+09:00"
    }
}

여기서 repositoryUri가 매우 중요하다. 이 주소가 바로 이미지를 푸시하고 풀(pull)할 때 사용하는 ECR 레포지토리의 전체 주소다.