☁️ 가상화가 무엇인지 알아보자!

HOJIN JUNG·2023년 5월 1일
0
post-thumbnail
  • IT 기술에 대해 알아보자!의 첫 이야기 입니다.
  • '가상화에 대한 설명' 를 읽고 의역하였습니다.
  • 차근차근 이해하는 것을 목표로 합니다.


🚪 들어가기에 앞서

컨테이너 기술의 성장과 함께 Cloud Native(클라우드 네이티브) 애플리케이션이 각광받고 있다. '컨테이너 기술'은 무엇이며 '클라우드 네이티브'란 무엇임을 알기에 앞서 '가상화' 가 무엇인지에 대해 먼저 알아보기로 한다. 이후 가상화와 컨테이너가 어떤 점에서 다른지에 대해 살펴보자.



1. 가상화란?

가상화란 하나의 컴퓨터 물리 자원을 여러 개의 가상 컴퓨터로 나누는 것이다. '가상화'가 등장하기 이전에는 한 애플리케이션이 하나의 컴퓨터에서 운영하였다. 이 말인 즉슨, 하나의 애플리케이션이 사용하지 않는 CPU 자원을 낭비 하고 있다는 뜻이다. 이러한 낭비되는 하드웨어 자원을 더 효율적으로 쓰기 위해 가상화가 등장하였다.

가상머신

가상머신이란 소프트웨어 기반의 컴퓨터이다. 위 그림에서 가상 머신은 Hypervisor(하이퍼바이저) 위에 놓인 하나의 컴퓨터이다. 가상머신을 알기 위해서는 하이퍼바이저와 GuestOS 라는 두 개념을 이해하여야 한다.

GuestOS는 가상머신에서 운영하고자 하는 윈도우나 리눅스와 같은 각각의 독립적 OS를 의미한다.

하이퍼바이저는 물리적 하드웨어 위에서 가상머신들을 관리하기 위한 소프트웨어이다. 가상머신의 자원을 하드웨어에 알맞게 분배하여 각각의 가상머신이 서로 영향을 받지 않고 독립적으로 운영되는 것처럼 보이게끔 도와주는 역할을 한다.

하이퍼바이저의 종류에는 두 가지가 있다.

  • Bare Metal Hypervisor(OpenKVM)

    • 물리적 자원(Bare Metal) 위 Host OS를 두지 않고 바로 Hypervisor를 두어 층을 하나로 줄임으로써 자원 이용의 부하를 줄인다.
  • Host Hypervisor(VirtualBox)

    • Host OS를 두고 가상 머신을 운영하기 위해 Hypervisor를 두는 것이다. 위 그림은 Host Hypervisor의 형태라고 볼 수 있다. 흔히 사용하는 VirtualBox나 VMware Workstation이 이에 해당된다.


2. Processes

컨테이너의 개념을 잡기에 앞서 Process(프로세스)의 개념을 정확히 하고 넘어간다. 이를 알아야 1979년부터 컨테이너가 어떻게 동력을 얻기 시작했는지를 이해할 수 있기 떄문이다.

프로세스

프로세스는 돌아가고 있는 프로그램이다. 프로세스는 메모리가 필요하고 관련 자원이 필요하다. hostOS 위에서 어떤 추상화도 없이 운영되는 프로그램이 바로 프로세스이다. 그렇다면 프로세스가 필요한 자원에는 무엇이 있을까?

  • Memory(메인메모리)
  • Operationg Descriptors(파일): 어떻게 프로그램을 동작시키기 위해 필요한 파일
  • Security attributes(Permission - 권한): H/W 자원을 사용하기 위한 권한설정
  • Process Context(프로세스 컨텍스트): 프로세스가 어떤 상태에서 수행하고 있는지에 관한 정보


3. Containers

이전에 컨테이너에 관한 개념은 존재했지만, 컨테이너화된 애플리케이션을 만들고 배포하며, 관리하는데 Docker(도커)라는 오픈소스 플랫폼이 2013년부터 각광받기 시작했다. 컨테이너화란 하나의 애플리케이션 혹은 소기능을 동작시키기 위한 모든것을 하나의 Unit(컨테이너)에 넣고 가상머신 형태로 운영하는 것이다. 결과적으로 애플리케이션은 클라우드 환경이든, 라즈베리파이와 같은 소형 기기든 어디서든 도커만 있다면 동작할 수 있다.

컨테이너와 프로세스의 차이점

컨테이너는 독립적으로 하나의 애플리케이션을 운영하기 위해 다수의 프로세스를 동작시킬 수 있다. 즉, 컨테이너는 다음과 같은 커널의 요소를 사용하여 여러 프로세스들을 그룹화하여 동작시키는 일련의 절차이다.

  • namespace: user namescape(보안과 관련하여 사용되는 User ID, Group ID 등), 프로세스 ID, 네트워크, 파일시스템의 일부를 사용할 수 있게 해주는 영역
  • cgroups: 그룹핑을 위해 할당되는 특정 자원과 프로세스들을 그룹화 하여 관리하는 것
  • capabilities: 특정 프로세스를 사용하기 위해 superuser의 권한을 확장하거나 제한을 두는 것


마치며

원문에서는 커널의 어떤 자원을 사용하는지에 관해 자세히 설명하고 있지만, 이는 컨테이너를 공부하며 조금 더 살펴볼 필요가 있는 내용입니다. 추후 도커가 어떤 하드웨어 자원을 사용하고 있는지, 하드웨어 자원을 사용하기 위해 어떤식으로 그룹핑하고 있는지에 관해 도커 시리즈에서 다룰 예정입니다.

profile
근거를 가지고 앞으로 나아가는 엔지니어

0개의 댓글