본문
가상화(Virtualization)에 대한 고찰
새해를 맞이하여 한가지 목표로 잡은것이 일주일에 한번이상 글을 작성하는것이다. 특히 기술에 관한 글을 쓰고자 하는데 왜냐하면 머리속에는 알고있다고 생각했던것들이 막상보면 잘 모르고 있었던것이거나 또는 글을 쓰면서 그 개념이 확실해지는것을 느끼기 때문이다. 최근에는 새로운 기술들이 무수히 쏟아지고 있어서 follow-up을 열심히 하고있는데, 공유할 대상을 찾지못하고 그냥 머리속으로 정리만 하고 넘어간다. 그런데 나의 두뇌 특성상 한달정도만 지나도 벌써 그 데이터가 소실되어버리니, 이처럼 비효율적인 follow-up을 그대로 방치하면 안되겠다는 측면에서, 나를 위해서, 그리고 한국어 사용자 기술 커뮤니티를 위해서 글을 작성하려 한다.
최근 기술 트렌드는 가상화이다. 그럼 가상화란 무엇인가? 클라우드를 비롯한 IT 서적을 볼때 가장 먼저 찾는 페이지가 가상화의 정의부분이다. 찾다보면 많은 책들이 그림으로 대충 뭉뚱그려 설명하거나, 아예 그러한 설명이 없는 책들도 허다하다. 그리고 네이버에서 가상화라고 검색하면 다양한 정의들이 나와있지만 그중에서 맘에드는 정의는 찾기가 매우 어렵다. 그나마 가장 맘에들었던 정의는 매일경제용어사전의 가상화 정의이다.
물리적으로 다른 시스템을 논리적으로 통합하거나 반대로 하나의 시스템을 논리적으로 분할해 자원을 효율적으로 사용케 하는 기술을 말한다. 이를 통해 서로 다른 기종의 서버와 스토리지도 연결해 쓸 수 있으며 한 시스템에서 파티셔닝을 통해 업무간 간섭 없이 서로 다른 종류의 업무를 한번에 처리할 수도 있다.
가상화는 대개 가상머신을 만들때에 사용되는 컴퓨팅 기술이라고 생각하지만, 통신쪽에서도 가상화라는 단어를 쓰기 때문에 좀 더 포괄적인 시각에서 단어를 이해해야 한다. 또한 도커로 유명해진 컨테이너 기술도 가상화 기술의 일종이라는 시각을 적용해보면 역시나 하이퍼바이저기반의 전가상화 기술의 관점과는 차이가 있다. 이때 한글 위키피디아의 가상화와 추상화에 대한 정의 일부를 인용해본다.
가상화(假像化, virtualization)는 컴퓨터에서 컴퓨터 리소스의 추상화를 일컫는 광범위한 용어이다.
전산학에서 추상화(抽象化)는 복잡한 자료, 모듈, 시스템 등으로부터 핵심적인 개념 또는 부분을 간추려 내는 것을 말한다.
미술에서 추상화(抽象畫)는 대상의 구체적인 형상을 나타낸 것이 아니라 점, 선, 면, 색과 같은 순수한 조형 요소로 표현한 미술의 한가지 흐름이다.
가상화를 이해하기 위해서는 따라서 추상화를 이해해야 한다. 추상화는 전산/미술에서 서로 다른 의미로 사용되지만, 비슷한 핵심을 가지고 있다. 네이버 중국어 사전에서 추상(抽象)의 풀이는 다음과 같다. '사물 중에서 개별적이고 비본질적인 것은 버리고, 공통적이고 본질적인 속성을 추출하는 사유 과정'.
추상화라는 단어는 객체지향 프로그래밍 언어를 접해본 사람이라면 이해하기가 쉬운 용어이다. 객체지향에서 제일 처음에 접하게 되는 예제가 '삼각형, 사각형, 원' 클래스(범주?)이다. 이 세가지들의 공통적이고 본질적인 속성은 '도형'이라는 범주에 포함된다는 것이다. 이렇게 삼각형만의 고유한 속성이 사라지고 도형이 되는 과정은 추상화이다. 다른 예를 들어보자. 학생과 선생을 추상화 하면 '사람'이라는 범주에 포함된다.
이제 다형성(Polymorphism)의 개념을 끄집어보자. 위키피디아의 설명은 너무 와닿지 않고, 대신 네이버 사전에서 다형현상을 검색하면 '한 개체 집단에 속하는 생물종이 다양한 형태로 나타나는 현상'이라고 정의한다. 위의 추상화와 연관지어 설명하자면, 한 개체 집단에 속하는 생물종이(도형, 사람) 다양한 형태로(삼각형/사각형/원/오각형/..., 학생/선생/조교/...) 나타나는 현상으로 풀어쓸 수 있다. 학생은 언제나 선생이 될 수 있고, 선생도 마찬가지로 학생이 될 수 있다. 둘 다 사람이라는 공통 범주에 속하기 때문이다.
이와같이 추상화는 다형성을 이끌어낸다. 그럼 돌아와서, '컴퓨터 리소스의 추상화'라는 '가상화'에 대해 돌이켜보자. 우선 컴퓨터 리소스의 정의를 알아야 한다. 영어로는 System resource로 표현할 수 있으며, 아래에 위키피디아의 정의를 가져왔다. 클라우드 구축을 위한 대표적인 프로젝트인 OpenStack에서는 컴퓨팅 자원으로 컴퓨트, 네트워크, 스토리지 자원을 꼽기도 한다. 위키를 인용한 이유는 컴퓨터 리소스에는 단순히 하드웨어 자원만 고려되는것이 아니라는것을 보이기 위해서이다.
In computing, a system resource, or simply resource, is any physical or virtual component of limited availability within a computer system. Every device connected to a computer system is a resource. Every internal system component is a resource. Virtual system resources include files (concretely file handles), network connections (concretely network sockets), and memory areas. Managing resources is referred to as resource management, and includes both preventing resource leaks (releasing a resource when a process has finished using it) and dealing with resource contention (when multiple processes wish to access a limited resource).
그런데 설명하기는 역시 하드웨어로 설명하는게 쉽다. 1TB 외장하드, 128GB USB 메모리를 추상화하면 무엇이 될까? '저장장치'이다. 그리고 만약 여기에 다형성을 부여한다면 1TB 외장하드는 1TB USB 메모리로 표현될 수 있다. 1TB 플로피 디스크로도 표현될 수있다. 즉, 추상화는 물리적인 속성을 논리적으로 재정의하는것이라고도 설명할 수 있다. (Physical -> Logical) 물리적인 제약을 초월하여 논리적으로 재정의 하는세상에서는 1TB 저장장치의 일부만을 가지고 500GB USB 외장하드로 재정의 할 수 있고 또한 외장하드와 메모리를 결합하여 1128GB USB메모리로 표현하는것도 가능하다.
이처럼 가상화는 추상화를 통하여 물리적이고 한정적인 세상을 바탕으로 새로운 논리적인 가상의 세계를 구축할 수 있도록 한다. 네트워크 가상화(Network Virtualization)은 기존의 물리 장비들로 이루어진 네트워크를 논리적으로 재구성해 새로운 논리 네트워크로 만들어내는것을 의미한다. 가상머신(Virtual Machine)은 호스트의 물리 장치(CPU, RAM, HDD)를 논리적으로 재구성해 새로운 논리(가상) 컴퓨터를 만들어 낸다. NFV(Network Function Virtualization)은 범용 장비들로 구성된 컴퓨터 자원들을 논리적으로 재구성하여 새로운 논리(가상) 네트워크 기능/장비(Network Function)를 만들어낸다.
결국, 가상화는 고정된 기존 자원을 논리적으로 재구성하여 유동적이고 새로운 형태로 재창조해내는 개념으로 이해할 수 있다. (그래서 맨 앞에 인용한 가상화 정의가 맘에든다.) 쓰다보니 머리가 복잡해져서 황급히 끝내는 감이 없지않지만 그래도 마무리는 지어지는것같아 다행이다. 안그랬면 '인간은 무엇을 위해 사는가'와 같이 평생 고민하고 살아야 했을지도..
댓글