AZ-204 시험에서 컨테이너 관련 서비스는 반드시 나오는 영역입니다. ACR, ACI, Container Apps 세 서비스의 차이점과 Dockerfile 기본 개념을 정확히 구분해야 합니다.
컨테이너란 무엇인가요?
이삿짐 택배 상자를 상상해 보세요. 짐을 포장할 때 안에 들어가는 물건, 완충재, 설명서까지 모두 함께 넣습니다. 이 상자를 어디로 옮겨도 안의 내용물은 그대로입니다. 컨테이너도 마찬가지입니다. 애플리케이션 코드, 실행에 필요한 라이브러리, 설정 파일을 하나의 패키지로 묶어 어떤 컴퓨터에서든 동일하게 실행되도록 합니다.
| 개념 | 한 줄 설명 | |------|-----------| | 이미지 (Image) | 컨테이너를 만들기 위한 설계도. 변경되지 않는 파일. | | 컨테이너 (Container) | 이미지를 실행한 상태. 실제로 동작 중인 프로세스. | | 레지스트리 (Registry) | 이미지를 저장하고 공유하는 창고. |
ACR (Azure Container Registry)
ACR은 Docker 이미지를 저장하는 프라이빗 창고입니다. Docker Hub가 공개 창고라면, ACR은 회사 내부에서만 접근할 수 있는 비공개 창고입니다. 보안이 중요한 기업 환경에서는 이미지를 외부에 노출하면 안 되기 때문에 프라이빗 레지스트리가 필수입니다.
ACR 주요 기능
프라이빗 이미지 저장소: 회사 내부 이미지를 외부에 노출하지 않고 안전하게 보관 ACR 태스크 (ACR Tasks): 코드가 변경되면 자동으로 이미지를 빌드해주는 CI/CD 연동 기능. 개발자가 직접 빌드 명령을 실행하지 않아도 됩니다. 지역 복제 (Geo-Replication): 전 세계 여러 곳에 이미지 복사본을 저장해 어디서든 빠르게 이미지를 내려받을 수 있습니다. Premium 계층에서만 사용 가능. RBAC 연동: Contributor, Reader 등 역할 기반으로 이미지 접근 권한 관리 관리 ID (Managed Identity): 비밀번호 없이 Azure 서비스 간 안전하게 인증
| 계층 | 특징 | |------|------| | Basic | 개발/테스트용, 낮은 저장 용량 | | Standard | 일반 운영 환경, 웹훅 지원 | | Premium | 지역 복제, 프라이빗 링크, 콘텐츠 신뢰 |
ACI (Azure Container Instances)
ACI는 클러스터나 서버 설정 없이 컨테이너를 가장 빠르게 실행할 수 있는 서비스입니다. 마치 택배 상자를 열자마자 바로 사용하는 것처럼, 인프라 구성 없이 즉시 컨테이너를 실행합니다.
Kubernetes처럼 복잡한 오케스트레이터가 필요 없는 간단한 작업에 적합합니다. 단발성 배치 작업, 짧은 시간 실행 후 종료되는 작업에 자주 사용됩니다.
ACI 주요 기능
클러스터 불필요: Kubernetes 설정 없이 한 명령으로 컨테이너 실행 컨테이너 그룹 (Container Groups): 여러 컨테이너를 하나의 논리적 단위로 묶어 실행. 사이드카 패턴(메인 앱 + 로그 수집기 등)에 사용. Linux만 지원. 환경 변수 주입: 컨테이너 실행 시 설정값을 외부에서 주입. 코드 수정 없이 설정 변경 가능. 볼륨 마운트: Azure Files를 마운트해 컨테이너가 영구적인 데이터를 저장 재시작 정책: Always(항상 재시작), OnFailure(실패 시만), Never(재시작 안 함)
| 항목 | 설명 | |------|------| | 시작 속도 | 수초 내 실행 — Azure에서 가장 빠른 컨테이너 실행 방식 | | 과금 | 실행 중인 시간(초 단위)과 메모리 사용량 기준 | | 사용 사례 | 단발성 배치 작업, 빠른 테스트, CI/CD 파이프라인 작업 |
Container Apps
Container Apps는 서버리스 방식으로 컨테이너를 실행하는 관리형 플랫폼입니다. Kubernetes를 직접 관리하지 않으면서도 Kubernetes의 강력한 기능(자동 스케일링, 트래픽 분할 등)을 쓸 수 있습니다. 커피숍 비유를 들면, 손님이 많을 때 바리스타를 자동으로 더 부르고 손님이 없을 때는 아무도 없는 것(0으로 축소)과 같습니다.
Container Apps 주요 기능
서버리스: Kubernetes 클러스터 직접 관리 불필요. Azure가 인프라를 자동으로 관리. KEDA 기반 자동 스케일링: HTTP 요청 수, 메시지 큐 길이 등 이벤트 기반으로 인스턴스를 자동 확장/축소 0까지 축소 (Scale to Zero): 요청이 없으면 실행 중인 인스턴스가 0이 됩니다. 비용 절감에 효과적. 리비전 (Revisions): 앱의 불변 스냅샷. 새 버전을 배포할 때 이전 버전과 트래픽을 분할(예: 새 버전 20%, 이전 버전 80%)해 점진적으로 전환 가능. Dapr 연동: 마이크로서비스 간 통신, 상태 관리, 메시지 발행/구독을 쉽게 구현
| 비교 | ACI | Container Apps | |------|-----|----------------| | 클러스터 관리 | 불필요 | 불필요 | | 자동 스케일링 | 없음 | 있음 (KEDA) | | 0으로 축소 | 없음 | 있음 | | 사용 사례 | 단발성 작업 | 장기 실행 서비스 |
!ACR vs ACI vs Container Apps
Dockerfile과 멀티스테이지 빌드
Dockerfile은 이미지를 만드는 방법을 단계별로 적은 레시피입니다. 요리 레시피처럼 "어떤 재료(베이스 이미지)를 가져와서, 어떤 작업을 순서대로 수행해서, 최종 결과물을 만들어라"고 지시합니다.
멀티스테이지 빌드
코드를 컴파일하고 실행하는 단계를 분리하는 방법입니다. 공장에서 제품을 만들 때 생산 라인과 포장 라인을 분리하는 것과 같습니다. 컴파일에 필요한 도구들은 최종 이미지에 포함되지 않아 이미지 크기가 훨씬 작아집니다.
빌드 스테이지: 소스 코드 컴파일, 빌드 도구 포함 실행 스테이지: 컴파일된 결과물만 복사, 빌드 도구 제외 효과: 최종 이미지 크기 대폭 감소, 보안 취약점 감소
시험 핵심 정리
"프라이빗 Docker 이미지 저장소" -- ACR (Azure Container Registry)
"코드 변경 시 자동 이미지 빌드" -- ACR 태스크 (ACR Tasks)
"지역 복제로 전 세계 빠른 배포" -- ACR Premium 계층
"클러스터 없이 가장 빠른 컨테이너 실행" -- ACI (Azure Container Instances)
"메인 앱 + 보조 앱을 하나의 단위로" -- 컨테이너 그룹 (사이드카 패턴)
"서버리스 컨테이너 플랫폼, KEDA 스케일링" -- Container Apps
"요청 없으면 인스턴스 0개" -- Container Apps Scale to Zero
"새 버전과 이전 버전 트래픽 분할" -- Container Apps 리비전 (Revisions)
"마이크로서비스 통신·상태 관리 사이드카" -- Dapr (Container Apps 연동)
"이미지 크기 줄이기, 빌드와 실행 단계 분리" -- 멀티스테이지 빌드 (Dockerfile)
"비밀번호 없이 Azure 서비스 간 인증" -- 관리 ID (Managed Identity)