가상화 기술

가상화 기술이란?

  • 물리적인 컴퓨터 환경에서 논리적인 컴퓨터 환경을 만드는 기술
  • 컴퓨터 안에서 여러 컴퓨터를 실행하는 것을 말한다.
  • 한대의 컴퓨터로 여러 개의 논리적인 OS 환경을 만들어 각 OS에 리소스를 분해하여 실행한다.
    • 각 OS는 논리적으로 분리되어 있어 다른 OS에 영향을 주지 않고, 각 OS의 리소스 사용량은 정해져 있기 때문에 하나의 컴퓨터를 여러 컴퓨터를 안정적으로 사용할 수 있다.
    • 가상환경을 통해서 실제로는 하나의 컴퓨터지만 사용자는 마치 여러 대의 컴퓨터를 사용하는 것처럼 보인다.

서버

서버란?

  • 하드웨어에서 실행 중인 소프트웨어를 의미
  • 클라이언트의 요청(Request)를 하드웨어를 통해 소프트웨어에 전달되면, 요청에 맡는 기능을 실행하여 결과를 응답(Reponse)한다.

서버의 종류

  • 파일 서버 (크롬) - 파일 공유와 같은 기능을 클라이언트에 제공, 이미 개발되어 있는 소프트웨어를 다운받아 실행
  • DB 서버 (MySQL, PostgreSQL) - 데이버베이스를 관리하고, 데이터를 클라이언트에 제공
  • 웹 서버 (HTML, CSS, JavaScript)- 클라이언트가 웹 브라우저를 통해 HTTP 요청을 보내면 정적인 웹 페이지 제공
  • 웹 애플리케이션 서버(WAS / Spring) - 백엔드 애플리케이션을 실행하는 서버

엔터프라이즈 서버란?

  • 조직에서 사용하는 컴퓨터 소프트웨어로 일상적인 운영 및 프로세스를 실행하고, 크기 조정 및 최적화와 고유한 자체 애플리케이션을 빌드한다.
  • WEB, WAS, DB를 운영

엔터프라이즈 서버의 종류

  • 베어메탈(Baremetal)
    • 서버 위에서 OS를 설치하여 여러 소프트웨어를 실행한다.
    • 기업에서 사용하기 어렵다.
  • 하이퍼바이저(Hypervisor)
    • 설치를 통해 가상 OS를 만들어 하이퍼바이저를 설치하여 게스트 OS를 통해 여러 환경을 구성할 수 있다.
    • 각 게스트 OS에 CPU와 메모리 최대 사용량을 지정한다.
    • 논리적으로 분리되어 있는 가상 OS를 가상머신이라고 부른다.
    • 게스트 OS의 커널은 호스트 OS의 커널에 요청해 하드웨어의 자원을 사용하는데 이때, 하이퍼바이저가 서로 다른 커널 간의 언어를 통역해준다.
    • 하이퍼바이저를 통해 다른 OS를 호스트 OS로 사용가능
    • 예) VirtualBox, vmware, Red Hat
  • 컨테이너(Container)
    • image

    • 커널의 가상화 기을 통해 컨테이너라는 가상 환경을 만들어 여러 컨테이너를 통해 여러 개의 서버를 운영하는 방식
    • 하이퍼바이저없이 게스트 OS들이 호스트 OS의 커널을 공유하여 하드웨어 자원을 이용하는 기술
    • 하이퍼 바이저의 번역 단계를 없애 오버헤드를 줄인다
    • LXC 기술에서 커널의 네임스페이스와 Cgroups라는 기능을 활용하여 만들어진 각각의 격리된 공간을 컨테이너라고 한다.
    • 네임스페이스 : 프로세스, 하드드라이브, 네트워크, 서용자, 호스트 네임처럼 리소스를 나누는 기준 역할
    • Cgroups : 프로세스가 사용하는 메모리, CPU, 하드디스크. 네트워크 밴드위스처럼 리소스의 사용량을 배분하는 기술
    • 하이퍼바이저에 비해 더 가볍고, 빠르다.
    • 하이버바이저가 없기 때문에 게스트 OS는 호스트 OS와 같은 종류이어야한다.
    • 예) Docker
  • 하이퍼바이저와 컨테이너 서버는 가상화 기술을 사용

도커

도커

  • 컨테이너 가상화 기술을 사용하여 컨테이너를 관리하기 위한 컨테이너 플랫폼
  • 컨테이너 플랫폼은 컨테이너 엔진과 컨테이너 런타임으로 구성
    • image

    • 컨테이너 엔진 - 사용자의 요청을 받아 컨테이너를 관리
    • 컨테이너 런타임(runc) - 직접 컼널과 통신하면서 실제로 격리된 공간을 만드는 역할
  • 도커의 동작과정 (클라이언트-서버모델)
    • image

    • 클라이언트는 사용자의 명령을 CLI를 통해 명령어를 입력하여 도커 데몬(서버)에 전달
    • 도커 데몬은 컨테이너의 관리하는 기술을 제공, 호스트 OS에서 지속적으로 실행되어 클라이언트에 요청에 따라 컨테이너 관리
    • 도커 데몬은 컨테이너 런타임을 통해 컨테이너를 조작하여 API에 맞게 JSON 형태로 결과를 만들어 클라이언트 정보 전달
  • 컨테이너 실행 예시
    • image

    • 호스트OS에서 CLI를 통해 docker run nginx를 입력
    • 도커 데몬은 요청을 분석하여 컨테이너 런타임을 통해 컨테이너 생성
    • 로컬 호스트에 접속하면 컨테이너에 실행 중인 nginx 프로세스에서 요청을 전달 받아 웹페이즈를 제공
    • 이 프로세스는 디스크, 네트워크, 메모리, CPU와 같은 공간이 완전히 격리된 공간에서 실행할 수 있음

컨테이너

  • 큰 서버를 효율적으로 나눠서 사용하기 위한 가상화 기술