SW/DevOps

DevOps : 가상화와 컨테이너 : 개념, 기능

얇은생각 2019. 11. 20. 07:30
반응형

DevOps, 가상화, 컨테이너 구조

클라우드 컴퓨팅 환경에서 가장 각광받는 기술이며, DevOps의 구제적인 실현 가능성을 높여준 도커에 대해서 알아 볼 것입니다. 클라우드 컴퓨팅 환경에서의 핵심 개념인 가상화와 컨테이너의 개념에 대해서 알아보도록 하겠습니다.

 

IT 인프라 운영 방식의 전환

IT 인프라 운영방식이 클라우드 컴퓨팅 환경으로 급속히 전환되고 있습니다. 온 프레미스는 일반적이고 전통적인 시스템 운영 방식으로 자체적으로 데이터센터를 보유하고 시스템 구축부터 운영 유지를 모두 직접 수행하는 것을 말합니다. 물리적인 하드웨어를 직접 구입하고 구축해야 하기 때문에 초기 투자비용이 크고 운영유지가 힘든 단점이 있습니다. 또한 고정된 방식으로 컴퓨팅 자원을 활용하기 때문에 운영 탄력성이 떨어져서 자원 활용에 비효율적인 측면이 있습니다.

오프 프레미스는 온 프레미스가 아닌 방식, 보통 클라우드 컴퓨팅을 활용하는 방식을 말합니다. 물리적인 하드웨어를 직접 구입하여 운영 유지하는 것이 아니라 사용요금을 내고 컴퓨팅 자원을 빌려 쓰는 방식입니다. 초기 구축 기간이나 비용을 줄일 수 있는 장점이 있습니다. 중요도가 매우 높은 미션 크리티컬한 시스템이나 보안성이 매우 강하게 요구되는 시스템을 제외하고는 최근의 시스템 운영방식은 클라우드 컴퓨팅으로 급속히 전환되고 있습니다.

 

가상화

클라우드 컴퓨팅은 가상화 기술을 기반으로 합니다. 가상화란 물리적인 하드웨어를 논리적으로 추상화하는 것을 말하는데 하나의 물리적 하드웨어를 마치 여러 개인 것처럼 동작하게 하거나 아니면 여러 개의 물리적인 하드웨어를 마치 하나인 것처럼 동작하게 하는 기술입니다. 보통 하나의 물리적 하드웨어에는 하나의 고유한 역할만을 부여하여 운영하게 되는데, 이때 실제 사용 가능한 자원의 모두를 사용하는 것이 아니라 일부만을 사용하게 됩니다.

예를 들어 보통 서버를 운영하게 되면 특정 피크 타임에만 집중적으로 많은 자원이 사용되고, 그 외의 경우에는 실제 용량의 보통 20% 이하만을 평균적으로 사용하게 됩니다. 사용하지 않는 80%의 유휴자원은 낭비되게 되는 것입니다. 만약 버려지는 80%의 자원으로 또 다른 서버를 운영할 수 있다면 자원의 사용률을 극대화 할 수 있을 것입니다. 가상화 기술은 이 유휴자원을 효과적으로 사용하기 위한 것으로서 CPU, 메모리, 스토리지, 네트워크 등을 가상화하여 사용할 수 있습니다.

 

클라우드 컴퓨팅

클라우드 컴퓨팅은 기존의 서버, 스토리지, 네트워크 하드웨어를 기반으로 그 위에서 동작하는 가상화 환경을 제공하는 것입니다. 가상화를 통해서 하드웨어 구매 및 운영유지 비용을 절감할 수 있으며, 동적으로 급변하는 변경 수요에 효과적으로 대응할 수 있습니다.

가상화는 가상화의 대상이나 사용 유형에 따라서 다양한 기준으로 분류할 수 있습니다. 먼저 하드웨어 리소스별 가상화의 예를 살펴보겠습니다.

 

가상화 예

CPU 가상화는 물리적인 CPU의 코어에 가상의 CPU를 할당하여 사용하는 것입니다. 

메모리 가상화는 물리적 메모리의 특정영역에 가상 메모리를 할당하여 사용하는 것입니다.

스토리지 가상화는 물리적인 스토리지에 특정 영역을 가상 스토리지로 할당하여 사용하는 것입니다.

네트워크 가상화는 하나의 물리적인 네트워크 인터페이스에서 동작하는 가상의 네트워크 인터페이스를 할당하는 것과 가상의 네트워크를 구성하여 사용하는 두 가지 방식이 있습니다.

가상화 사용 유형에 따른 예를 살펴보면 서버 가상화는 하나의 물리 서버를 기반으로 여러 개의 OS를 설치하고 구동하여 여러 대의 서버를 가상화합니다. 데스톱 가상화는 VDI로 흔히 알려져 있는데 원격지의 데이터 센터 서버에서 가상의 PC 데스크톱 환경을 제공하여 마치 로컬의 PC를 사용하는 것처럼 가상화합니다.

이 밖에도 데이터 가상화, 애플리케이션 가상화 등의 유형이 있습니다.

 

가상화 방식

