가상화란?
- 하나의 하드웨어를 여러 개인 것처럼 가상으로 쪼개서 사용하거나,
- 여러 개의 하드웨어를 묶어서 하나의 자원인 것처럼 사용하는 것
가상화의 등장 배경
- 1960~70년대의 하드웨어, 소프트웨어 기술 상황은 어땠을까?
- 무어의 법칙에 의해 하드웨어의 발전은 가속화되고 있었다.
- 소프트웨어는 이러한 하드웨어의 발전을 따라가지 못했다.
- 남는 하드웨어 성능 아까운데 어떡하지...
- 가상화 개념으로 한 대의 서버를 나눠쓰자!
- 나만의 서비스를 만들었다. 이제 배포를 해야 하는데, 내 컴퓨터를 서버컴으로 계속 돌릴 수는 없다.
- 다른 환경을 빌려서 사용해야겠다.
- 그런데 새로운 환경에서 코드를 실행시키자니, 환경이 내 컴퓨터랑은 달라서 안되네...
- 가상화 개념으로 다양한 하나의 환경(Host OS)에서 여러 서비스들이 돌아가게 해보자!
VM(Virtual Machine, 가상 머신)이란?
- 물리적 하드웨어 상에 소프트웨어(하이퍼바이저)로 논리적으로 만들어낸 컴퓨터
- 그 위에는 별도의 운영체제(Guest OS)가 설치된다.
컨테이너(Container)란?
- 어플리케이션 코드 및 이를 실행하는 데 필요한 모든 라이브러리를 포함한 패키지
- 별도의 운영체제(Guest OS)를 설치하지 않고 Host OS의 커널을 공유한다.
컨테이너는 어떻게 다양한 OS에서 돌아가는가
컨테이너는 Host OS 쓴다며... 그런데 맥, 윈도우는 각각 Host OS가 다른데 어떻게 어플리케이션이 돌아가지?
- 그 이유는 결국 VM이었다.
- 모든 컨테이너는 리눅스 OS에서만 돌아간다.
- 즉 컨테이너 서비스를 제공하는 Docker와 같은 플랫폼이 Host OS 위에 리눅스 OS를 가진 VM을 올리고, 컨테이너들이 돌아갈 수 있도록 한다!
VM vs 컨테이너
전통적인 배포 | VM 기반 배포 | 컨테이너 기반 배포 | |
OS | 특정 Host OS에서만 동작 | VM마다 각각 Guest OS 존재 | Host OS에 구애받지 않으나, 특정 OS 기반의 서비스만 구성 가능 |
App | 하나의 CPU, OS를 여러 App이 나눠 씀 |
하이퍼바이저를 통해 각 VM에 자원 할당, 할당된 자원을 각각의 App이 사용 |
컨테이너별로 자원 할당, 할당된 자원을 각각의 App이 사용 |
격리 수준 | 격리되지 않음 | 각 VM이 완전하게 격리 | App 실행 환경은 격리, OS는 공유 |
참고문헌