본문 바로가기
개발/DevOps

Docker-hub, AWS ECR 비교하기

by smink 2025. 4. 16.
반응형

개요

현재는 GitHub Actions를 통해 main 브랜치에 merge되었을 때, EC2 인스턴스에 작성해 둔 Shell Script를 실행하여 Spring Boot API 서버를 배포하고 있습니다.

이러한 방식은 간단하게 배포를 자동화할 수 있다는 장점이 있지만, 다음과 같은 문제점이 있었습니다.


기존 배포 방식의 문제점

  1. 🚨무중단 배포의 어려움
    서버를 중지하고 다시 시작하는 방식이기 때문에, 배포 시 사용자에게 순간적인 장애가 발생할 수 있습니다.
  2. 롤백의 어려움
    문제가 생겼을 때 이전 버전으로 되돌리는 과정이 수동적이고 번거롭습니다.
  3. 트래픽 증가 대응의 어려움
    EC2 인스턴스 하나에서 모든 요청을 처리하기 때문에, 트래픽이 늘어날 경우 확장이 어렵습니다.
  4. 환경 간 일관성 부족
    로컬과 운영 환경의 설정 차이로 인해 예기치 못한 문제가 발생할 수 있습니다.

Docker & Kubernetes 도입 이유

이러한 문제점을 해결하기 위해 Docker와 Kubernetes 도입을 검토하게 되었습니다.

  • Docker는 이미지 기반의 배포 방식으로, 애플리케이션을 환경에 구애받지 않고 실행할 수 있습니다. 버전 태그를 통해 빠른 롤백이 가능하고, 동일한 환경 구성을 보장합니다.
  • Kubernetes(K8s)는 Rolling Update, Blue-Green Deployment 등의 배포 전략을 통해 무중단 배포를 지원하며, HPA(Horizontal Pod Autoscaler)를 통해 자동 스케일링도 가능합니다. 또한, Pod 상태를 지속적으로 체크하여 문제가 발생한 경우 자동으로 재시작하거나 교체하여 모니터링 및 장애 대응도 용이합니다.

이미지 저장소 선택: Docker Hub vs AWS ECR

오늘은 Spring Boot 프로젝트의 Docker 이미지를 생성한 후, 해당 이미지를 저장하고 배포할 저장소로 Docker HubAWS ECR 중 어떤 것을 선택하는 것이 좋을지에 대해 정리해보려 합니다.

 

 

🐳 Docker Hub vs 🟠 AWS ECR 비교

항목 Docker Hub AWS ECR
설정 난이도 설정이 간단하고 직관적이며, CI/CD 연동도 쉬움 IAM 설정, 권한 부여 등 약간의 사전 설정이 필요함
속도 및 접근성 퍼블릭 레지스트리로 글로벌 CDN을 통해 빠른 이미지 접근 가능 같은 리전에 있을 경우 빠른 이미지 Pull이 가능함 (특히 AWS 서비스와 통합 시 강점)
보안 퍼블릭 기본, Private는 유료 제한 있음 (무료 계정은 private repo 수 제한) 기본적으로 private, IAM과 연계된 세밀한 권한 설정 가능
비용 퍼블릭은 무료, Private 저장소는 제한적 무료 또는 유료 AWS 프리 티어 제공, 사용량 초과 시 S3 기반 과금 발생
CI/CD 연동 GitHub Actions 등 외부 도구와 쉽게 연동 가능 GitHub Actions 또는 CodePipeline 등 AWS 생태계 연동이 뛰어남
사용성 전 세계적으로 널리 쓰이며 커뮤니티 및 문서가 풍부 AWS를 기반으로 하는 환경에 최적화되어 있음

 

 

🐳Docker-hub

클라우드 기반 레포지토리.

도커 유저들은 도커 허브를 통해 컨테이너 이미지를 생성, 테스트, 저장 그리고 배포할 수 있습니다.