가상화를 구현하는 방식에 대해서 알아보겠습니다. 가상화를 구현하는 방식은 크게 두 가지로 구분 할 수 있습니다. 가상머신 기반의 가상화 그리고 컨테이너 기반의 가상화입니다.

가상머신 기반의 가상화는 또 두 가지 유형으로 나눌 수 있습니다. 먼저 가상머신 기반 가상화에 대해서 살펴본 후 컨테이너 기반 가상화에 대해서 알아보겠습니다.

 

가상 머신

가상 머신은 컴퓨팅 환경을 모방하여 소프트웨어로 구현한 것을 말합니다. 일반 컴퓨터와 마찬가지로 가상 머신에도 운영체제 및 애플리케이션을 설치하고 운영할 수 있습니다. 하나의 하드웨어에서 여러 개의 가상머신을 동작시키면서 독립적인 역할을 수행하도록 할 수 있습니다. 가상머신 간에는 하드웨어를 공유하면서도 각각 서로 다른 환경을 갖출 수 있으며 독립성이 보장됩니다. 이 얘기는 하나의 가상머신에 오류가 발생하거나 중단되더라도 문제가 전체로 확장되지 않는다는 뜻입니다.

 

하이퍼 바이저

이것을 가능하도록 하는 것이 하이퍼바이저입니다. 하이퍼바이저는 하나의 하드웨어 위에서 가상머신을 구동하게 해주는 것으로 소프트웨어 또는 임베디드로 구현됩니다. 하드웨어와 가상머신 사이에서 중간자 역할을 수행하는데 앞서 말씀드린 대로 가상머신에 컴퓨팅 자원을 할당해주거나 분리해 주는 역할을 합니다. 이처럼 하드웨어를 직접적으로 사용하는 것보다 하이퍼바이저를 통해 가상머신을 활용하면 한정된 하드웨어 자원을 더욱 다양하고 효과적으로 사용할 수 있습니다.

하이퍼바이저는 일반적으로 두 가지로 유형으로 구분합니다. 첫 번째 유형은 네이티브 하이퍼바이저입니다. 하이퍼바이저가 하드웨어에서 직접 작동되는 방식으로 하드웨어를 제어하며 가상머신을 직접 관리합니다. 이 방식은 가상머신의 운영체제 게스트 OS가 하드웨어 위에서 작동됩니다. 여기에 해당되는 것으로는 MS사의 Hyper-V가 있습니다.

호스트 하이퍼바이저는 일반적으로 애플리케이션처럼 OS 위에서 작동됩니다. 설치 및 구성이 쉽지만 네이티브 방식에 비해 성능은 상대적으로 떨어집니다. Oracle사의 Virtualbox가 여기에 해당됩니다.

 

가상화의 컨테이너

앞서 설명 드린 가상머신 기반 가상화는 하이퍼바이저 위에 게스트 OS를 여러 개 구동시키기 때문에 자원 소모가 많고 성능도 저하되는 문제가 있습니다. 이러한 단점을 해결하는 방식으로 컨테이너 가상화가 있습니다.

일반적 의미의 컨테이너는 보통 화물 컨테이너를 말하는데 철판으로 만들어진 재사용이 가능한 규격화된 통을 말합니다. 짐을 포장하기에 간편하고 운반 및 보관이 쉽기 때문에 많이 사용됩니다. 클라우드 컴퓨팅에서도 모듈화되고 격리된 공간을 의미하는 측면에서 컨테이너라는 용어를 동일한 개념으로 사용합니다.

과거부터 유닉스에서 컨테이너 기술이 사용되었고, 2000년대 중반부터는 리눅스에 내장된 LXC(LinuX Container) 기술이 등장하였습니다. 컨테이너 개념이 등장한 배경은 애플리케이션이 실행될 때 환경에 따라서 예상하지 못한 각종 문제가 발생하여 관리에 매우 큰 어려움이 있었습니다.

컴퓨팅 환경이 바뀌거나 다른 환경으로 이동하더라도 안정적으로 실행되는 것을 보장하기 위한 방법으로 컨테이너 방식을 사용하게 되었습니다. 애플리케이션을 실행하는 데 필요한 모든 라이브러리 및 구성 파일을 컨테이너 안에 패키지로 포장하면 어느 환경이든 쉽게 배포하고 실행할 수 있습니다.

앞서 설명 드렸던 가상머신도 완전히 격리된 공간에서 작동하기 때문에 컨테이너로 볼 수 있지만, 이 경우에는 게스트 OS가 추가로 설치되어 동작하기 때문에 성능이 느리고 자원을 많이 사용합니다. 반면 컨테이너 기반 가상화는 동일한 운영체제 커널을 공유하고 애플리케이션 프로세스를 격리하여 프로그램 패키지로서 동작합니다.

그렇기 때문에 별도의 게스트 OS 설치하고 운영할 필요가 없습니다. 따라서 가상 머신을 사용하는 것에 비해 컨테이너 방식은 가볍고 빠릅니다. 컨테이너 기반 가상화는 가상 머신 기반의 가상화보다 가볍고 빠르기 때문에 매우 많이 사용되고 있으며 앞으로도 확산될 전망입니다.

반응형