-
VM(가상머신)과 Container(컨테이너)의 차이IT/서버 2023. 7. 30. 18:33
컨테이너 엔진이 바로 도커이다.
📑 컨테이너와 가상 머신이란?
컨테이너 및 가상 머신은 애플리케이션을 IT 인프라 리소스로부터 독립적으로 만드는 기술이다.
📌 컨테이너는 애플리케이션의 코드, 라이브러리 및 기타 종속 구성 요소를 포함하고 있는 소프트웨어 코드 패키지이다. 컨테이너화를 통해 애플리케이션을 이동 가능하도록 만들어 모든 디바이스에서 동일한 코드를 실행할 수 있다.
📌 가상 머신은 물리적 머신의 디지털 사본이다. 동일한 호스트 운영체제에서 고유한 개별 운영체제가 실행되는 여러 가상 머신을 보유할 수 있다. 또한 애플리케이션을 실행하는 데 필요한 모든 것이 포함된 가상 머신을 생성할 수 있다.
📑 컨테이너와 가상 머신은 어디에서 사용되나요?
컨테이너와 가상 머신은 모두 배포 기술이다. 소프트웨어 개발 수명 주기에서 배포는 서버 또는 디바이스에서 애플리케이션을 효율적으로 실행하는 매커니즘이다. 애플리케이션에는 서버의 기본 운영 체제와 밀접한 관련이 있는 종속 구성 요소라는 몇 가지 추가 소프트웨어 구성 요소가 필요하다.
🔨 소프트웨어 배포와 관련한 해결 과제
일반적으로 조직에서 새로운 기능을 릴리스하려면 그 전에 먼저, Linux 환경에서 개발하고 Windows에서 테스트 하는 등 여러 환경에서 애플리케이션을 구현해야 한다. 환경 간 애플리케이션을 이전하면 버그와 결함이 발생하여 종속 구성 요소 누락으로 인해 생산성이 저하될 수 있다. 만약 한 환경에서만 애플리케이션을 구축하고 테스트하면 애플리케이션의 유용성이 제한된다.
- 여러 운영체제를 사용하는 사용자를 위해 다른 버전을 개발해야 할 수 있다.
- 시스템 관리자는 모든 환경을 균일하게 업데이트하고 유지 관리해야 하므로 개발 비용이 상승한다.
- 온프레미스 데이터 센터에서 클라우드로 또는 여러 클라우드 환경 간 애플리케이션을 이전하기가 어려울 수 있다.📌 가상 머신의 용도
지금까지 가상 머신 기술은 증가하는 물리적 하드웨어 용량과 처리 성능을 효율적으로 사용하기 위해 개발되었다. 단일 물리적서버에서 단일 애플리케이션 환경을 실행하면 리소스의 활용도가 낮아진다. 가상 머신을 사용하면 조직에서 여러 운영체제를 설치하고 동일한 물리적 시스템에 여러 환경을 구축할 수 있다.
📌 컨테이너의 용도
컨테이너는 여러 환경에서 예측 가능하고 반복 가능한 방식으로 애플리케이션을 패키징하고 실행하기 위해 개발되었다. 환경을 재구축하는 대신 모든 유형의 물리적 또는 가상 환경에서 실행되도록 애플리케이션을 패키징한 것이다. 마치 우주 비행사가 다른 행성을 탐사할 때 지구의 대기를 재현하는 것이 아닌 우주복을 입는 것과 비슷하다.
📑 컨테이너와 가상 머신의 유사성
컨테이너와 가상 머신을 사용하면 여러 환경에서 실행할 수 있도록 애플리케이션을 완전히 격리할 수 있다. 컨테이너와 가상 머신은 기본 인프라를 가상화하거나 추상화하므로 사용자가 신경쓸 필요가 없다. 또한 소프트웨어 인프라를 이미지 파일이라는 단일 파일로 패키징할 수 있도록 해준다. 이미지 파일을 사용하여 어디서나 애플리케이션을 신속하게 설정하고 실행할 수 있다. 아울러 소프트웨어 프로세스를 사용하여 시스템 구성을 관리하거나 수천 개의 애플리케이션을 한 번에 관리하도록 확장할 수 있다. 단, 컨테이너 및 가상 머신의 역할과 사용 범위는 애플리케이션이 배포되는 위치와 방법에 따라 달라진다.
📑 주요 차이점
컨테이너는 운영 체제를 가상화하여 애플리케이션이 모든 플랫폼으로 실행될 수 있도록 한다. 가상 머신은 그 이상의 기능을 제공하며 물리적 시스템을 가상화할 수 있도록 한다. 따라서 하드웨어 리소스를 효율적으로 사용할 수 있다.
📌 1. 작동 방식
컨테이너 기술에는 실행중인 시스템에 관계 없이 일관되게 수행되는 자급자족 소프트웨어 패키지를 빌드하는 작업이 포함된다. 소프트웨어 개발자는 이미지, 즉 애플리케이션을 실행하는데 필요한 정보가 들어 있는 파일을 만들고 배포한다. 컨테이너 이미지는 읽기 전용이어서 컴퓨터 시스템에서 변경할 수 없다.
가상 머신에는 물리적 서버 또는 컴퓨터에 가상화 소프트웨어를 설치하는 작업이 포함된다. 이 물리적 컴퓨터를 호스트 컴퓨터라고 하며 가상 머신을 게스트라고 한다. 호스트 운영 체제에 영향을 미치지 않으면서 필요에 따라 게스트 운영 체제와 그 애플리케이션을 구성하고 업데이트할 수 있다.
📌 2. 핵심 기술
가상 머신은 게스트 운영 체제와 호스트 운영 체제 간에 통신하는 하이퍼바이저를 사용한다. 이 하이퍼바이저가 리소스 공유를 조정하므로 가상 머신은 동일한 하드웨어에서 여러 개의 다른 가상 머신과 함께 독립적으로 실행된다.
반면, 컨테이너는 컨테이너 엔진 또는 컨테이너 런타임을 사용한다. 컨테이너 엔진은 컨테이너와 운영 체제 간의 중개 에이전트 역할을 하며 애플리케이션에 필요한 시스템 리소스를 제공하고 관리한다.
📌 3. 크기
가상 머신 이미지 파일에는 자체 운영 체제가 포함되어 있으므로 크기가 더 크다.(GB) 리소스가 증가하면 전체 서버, 데이터 베이스, 데스크톱 및 네트워크를 복제, 분할, 추상화할 수 있다.
컨테이너 파일은 더 가볍고 MB 단위이다. 컨테이너는 단일 애플리케이션을 실행하는 데 필요한 리소스만 패키징한다.
최종적으로 정리를 해보자면 다음과 같다.
시스템 구조적으로 컨테이너는 한 OS를 공유하는 구조이고 VM은 각각의 OS를 띄워야하는 구조이기 때문에 컨테이너가 빠르다. 하지만 VM은 사용자가 윈도우를 사용하고 있더라도 새로운 GuestOS를 설치할 때 리눅스 OS를 설치해서 사용할 수 있지만, 컨테이너는 리눅스 OS에서 윈도우용 컨테이너를 사용할 수 없다. 또한 보안적으로 VM은 보안문제가 생겨도 각각의 VM이 분리되어 있기 때문에 서로 피해가 가지 않지만 컨테이너는 보안적으로 문제가 생길 수 있다.
일반적으로 한 서비스를 만들 때 한가지 언어를 사용하여 여러 모듈들이 한 서비스로 같이 돌아간다. A와 B 모듈은 괜찮은데 C모듈에 부하가 많이 생가닌 상황이면 VM을 하나 더 생성해 띄워야 한다. 반면 컨테이너는 한 서비스를 만들 때 모듈별로 쪼개서 각각의 컨테이너에 담고 그 모듈에 최적화된 개발 언어를 사용한다. 쿠버네티스는 여러 컨테이너들을 한 파드라는 개념으로 묶을 수 있고 한 컨테이너만도 파드에 담을 수 있다. 한 파드가 하나의 배포 단위이다. 내가 필요한 파드만 확장할 수 있다. 컨테이너 시스템을 모듈별로 쪼개서 개발했을 때 큰 효과를 발휘할 수 있다.
📑 컨테이너 또는 가상 머신의 적합한 사용 사례
애플리케이션 배포를 위해 가상 머신과 컨테이너 중 하나를 선택할 때 고려해야 할 몇 가지 요소를 정리하려 한다.
📌 1. 환경 구성
가상머신은 개발자에게 애플리케이션 환경에 대한 제어 권한을 더 많이 부여한다. 즉) 개발자가 수동으로 시스템 소프트웨어를 설치하고, 구성 상태에 대한 스냅샷을 생성하고, 필요한 경우 이전 상태로 복원할 수 있다. 애플리케이션의 성능을 개선하기 위해 아이디어, 실험 또는 다른 환경을 테스트하는 데 유용하다.
컨테이너는 최상의 구성이 선택된 후에 구성에 대한 정적 정의를 제공한다.
📌 2. 소프트웨어 개발 속도
가상 머신은 풀 스택 시스템이므로 구축하고 재생성하는데 시간이 많이 걸릴 수 있다. 환경을 재생성해야하기 때문에 수정 내용을 검증하는 데 시간이 많이 걸린다.
새 기능을 자주 빌드, 테스트 및 릴리즈 하려면 컨테이너를 사용하는 것이 좋다. 고급 소프트웨어만 포함되어 있어 수정하고 반복하는 속도가 매우 빠르다.
📌 3. 확장성
가상 머신은 스토리지 공간을 더 많이 차지하므로 온프레미스 데이터 센터에 더 많은 하드웨어를 프로비저닝해야한다. 클라우드 인스턴스로 전환하면 비용이 절감되지만 전체 환경을 마이그레이션하는 데 있어 해결해야 할 고유한 문제가 있다.
컨테이너는 더 적은 공간을 차지하고 확장하기가 더 쉽다. 더 중요한 것은 컨테이너가 마이크로서비스를 사용할 수 있게 함으로써 사용자에게 애플리케이션 확장성에 대한 세부적인 제어 권한을 부여한다는 것이다. 마이크로서비스는 잘 정의된 api를 통해 통신하는 소규모 독립 서비스로 구성된 소프트웨어 개발을 위한 아키텍처 및 조직적 접근 방식이다.
반응형'IT > 서버' 카테고리의 다른 글
CI/CD 파이프라인 개념 정리 (0) 2023.07.30 컨테이너(Container) , 쿠버네티스(Kubenetes), 오픈시트(Openshift differences) 차이점 (0) 2023.07.30 [Server] 리눅스(Linux) vs 윈도우(Window) 서버 비교 (0) 2023.06.15