[TIL] 3장 3.4 가상화

ki hyun Lee·2022년 7월 23일
0

TIL

목록 보기
16/16

TIL (Today I Learned)

2022.06.08

오늘 읽은 범위

3장. 3계층형 시스템을 살펴보자: 3.4 가상화

가상화란?

  • 컴퓨터 시스템에서 물리 리소스를 추상화하는 것

가상화라고 한다면 크게 와닿지 않을 수 있다. 하지만 우리의 생각보다 가상화는 우리 주변에 존재하고 있다. 대표적인 예로 OS는 우리가 하드웨어를 의식하지 않더라도 컴퓨터를 사용할 수 있게 도와주기에 가상화 기술 중 하나라고 볼 수 있다. OS가 등장하기 이전에는 하드웨어를 의식한 프로그래밍이 필요했고 이는 매우 복잡한 작업이었다. 하지만 OS 커널의 등장으로 하드웨어가 추상화되면서, 컴퓨터에 연결된 기억 장치나 네트워크를 통한 데이터 교환이 하드웨어를 의식하지 않고 이루어지고 있다.

또한, 한번에 하나의 프로그램만 실행되는 환경이라면 OS의 역할이 그다지 중요하지 않았을 수도 있다. 하지만, 우리가 사용하는 컴퓨터는 동시에 다수의 프로그램을 실행시켜야 하기에 프로그램별로 독립된 공간을 부여하지 않는다면 하나의 프로그램에서 발생한 오류가 컴퓨터 전체를 정지시킬 가능성도 있다.

가상 머신

호스트 OS형

윈도우즈나 리눅스 등의 호스트 OS상에 가상화 소프트웨어를 설치해서 이용하는 방식이다. 소프트웨어를 애뮬레이터 하기 때문에 성능적 제한이 존재한다.

하이퍼바이저형

호스트 OS형과 달리 OS를 거치지 않고 하드웨어상에서 직접 가상화 소프트웨어를 실행하고 그 위에 가상 머신을 동작시키는 기술이다. 호스트 OS를 거치지 않으므로 호스트형보다 성능이 우수해서 서버 가상화의 대표 기술로 자리 잡았다.

하이퍼바이저형 가상화 구조에는 완전 가상화와 준가상화가 존재한다. 먼저 완전 가상화는 물리 머신상에서 동작하는 OS나 드라이버를 그대로 게스트로 이용할 수 있다는 장점이 있지만, 소프트웨어로 애뮬레이션 하기 때문에 성능이 저하된다는 문제가 존재한다. 이 문제를 해결하기 위해 등장한 것이 바로 준가상화다. 실존하는 하드웨어를 애뮬레이션 하는 방식이 아닌 가상 환경용 가상 하드웨어를 소프트웨어적으로 애뮬레이션 한다. 준가상화에선 가상 환경에서 동작시키는 게스트 OS마다 준가상화 전용 드라이버나 준가상화용으로 최적화된 OS 커널을 이용해야 했었다. 하지만 이후 인텔과 AMD에서 가상 하드웨어 지원 기능을 개발해서 하이퍼바이저도 지원하게 되면서 현재는 완전 가상화가 자리를 잡은 상태이다.

컨테이너

컨테이너를 한 마디로 정의하자면 리소스가 격리된 프로세스이다. 하나의 OS상에서 여러 개를 동시에 가동할 수 있으며, 각각 독립된 루트 파일 시스템, CPU/메모리, 프로세스 공간 등을 사용할 수 있다는 점이 가상머신과의 차이다.

컨테이너의 역사

컨테이너의 역사는 1970년대 빌 조이가 개발한 chroot가 시발점이라고 알려져 있다.

  • 빌 조이는 BSD 유닉스나 TCP/IP, vi 등을 개발한 사람이다.

1970년대의 컴퓨터는 매우 비싸서 상용 환경과 개발 환경을 별도로 준비하려면 많은 비용이 들었다. 하나의 컴퓨터로 상용, 개발 환경을 함께 사용한다면 잘못된 파일을 변경하거나 삭제할 위험이 있었는데, 이 문제를 해결하기 위해 등장한 것이 바로 chroot이다. 프로세스가 OS의 루트 디렉터리 아래에 있는 특정 계층에 접근하지 못하게 하는 기능으로 현재도 다양한 분야에 적용되고 있다.

도커의 등장

드디어 가상화라고 하면 항상 등장하는 도커에 대해 알아보자. chroot 이후로도 상용 유닉스나 오픈 소스에서 컨테이너 기술의 개발이 착실히 진행되었으며, 2013년에 파일 시스템과 프로세스를 분리하는 기능이 추가되었다. 이를 통해 파일 시스템의 이미지의 패키징과 버저닝이 가능해졌고 컨테이너 이미지를 공유할 수 있는 도커가 등장함으로써 컨테이너 기술이 주목을 받기 시작했다.

도커는 2008년에 언어에 의존하지 않는 Paas를 구축하기 위해 설립되었다. 초기의 도커는 개발한 애플리케이션을 클라우드에 배포해서 실행하는 구조였다. 하지만 애플리케이션 관련 프레임워크나 라이브러리 등의 버전이 일치하지 않아서 로컬에서 실행된 프로그램이 클라우드에서는 실행되지 않는 문제가 빈번하게 발생하자 원래는 클라우드 내부 구조로 개발했던, 애플리케이션 실행 환경을 자동 구축해주는 ‘도커 이미지’라는 기술을 클라우드 이외의 환경에서도 사용할 수 있게 오픈 소스로 공개했다. 또한 도커 허브라는 도커 이미지를 공유할 수 있는 레지스트리가 생겨나면서 폭발적인 인기를 얻기 시작했다.

도커의 장점

  • 컨테이너는 OS를 공유하므로 컨테이너 실행이나 정지 속도가 빠르다
  • OS의 커널을 공유하므로 VM만 사용하는 경우와 비교해 한 대의 호스트 머신상에서 훨씬 많은 컨테이너를 실행할 수 있다. (+ 이를 통해 리소스를 한 곳에서 쉽게 관리할 수 있다.)
  • 도커는 라이브러리나 프레임워크 등을 도커 이미지로 묶어서 공유할 수 있는 것으로, 특정 환경에서는 재현되지만 자신의 개발 환경에서는 재현되지 않는 문제가 발생하기 어렵다. (버그를 효율적으로 수정할 수 있다.)

클라우드와 가상화 기술

하이퍼바이저 및 컨테이너 등의 가상화 기술은 구글이나 메타, 아마존 등의 대규모 웹 서비스에서 사용되고 있다. 또한 AWS, GCP, Azure 등의 클라우드 서비스에서는 가상 머신 서비스, 컨테이너 서비스, Function as a Service(Faas) 서비스나 다른 기타 서비스를 지탱하는 기술로 이용되고 있다.

오늘 읽은 소감은? 떠오르는 생각을 가볍게 적어보세요

오늘은 항상 궁금했던 가상화와 컨테이너 기술에 대해 알아보았다. 맨날 주위에서 도커가 좋다 컨테이너가 좋다라는 말을 듣고는 있었지만 아직 대규모 웹 서비스를 개발해본 적이 없기에 왜 컨테이너가 필요한지 몰랐고 가상화와 컨테이너가 어떤 식으로 작동하는지도 알지 못했다. 이번 기회를 통해 가상화에 대해 많이 알게 되어서 나중에는 백엔드를 도커로 배포하는 과정도 진행해보면 좋을 것 같다.

profile
Full Stack Developer at Team Verse

0개의 댓글