장점

  • 간편한 사용: Docker 명령어로 간단히 이미지를 푸시하고 풀(pull)할 수 있어 사용이 매우 직관적이고 쉽습니다.
  • 무료 사용: 개인용 공개 저장소는 무료로 제공되며, 기본적인 기능은 무료로 이용할 수 있습니다.
  • 광범위한 지원: Docker와의 자연스러운 호환성으로, 다양한 Docker화된 애플리케이션을 쉽게 사용할 수 있습니다.



단점

  • 속도: 글로벌 서버에 있는 Docker Hub의 이미지를 풀하는 속도가 지역에 따라 느릴 수 있습니다.
  • 제한된 개인 저장소: 무료 계정에서는 개인 저장소의 수나 푸시 횟수 등에 제한이 있습니다.
  • 보안 문제: 공개 저장소의 이미지는 누구나 접근할 수 있어, 보안 취약점이 있는 이미지를 사용할 위험이 있습니다.
  • 비용: 개인 저장소의 수나 프라이빗 저장소 기능을 확장하려면 유료 플랜을 이용해야 하며, 비용이 발생합니다.
  • 권한 관리: 권한 관리를 체계적으로 하지 못합니다.
  • 클라우드 서비스로 AWS를 사용하지만, 컨테이너 이미지 관리는 도커 허브에서 하기 때문에 사용자가 관리해야 하는 서비스가 많습니다.

 

📥AWS ECR

안전하고 확장 가능하고 신뢰할 수 있는 AWS 관리형 컨테이너 이미지 레지스트리 서비스입니다.
AWS IAM을 사용하여 리소스 기반 권한을 가진 프라이빗 레포지토리를 지원합니다.
컨테이너 이미지를 Amazon S3에 저장합니다.

장점

  • AWS와의 통합: AWS의 다른 서비스들(예: ECS, EKS, Lambda)과 매끄럽게 통합되어, 관리가 용이하고 배포가 간편합니다.
  • 보안: IAM(Identity and Access Management)을 사용해 사용자 및 권한 관리를 할 수 있어 보안이 강화됩니다. 이미지의 보안도 Amazon GuardDuty나 ECR Repository 정책을 통해 관리 가능합니다.
  • 고가용성: AWS의 글로벌 인프라에 의해 높은 가용성과 안정성을 보장합니다.
  • 자동화: ECR과 연동된 CI/CD 파이프라인을 쉽게 구성할 수 있어 자동화가 가능합니다.
  • 클라우드 관리 용이성 : 클라우드 서비스를 이용하는 AWS에서 컨테이너 관리도 함께 하기 때문에 사용자가 관리하는 서비스가 적습니다.
  • 컨테이너 관리 용이성 : S3를 이용하여 컨테이너를 쉽게 관리할 수 있습니다.

 

 

 

단점

  • 비용: 저장 용량과 데이터 전송에 따른 요금이 부과됨. 사용량에 따라 가격이 올라갈 수 있어 비용 관리를 철저히 해야 합니다.
  • AWS 종속성: AWS 생태계에 종속되므로, AWS 밖의 환경에서 사용하기 어려운 점이 다소 존재합니다.
  • 복잡한 설정: AWS의 복잡한 설정과 구성이 초보자에게는 다소 어려울 수 있습니다.

 

비용

📥AWS ECR (Amazon Elastic Container Registry)

1. 스토리지 비용

  • 요금: $0.10/GB/월
  • 예시: 1GB 이미지 저장 시 월 $0.10

2. 데이터 수신 비용 (Push)

  • 요금: 무료

3. 데이터 송신 비용 (Pull)

  • 동일 리전 내 EC2, ECS, Fargate 등에서 Pull 시: 무료
  • 인터넷 또는 다른 리전으로의 Pull 시: $0.09/GB

4. 예상 비용 (월간)

  • 스토리지: 1GB × $0.10 = $0.10
  • 데이터 송신: 동일 리전 내에서 Pull 시 무료
  • 총합: 약 $0.10/월

🐳 Docker Hub

