- toc {:toc}
Virtualization
-
자바 가상머신
-
내가 코딩한 프로그램이 어떤 운영체제에서도 돌아갈 수 있도록 만들고 싶었다.
-
코딩을 한 프로그램을 가짜 기계어로 만들고, 가짜 기계어를 각 운영체제에서 이해할 수 있는 툴을 만들면서 어떤 운영체제에서도 돌아갈 수 있도록 만들었다.
-
가상화(Virtualization) : 어떤 것의 가상의 버전을 만드는 행위.
- 종류 : 소프트웨어, 메모리, 스토리지, 데이터, 네트워크
- 역할
- 하나의 컴퓨터에서 여러 운영체제 인스턴스가 동시에 실행될 수 있도록 한다.
- 하드웨어를 운영체제로부터 분리하는 수단.
- 실제로는 물리적인 하드웨어를 나누어 사용하는 것이지만 가상머신의 입장에서는 할당 받은 하드웨어가 실제 하드웨어라고 생각한다.
-
Hypervisor Virtualization
-
Hypervisor는 호스트 머신에 다수의 가상머신들을 실행할 수 있고 각 가상머신에 Guest OS를 올릴 수 있다.
-
Host OS 위, 하드웨어 위에 Hypervisor를 올리는 2가지 타입으로 나누어진다.
-
Type1 - Hardware
- 하드웨어 위에 직접 Hypervisor를 올려 구현할 수 있도록 한다.
-
Type2 - Host OS
- 하드웨어 위에 Host OS를 올리고 Host OS 위에 Hypervisor를 올린다.
-
Virtual Machine Monitor : VMs를 만들고 실행시키는 과정
-
장점
- 비용의 효율성 : 각 물리적 하드웨어를 여러 VM의 것으로 나누어 사용한다.
- 규모 설정이 쉽다 : VM을 만드는데 드는 시간이 짧다.
-
단점
- 각 VM은 OS 전체를 포함하기 때문에 많은 용량을 차지한다.
- VM은 부팅이 느리다.
-
Guest Linux OS over Host Linux OS 문제
- 데이터 센터에서 리눅스가 무료이기 때문에 Host OS로 리눅스 사용한다.
- 클라우드에서 사용자를 위해 여러 환경을 위해 VM을 사용하는 경우가 많은데, Guest OS의 경우에도 리눅스를 사용하면서 중복된 운영체제를 갖게 된다.
- 즉, 중복된 운영체제를 갖는다는 것은 더 많은 비용을 사용한다는 것이다.
- 결국, 굳이 VM을 고집할 필요 없이, 내가 원하는 만큼의 CPU, 스토리지, 네트워크를 가져오면 되는 일이다.
-
리눅스 컨테이너
-
과거 유닉스 컴퓨터는 비쌌기 때문에 하나의 컴퓨터를 여러 명이 사용하는 방식으로 사용했다.
-
유닉스를 이은 리눅스는 이에 따라 일시적으로 Guest를 열어서 그 안에서 작업하고 삭제하면 이전의 설정값과 동일한 형태가 된다.
-
필요할 때 설치하고 필요하지 않을 때 삭제하면 깔끔하게 삭제된다.
-
컨테이너
-
App 구동을 추상화해준다. 즉, 프로그램 코드, 기타 라이브러리 등을 함께 패키지로 묶은 것이다.
-
Host OS 커널을 공유하여 사용한다.
-
컨테이너 각각은 사용자 공간에서 독립된 프로세스로 동작한다.
-
장점
- VM 보다 훨씬 용량이 적다.
- OS 커널을 공유한다.
- 가볍기 때문에 시작이 더 빠르다.
-
가상 머신 VS 컨테이너
- 작은 리눅스 OS를 Docker가 가지고 있고 그 위에서 여러 개의 컨테이너를 실행시킬 수 있다.