Skip to content

Latest commit

 

History

History
53 lines (38 loc) · 5.42 KB

가상화와 컨테이너.md

File metadata and controls

53 lines (38 loc) · 5.42 KB

가상화

가상화는 단일 컴퓨터의 프로세서, 메모리, 스토리지 등과 같은 하드웨어 요소를 가상 머신(VM, Virtual Machine)이라고 하는 다수의 가상 컴퓨터로 분할할 수 있도록 해주는 추상화 계층을 구축하는 기술을 말한다. 실제로는 컴퓨터의 일부에서만 실행됨에도 불구하고, 각각의 VM은 자체적으로 운영체제(Guest OS)를 실행하며 마치 여러개의 컴퓨터인 것 처럼 독립적으로 작동된다.

✔️가상화의 장점

1. 리소스 효율성

가상화 이전에는 애플리케이션마다 별도의 서버를 구성해야했다. 그렇기 때문에 한 애플리케이션이 유휴상태에 있을때는 서버가 활용되지 못한 채 방치된다. 하지만 서버 가상화를 사용하면 단일한 물리적 컴퓨터 위에서 여러 애플리케이션을 돌릴 수 있기 때문에 물리적 하드웨어의 컴퓨팅 용량을 효율적으로 사용할 수 있다.

2. 관리 편의성

기존에는 각각의 애플리케이션마다 서버를 맞춤형으로 구축하여, 새로 배포하거나 환경설정을 바꿀 때 시간이 오래 걸렸지만 해당 설정과 정책들이 소프트웨어로 구성되어있는 가상화 환경에선 서버에 설치되어있는 애플리케이션을 VM단위로 나누어 보다 손쉽게 사용하고 관리할 수 있다.

❌ 가상화의 단점

1. OS의 메모리 차지

가상화 환경에서의 VM에는 Guest OS가 각각 설치되어야 하기 때문에 운영체제를 위해 대량의 메모리를 소모해야한다.

2. 시스템 운영에 대한 통합적인 지식 필요(DevOps)

일반적인 시스템에서는 소프트웨어 개발과 시스템 운영이 분리가 되어있지만, 하지만 가상머신체제에서는 이미 만들어진 시스템 위에 새로운 시스템을 구축하기 때문에 시스템 운영에 대한 통합적인 지식과 소프트웨어 개발 지식을 모두 갖고있어야 가상화 시스템을 관리할 수 있다.

컨테이너

컨테이너는 애플리케이션을 구동하는 환경을 격리한 공간을 의미한다. 컨테이너는 하이퍼바이저와 Guest OS를 필요로 했던 기존의 가상화에서 더 발전하여, 프로세스를 격리하여 모듈화된 프로그램 패키지로서 작동한다. 컨테이너도 VM처럼 프로세싱을 위한 별도의 공간(private space)과 권한, IP를 갖추고 있다는 점에서 비슷하지만 컨테이너는 호스트 시스템의 커널을 다른 컨테이너들과 공유한다는 점에서 차이가 있다.

✔️ 컨테이너의 장점

1. 시스템 성능 부하가 적음

컨테이너의는 생성, 실행되었을때 마치 운영체제 위에서 하나의 어플리케이션이 동작하는 것과 동일한 수준의 컴퓨팅 자원만을 필요로 한다. 시스템은 기존 응용프로그램을 실행시키는 것과 비슷한 만큼의 여유자원만 있으면 된다.

2. 이동성이 높음

컨테이너는 이동성이 높기 때문에 개발자가 자신의 PC에서 만든 컨테이너를 그대로 퍼블릭 클라우드에 가져가 실행할 수 있다.

❌ 컨테이너의 단점

1. 자원의 격리가 어려움

가상머신은 가상 하드웨어를 직접 제어할 수 있기 때문에 자원을 비교적 철저히 격리할 수 있었지만, 컨테이너는 자원이 크게 격리되어있지 않아 보안적으로 더 취약하다.

2. 호스트 운영체제의 제약을 받음

컨테이너는 호스트 운영체제의 커널을 공유하기 때문에 호스트 운영체제 환경이 유지된다. 예를 들어, 리눅스에 컨테이너를 띄우면 리눅스 기반의 컨테이너만 가동할 수 있다.

📈 기술 발전과정

전통적인 배포

하나의 물리서버에 애플리케이션을 배포하는 방식이다. 한 물리 서버에서 여러 애플리케이션의 리소스 한계를 정의할 방법이 없었기 때문에 리소스 할당 문제가 생길 수 있고, 리소스가 효율적으로 활용되지 않는다.

가상화 배포

Host OS위에 여러 가상 머신(VM)을 실행시키는 방법이다. VM간에 애플리케이션이 격리되어 일정 수준의 보안이 보장된다. 전통적인 배포방식보다 리소스를 효율적으로 사용할 수 있고, 애플리케이션을 추가하거나 업데이트하기 쉽다. 하지만 가상환경에 Guest OS를 통째로 설치하기 때문에 자원이 불필요하게 소모될 수 있다.

컨테이너 배포

컨테이너 실행을 담당하는 컨테이너 런타임이라는 소프트웨어 위에 Guest OS 없이 애플리케이션을 올리는 방식이다. 컨테이너에서도 OS가 실행되기는 하지만 각 컨테이너가 OS를 공유하기 때문에 가상화 방식보다 가볍다. 또한 Guest OS가 없기 때문에 OS 실행 없이 별도의 환경에서 애플케이션 실행이 가능하다.


참고:
컨테이너 가상화 - IT위키 https://itwiki.kr/w/%EC%BB%A8%ED%85%8C%EC%9D%B4%EB%84%88_%EA%B0%80%EC%83%81%ED%99%94
가상화의 장단점(토론) https://www.sharedit.co.kr/qnaboards/21498