본문 바로가기
개발공부 개발새발/OS

OS ) 가상화와 컨테이너 차이

by 휴일이 2025. 1. 14.

컨테이너?

실행에 필요한 모든 파일을 포함한 실행 환경(runtime)에서 애플리케이션을 패키징하고 격리할 수 있는 기술.

  • 호스트 운영체제와 커널을 공유하여 “경량화” → VM 없음.
  • 서로 다른 컨테이너는 독립적으로 실행되고, OS 운영체제와 “격리”하여 실행.
  • 컨테이너 이미지에 애플리케이션 환경을 포함 → 어떤 시스템에서든 동일하게 실행 가능.
    • 전체 기능은 유지하면서 컨테이너화 된 애플리케이션을 환경(개발, 테스트, 프로덕션 등)에 따라 쉽게 이동할 수 있음.
  • 프로세스 기반이라 빠르다.
  • Docker 같은 컨테이너 플랫폼을 이용해 컨테이너를 쉽게 빌드, 배포, 실행 가능.

동작 원리

  • Namespace
    • 네임스페이스를 통해 프로세스, 파일시스템, 네트워크 등을 격리.
    • Namespace 를 통해 각 컨테이너는 독립된 환경처럼 격리되어 동작한다.
  • Cgroups(Control Groups)
    • CPU, 메모리 등의 자원을 제한하여 할당.
  • Union File System
    • 레이어드 파일 시스템(이미지)로 효율적인 스토리지 관리.

경량화

호스트 OS 와 커널을 공유 함

즉 OS 전체 인스턴스가 필요하지 않고 호스트 커널을 직접 사용. → 중간에 VM 이 관여하지 않아도 되어 오버헤드 없이 훨씬 빠름.

  • 같은 인프라에서 더 많은 컨테이너 지원 가능.
  • 전체 OS 인스턴스가 필요하지 않으니 CPU 리소스 쉽게 사용 가능.
  • 동일한 OS 커널을 사용하나, 애플리케이션의 프로세스를 시스템의 나머지 영역으로부터 “격리” 함.

이미지

  • 공통 레이어는 공유되며, 변경된 부분만 추가적으로 저장하는 Layered Filesystem 사용.
  • 여러 컨테이너가 동일한 이미지를 가지고 실행하더라도 중복으로 데이터 적용 됨.
    • 예) 10개의 컨테이너가 동일한 베이스 이미지(ubuntu)를 사용하는 경우, 베이스 이미지는 한 번만 저장되고 각 컨테이너는 필요에 따라 추가 레이어(애플리케이션 레이어 등)만 관리하면 됨.

프로세스 기반 아키텍처

  • 각 컨테이너는 독립된 프로세스로서 실행되나, 별도의 OS 를 사용하는 것처럼 동작함.
  • VM : Guest OS 커널과 시스템 서비스를 모두 실행해야 함. → CPU, 메모리 소비 큼.
  • 컨테이너 : 애플리케이션과 필요한 라이브러리만 실행하면 됨. → 리소스 소비 적음.

→ 프로세스처럼 실행하기 때문에 부팅과 종료도 빠르다. (VM 은 OS 전체를 부팅하고 종료하는 과정 필요)

컨테이너가 현대 시스템에서 가상화보다 많이 사용되는 이유.

효율성

  • 컨테이너는 가상화와 달리 게스트 OS 를 실행하지 않아도 된다. → 리소스 소모가 적다.
  • 때문에 동일한 하드웨어에서 더 많은 애플리케이션을 실행할 수 있다.

빠른 배포와 실행

  • 컨테이너는 VM 에 비해 시작과 종료가 빠르다. (OS 실행 작업이 없기에)
  • 현대 애플리케이션에서는 “빠른 배포와 실행”이 중요하기 때문에 컨테이너가 탁월하다!

개발 및 운영 환경의 일치

  • 이미지를 통해 애플리케이션의 모든 의존성을 추가한 뒤에 서로 다른 환경으로 실행할 수 있다.
  • “내 로컬에선 되는데 서버에서는 안 돼요.ㅠㅠ” 를 해결.

DevOps 와 클라우드 네이티브 지원

  • Kubernetes 같은 컨테이너 오케스트레이션 도구를 통해 애플리케이션 배포, 관리, 확장에 용이함.
  • 클라우드 환경에서 이미 컨테이너는 표준 배포 단위로 자리잡았다!
    • ECS, EKS 등을 보라!

경량화

  • 컨테이너 이미지는 Layered Filesystem 을 사용하기 때문에 중복 데이터를 최소화 가능하다.
  • VM 보다 크기가 작고 저장 및 배포가 쉽다.

컨테이너 주요 사용 사례

MSA 마이크로 서비스 아키텍처

  • 애플리케이션을 작은 단위로 나눠 독립적으로 배포 및 관리.
  • 각 서비스는 컨테이너로 실행.

CI/CD 파이프라인

  • 컨테이너를 통해 애플리케이션 빌드, 테스트, 배포 자동화.

이벤트 기반 서버

  • 빠른 시작과 종료를 원할 때 컨테이너 사용.
💡 컨테이너는 클라우드 네이티브 애플리케이션으로 Kubernetes 와 함께 컨테이너를 사용하여 확장성과 안정성을 극대화할 수 있다.
728x90