가상화란 컴퓨터가 사용되는 방식이 어떤 식으로 변화했는지를 보여줍니다. 먼저 일반적인 컴퓨터 하드웨어의 구성에서 시작해서, 이를 어떻게 쪼개서 효율적으로 쓰게 되었는지를 순차적으로 살펴보겠습니다.
서버의 하드웨어
가상화에 들어가기 전에 서버의 하드웨어들은 어떻게 구성되어있나 살펴 보면, 사실 이는 일반적인 컴퓨터가 필요한 하드웨어와 크게 다를 건 없습니다. CPU, 메모리, 디스크, 네트워크 장치 등으로 이루어집니다. 단지 여기에 외부 저장 장치 (NAS) 나, 공유 디스크 (Shared Disk) 등으로 해당 서버에 어떤 식으로 논리적으로 하드웨어를 구성해 주느냐가 차이가 생깁니다.
베어메탈 서버
위의 하드웨어들을 가지고 가장 자원을 크게 구성해줄 수 있는 게 베어메탈 서버입니다. bare-metal 이라는 용어 답게, 일반적인 컴퓨터처럼 실제 물리적인 하드웨어들을 그대로 써서 하나의 컴퓨터를 구성하겠다는 뜻입니다. 서버라는 건 일반적인 가정용 컴퓨터와 달리 서버실의 커다란 랙 위에 하드웨어가 구성되므로 CPU든 메모리든 단위가 굉장히 크게 이루어지므로, 보통 베어메탈 서버라고 하면 초대형 컴퓨터 정도로 생각하면 좋습니다.
응답 시간 등이 중요한 서버는 이렇게 구성하며, 이 구성의 서버에는 하드웨어 위에 바로 OS를 구성하고, 그 위에 미들웨어나 DB 등을 모두 설치하게 됩니다.
가상화
위처럼 베어메탈 서버는 하나의 컴퓨터로 사용하기에는 일반적으로 너무 좋고 많은 리소스를 가지고 있기 때문에, 이걸 쪼개서 사용할 방법을 고안해 냅니다. 기본적으로 하나의 하드웨어를 마치 여러 대의 컴퓨터인 것처럼 인식하게 하는 것을 가상화라고 하며, 아래와 같은 순으로 발전 내지는 필요에 의해 변화해 나갔다고 생각하시면 됩니다.
가상 머신 (VM : Virtual Machine)
먼저 가상 머신은 요즘에도 흔히 사용하는 서버 구성 방식입니다. 이 방식은 하드웨어는 하나로 놓되, 하드웨어 위에 Hypervisor 를 올려서 마치 여러 개의 독립적인 하드웨어인 것처럼 인식하게 합니다. 그러면 각각 독립적인 하드웨어가 구성되어 있으므로, 이 위에 OS를 깔고 그 위에서 또 여러가지 앱이나 DB, 웹 서버 등을 올려서 실행할 수 있습니다.
아래 그림에서도 보이지만, 베어메탈 서버와 VM의 차이는 OS를 하나만 까는 것과, 각기 독립된 하드웨어인 것처럼 인식하게 해서 OS를 여러개 깔 수 있도록 하는 것입니다. 윈도우에서도 가상화 기술을 지원하며, VMWare 나 아니면 윈도우 자체적인 Hyper-V 를 통해 윈도우가 깔린 컴퓨터의 자원을 쪼개서 여러개의 OS를 올릴 수 있도록 지원합니다.
지금 이야기한 OS를 여러 개 설치한다는 점이 아래에 설명할 가상화 기술과 가장 다른 점입니다. 아래로 넘어가 보겠습니다.
컨테이너 (도커)
이제까지 설명한 내용에서 하나의 하드웨어에 여러 개의 OS를 설치할 수 있는 데까지 왔습니다. 그런데 이제 사람들은 더 귀찮아지고 더 컴퓨터를 효율적으로 쓰고 싶어졌습니다. 왜냐면 운영체제 라는 것 자체가 메모리나 CPU 등의 리소스를 꽤 먹는 데다가 구동 시간도 오래 걸립니다.
그래서 누군가가 생각했습니다. 아니 귀찮은데 OS까지도 공유하면 안되나? 그렇게 나온 개념이 컨테이너입니다.
위 그림에서 보시면 컨테이너의 경우 하나의 OS 위에 Container Runtime 이 올라가 있고, 그 위에 미들웨어나 여러가지 앱, DB 등이 구동되고 있는 것을 볼 수 있습니다. 이렇게 하나의 OS 위에서 독립된 환경으로 돌릴 수 있게 감싸주는 걸 컨테이너라고 하고, 이를 다루는 도구를 컨테이너 런타임이라고 합니다. 컨테이너 런타임 중 가장 유명한 것이 바로 그 도커입니다.
컨테이너 오케스트레이션 (쿠버네티스)
이제까지 가상화는 뭔가 점점 더 잘게 쪼개는 방향으로 말씀을 드렸었죠? 컨테이너 오케스트레이션은 결이 약간은 다릅니다. VM은 하나의 하드웨어를 좀 더 잘게 나누어 쓰고 싶다라는 개념에 가깝다면, 컨테이너는 하나의 OS를 잘게 나누어 쓰고 싶은 개념이라기 보다는 편의나 보안을 위한 기능에 가깝습니다. 계정이 꼬일 일도 없고, 이 앱이 잘못 죽는다고 해서 다른 앱이 같이 죽을 일도 없고, 다른 앱이 참조하고 있는 메모리를 건드릴 일도 없습니다. 약간 샌드박스 같은 개념에 가깝다고 할까요?
그런데 이런 컨테이너가 여러 개가 있다고 해 보겠습니다. 그래서 VM이 하나가 아니라 한 20개쯤 되는 VM 이곳 저곳에 컨테이너가 막 올라가 있는 거예요. 지금 사실 생각만 해도 아찔한데, 한 6개월 전에 설치했던 컨테이너가 어느 VM에 들어가 있는지 찾을 수 있을까요?
찾을 수는 있겠죠 뭐, 노가다 열심히 하면요. 그런데 그런 식의 노가다가 이어지면 사람 지칩니다. 뭐하는 짓인가 하고 현타도 옵니다. 그래서 누군가 생각했습니다. 아 이거좀 관리해 줬으면 좋겠다-
그걸 (관리) 오케스트레이션이라고 합니다. 특히 컨테이너를 관리해준다고 해서 이를 컨테이너 오케스트레이션이라고 하고, 그 중 가장 유명한 것이 쿠버네티스입니다.
쿠버네티스가 해주는 일은 여러 서버 (노드) 에 컨테이너를 적절히 분산해서 배치하거나, 문제가 생긴 컨테이너를 교체하기도 하고 컨테이너가 사용할 비밀번호나 환경설정을 관리해 주는 일 등을 합니다. 그러면 사람이 사실 어느 VM에 어떤 컨테이너가 들어가 있는지는 알 바 아니고 나는 그냥 아 내가 언제 무엇을 한 컨테이너가 잘 돌고 있구나, 또는 문제가 있구나, 환경 설정을 바꾸어야 겠다 정도의 관리만 해 주면 되는 거죠.
오늘은 서버와 가상화 기술의 발전에 대해 간단히 살펴보았습니다. 다음 시간에는 도커에 대해 조금 더 살펴보고, 도커 데스크탑을 이용해서 좀 더 쉽게 도커를 사용하는 법에 대해서도 말씀드리려고 합니다.
댓글