1. 스토리지 비용

  • 무료 플랜: 1개의 개인(private) 저장소, 최대 2GB 저장 용량
  • Pro 플랜: $9/월, 무제한 개인 저장소 및 추가 기능 제공

2. 데이터 수신 비용 (Push)

  • 요금: 무료

3. 데이터 송신 비용 (Pull)

  • 무료 플랜: 인증된 사용자 기준 6시간당 100회 Pull 제한
  • Pro 플랜 이상: Pull 횟수 무제한

4. 예상 비용 (월간)

  • 무료 플랜: Pull 제한으로 인해 주 50회 이상 사용 시 제한에 걸릴 수 있음
  • Pro 플랜: $9/월

 

 

비교 요약

항목 AWS ECR Docker Hub (Pro 플랜)
스토리지 요금 $0.10/GB/월 $9/월 (2GB 포함)
Push 요금 무료 무료
Pull 요금 동일 리전 내 무료 무제한 (Pro 플랜 기준)
Pull 제한 없음 무료 플랜은 제한 있음
총 예상 비용 약 $0.10/월 (1GB 기준) $9/월

 

 

결론

기업 환경에서 EC2, RDS 등 AWS 인프라를 이미 사용 중이기 때문에 AWS ECR(Amazon Elastic Container Registry)는 다음과 같은 이유로 가장 적합하다고 생각하였습니다.

  1. AWS 서비스와의 강력한 통합성
    ECR은 EC2, ECS, Fargate, CodePipeline, IAM 등 다양한 AWS 서비스와 자연스럽게 연동되므로, 별도 설정 없이도 이미지 빌드부터 배포까지의 전체 워크플로우를 AWS 내에서 통합적으로 구성할 수 있습니다. 이는 유지보수 및 관리 효율성을 크게 높여줍니다.
  2. 리전 내 데이터 송수신 무료 혜택
    동일 리전 내에서 EC2나 ECS와 같은 AWS 서비스가 ECR에서 이미지를 Pull 할 경우, 네트워크 요금이 발생하지 않기 때문에 운영 비용을 절감할 수 있습니다. 외부 레지스트리(Docker Hub 등)에서 이미지를 Pull 하면 인터넷 송신 요금이 발생할 수 있어 장기적으로는 비용 부담이 커질 수 있습니다.
  3. 보안 및 접근 제어
    ECR은 AWS IAM과 연동되어, 세부적인 권한 관리(예: 특정 사용자에게만 Push 권한 부여 등)가 가능합니다. 또한, 이미지 스캔 기능을 통해 취약점 분석을 수행할 수 있어 보안이 중요한 기업 환경에 매우 적합합니다.
  4. CI/CD 자동화에 최적화
    AWS CodeBuild, CodePipeline과의 연계를 통해 자동 빌드 및 배포 파이프라인을 쉽게 구성할 수 있어 DevOps 환경에 최적화되어 있습니다.
    하지만 Github Actions를 통한 CI/CD를 고려하고 있기 때문에 해당 항목은 크게 고려되지 않았습니다.
  5. 예상 가능하고 합리적인 비용
    Docker Hub는 일정 횟수 이상 이미지 Pull이 발생하면 Pro 요금제 이상의 유료 플랜을 이용해야 하며, 일부 기업 환경에서는 비용이 예측 불가능하게 증가할 수 있습니다. 반면, ECR은 저장 용량 기준으로만 요금이 부과되고, AWS 내부 통신에는 별도의 비용이 들지 않아 비용 구조가 단순하고 예측 가능합니다.

따라서, 기업 환경에서 AWS의 EC2 및 RDS를 사용하고 있으며, 동일 리전 내에서의 이미지 Pull이 주로 발생하는 경우, AWS ECR이 비용 효율적이고 AWS 서비스와의 통합 측면에서도 유리합니다. 특히, 초기 개발 환경 설정 시 빈번한 이미지 Pull이 예상된다면, Pull 제한이 없는 AWS ECR이 적합하다고 생각하였습니다.

반응형