가상화란, 실제와는 다른 가상의 무언가, 예를 들어 하드웨어 플랫폼, 스토리지 디바이스, 네트워크 리소스 등을 만드는 것을 말한다.
- Wikipedia (https://en.wikipedia.org/wiki/Virtualization)
"가상화라는 것이 무엇인가요?" 라는 질문을 던져보면 굉장히 다양한 대답이 돌아온다.
그리고 답변 유형은 아마도 답변자의 배경 지식에 따라서 달라지는 것으로 보인다.
IT 배경 지식이 없는 사람이라면 가상화가 무엇인지에 대한 인식 자체가 없고, 컴퓨터에 관심이 있는 사람이라면 가상 머신(VM)의 개념을 떠올리고 JVM (자바 가상 머신도 물론 가상화의 일종이다!) 또는 VMware Workstation과 VirtualBox의 이야기를 꺼내기도 한다.
리눅스 개발을 하는 사람이라면 친숙할 KVM/QEMU, 그리고 커널 내부의 가상 머신인 eBPF (이것도 JVM과 마찬가지로 호스트 OS와는 다른 RISC 명령어를 실행하는 JIT 컴파일된 가상 머신이다)를 떠올리기도 할 것이다.
인프라 엔지니어라면 VMware vSphere로 대표되는 서버 가상화와, 어쩌면 VMware NSX로 대표되는 네트워크 가상화(또는 SDN) 기술을 떠올릴지도 모른다. Telco 엔지니어라면 5G 시대로 넘어오면서 탄력을 받게 된 NFV를 떠올릴 것이다.
그 외에도 수 많은 응용들이 가상화라는 표현을 사용한다. 그렇기 때문에 이 개념을 처음 접하는 많은 사람들이 혼동을 느끼고, 가상화라는 것이 무엇인가에 대한 개념이 제대로 잡히지 않은 채로 업계에 뛰어들고는 한다.
이 시리즈에서는 IT 인프라의 입장에서 '가상화란 무엇이고, 어떻게 구현되며, 어떤 식으로 동작하는가?'를 처음부터 끝까지 풀어서 써 볼 것이다.
그렇다. '처음부터 끝까지' 말이다.
우리는 서버 가상화로 시작해서, 개별 기술의 역사와 그 기술의 기저에 있는 개념들을 하나하나 알아볼 것이다. 그 다음은 네트워크 가상화와 스토리지 가상화를 다루고, 최근 떠오르고 있는 NFV/vRAN 기술에 대한 이야기를 잠깐 한 뒤, 마지막으로 가상화 기술의 미래에 대해 논할 것이다.
그래서 가상화란 무엇이냐고? 가상화는 그냥 그것을 개발한 사람들이 뭔가 '실제와는 다른 가상의' 것을 사용한다고 생각하거나, 아니면 기존 기술의 이미지를 빌려오고 싶을 때 사용하는 단어이다. 예를 들어 컨테이너 가상화의 경우 이미 보편화된 기술인 서버 가상화를 대체하기 위한 목적으로 개발되었다. 하지만 컨테이너 가상화의 구성요소를 잘 뜯어보면 그다지 '가상'이라고 부를 만한 것들이 없다. Docker를 기준으로는 컨테이너가 외부와 통신하기 위해 사용하는 veth 디바이스 정도가 '가상화'되었다고 말할 수 있을 것이다.
'컨테이너 가상화는 가상화 기술인가?'는 상당히 논쟁적인 주제이지만, 개인적으로 네임스페이스 구분은 가상화라고 보기 어렵다고 생각한다. 이것에 대해서는 추후 컨테이너 가상화를 다룰 때 다시금 이야기 할 시간이 있을 것이다.
결론적으로 '가상화'는 일종의 Buzzword로, 용어의 정의가 모호하고 사용례에 있어 일관성이 없다. 따라서, 처음 접하는 사람들에게는 굉장히 혼란스러울 수 있고, 그것이 정상이다.
가상화라는 용어를 한 단어로 정리할 수 있는 실버 불릿(Silver Bullet)은 존재하지 않는다. 그렇기 때문에 우리는 'IT 인프라 관점에서의 가상화'가 무엇인지 더 확실하게 알아야 할 필요가 있다.
자 그럼 이제 시작해 보자.
안녕하세요! 최근 가상화에 대해서 공부 중인 학생입니다.
혹시 가상화 기술에 대한 자세한 내용을 공부하고 싶은데 추천 해주실 책이나 자료가 있으실까요?