Skip to main content

컨테이너를 사용하는 이유

  • 불변하는 애플리케이션과 실행 환경에 대한 재현성 확보
  • 애플리케이션 구성 관리의 용이성
  • 환경과 상관없이 실행 가능한 높은 이식성
  • 컨테이너 기반 개발의 필요성

불변하는 애플리케이션과 실행 환경에 대한 재현성

B 서버에도 같은 애플리케이션을 배포했는데 A와 다르게 동작해요

  • 배포 서버의 상태가 달라 기대처럼 동작하지 않는 상황의 근본적인 원인은 가변적인 인프라를 허용해서 발생함
    • OS, CPU, Memory, 라이브러리, 언어 런타임 등 다양한 요소에 의존함
    • 각 서버에 배포하는 요소를 모두 하나로 통일하는 것이 해결 방법
  • IaC(Infrastructure as Code): 위 문제를 해결하기 위해 코드를 사용해서 인프라 환경을 구축하는 방법
    • 어떤 서버를 구성할 지, 어떤 라이브러리나 애플리케이션을 사용할 지 코드로 정의하고 관리함
  • IaC를 사용해도 항상 같은 결과를 보장하는 것은 아님
    • 예시: nvm install node
      • 이 경우 항상 최신 버전이 릴리스될 때마다 업데이트되기에 같은 결과 보장이 어려움
  • 언제나 실행해도 동일한 환경 유지가 가능하도록 모든 애플리케이션 런타임과 라이브러리는 특정 버전을 설치하도록 코드를 작성

애플리케이션 구성 관리의 용이성

  • 초기부터 도커는 도커 컴포즈라는 간단한 컨테이너 오케스트레이션 시스템을 제공함
  • yaml 형식의 설정 파일에 컨테이너 스펙을 정의하고 의존 관계 및 동작 순서를 제어해 컨테이너의 구성을 정의하고 실행
  • 간편하다는 장점으로 인해 로컬 개발 환경 구성에 널리 사용됨

환경과 상관없이 실행 가능한 높은 이식성

  • 저자는 환경에 상관없이 컨테이너 기술을 도입하는 것에 의미가 있다고 함
  • 컨테이너 기술은 운영 환경에서도 함게 사용되고 있으며 적은 오버헤드에 대해서도 쉽게 스케일 아웃이 가능하다는 장점이 존재
  • 시스템 규모와 상관없이 컨테이너 활용이 점점 증가하는 추세
  • 데이터 스토어와 같이 컨테이너를 사용하기에는 난이도가 높은 부분도 존재함
  • 높은 이식성의 장점을 고려하면 컨테이너 기술은 개발 환경과 운영 환경 모두 도입해야 좋은 효과를 볼 수 있음

컨테이너 기반 개발의 필요성

  • 도커와 컨테이너 오케스트레이션 툴의 보급, 매니지드 서비스가 제공되며 컨테이너 활용이 쉬워짐
  • MSA 아키텍처가 등장하며 컨테이너 기술을 이용한 소규모 애플리케이션을 만드는 방식이 인기를 얻고 있음
  • CI 가속화나 외부 API를 사용한 개발을 목(mock) 서버와 개발 환경을 컨테이너로 제공하는 경우가 많아짐