위클리페이퍼09-1: 클라우드 환경에 프로그램 배포하기

Q1. 컨테이너 기술과 Docker를 명확히 구분하여 설명하세요. 컨테이너 기술이 Docker 이전에도 존재했던 개념임을 언급하고, Docker가 컨테이너 기술을 구현한 하나의 도구라는 관점에서 설명해주세요. 또한, Docker 외에 컨테이너 기술을 구현한 다른 도구의 예시를 들어보세요.

Q1-1. 답변

컨테이너 기술

운영체제 수준에서 프로세스와 파일 시스템, 네트워크 등을 격리하여 애플리케이션이 독립적으로 실행될 수 있도록 하는 기술

  • 이 기술은 Docker 등장 이전부터 Linux 컨테이너(LXC)라는 형태로 존재해왔던 개념

Docker

기존에 존재하던 복잡한 컨테이너 기술을 개발자들이 쉽고 접근하기 편하게 사용할 수 있도록 만들어진 하나의 오픈소스 플랫폼이자 구현 도구

  • 즉, 이미지를 패키징하고 컨테이너를 일관되게 배포 및 실행하도록 돕는 도구

다른 컨테이너 구현 도구

  • Podman : Docker와 가장 비슷하게 비교되는 도구로, 데몬 없이도 컨테이너를 실행할 수 있는 도구
  • containerd : 쿠버네티스 같은 플랫폼에서 컨테이너를 실제로 실행/관리하는 핵심 런타임 도구
  • Incus : 앱 하나보다는 Linux 시스템 전체를 격리해서 다루는 컨테이너 도구

Q2. 컨테이너 오케스트레이션의 개념과 필요성을 설명하고, Docker 단독 사용 환경과 비교하여 컨테이너 오케스트레이션이 해결하는 주요 문제점 3가지(자동 확장, 자가 복구, 선언적 인프라)를 설명하세요.

Q2-1. 답변

개념과 필요성

컨테이너 오케스트레이션은 여러 컨테이너(웹 서버, API, 데이터베이스 등)로 이루어진 복잡한 애플리케이션을 하나의 묶음으로 보고, 이들의 실행, 연결, 중지 등 전반적인 생명주기를 통합하여 관리하는 기술

단일 컨테이너는 docker run 명령어로 실행할 수 있지만, 실제 서비스는 웹 서버, API, 데이터베이스 등 다수의 컨테이너가 복합적으로 얽혀 동작한다. 이때 오케스트레이션이 없다면 아래의 문제가 발생하기에 반드시 필요하다.

  • 여러 컨테이너의 포트, 네트워크, 볼륨 들을 연결하기 위해 길고 복잡한 명령어를 일일이 수동으로 입력해야 하며, 이 과정에서 오류가 발생하기 쉬움
  • 데이터 베이스가 먼저 켜진 후 웹 서버가 켜져야 하는 등 컨테이너 간의 실행 순서와 의존성을 수동으로 조절하기가 매우 번거로움
  • 수동 명령어 방식은 문서화되지 않으므로, 다른 팀원과 동일한 환경을 구축하거나 버전을 관리하고 협업하는 것은 매우 어려움

단독 사용 환경과 비교할 때 컨테이넝 오케스트레이션이 해결하는 주요 문제점

  1. 자동 확장

    Docker 단독 환경(docker run)에서는 트래픽이 증가할 때마다 새로운 환경 설정과 함께 수동으로 여러 컨테이너를 띄워야 하므로 확장이 어렵고 비효율적이다.

    반면, 오케스트레이션 도구는 replicas 설정이나 scale 명령어 등을 통해 실시간 요구 사항에 맞춰 개별 서비스 단위로 컨테이너 수를 쉽고 효율적으로 수평 확장(Scale-out)할 수 있도록 해준다.

  2. 자가 복구 (Self-healing)

    단독 환경에서는 컨테이너 프로세스에 문제가 생겨 종료되었을 때 관리자가 직접 원인을 파악하고 재시작해야 한다.

    반면, 오케스트레이션에서는 restart 정책(always, on-failure 등)을 선언하여 여러 에러 코드를 반환하며 종료되거나 시스템이 재부팅될 때 시스템이 컨테이너를 자동으로 재시작하도록 만들어 서비스 가용성을 스스로 유지한다.

  3. 선언적 인프라 (Declarative infrastructure)

    일회성 docker run 명령어에 네트워크, 포트, 환경변수 등을 길게 나열하는 방식은 팀원 간 공유가 어렵고 재현성이 떨어진다.

    반면, 오케스트레이션은 YAML 파일(ex: docker-compose.yaml)이라는 단일 선언형(Declarative) 문서에 전체 인프라 스택의 원하는 상태를 코드로 정의한다. 이를 통해 복잡한 실행 과정을 단 한 줄의 명령어(docker compose up)로 자동화하고, 버전 관리 및 팀 협업을 획기적으로 개선한다.

Leave a comment