임대일

1.1 도커(Docker) 가상화 기술: 애플리케이션 서버 본문

도커/개발자를 위한 쉬운 도커

1.1 도커(Docker) 가상화 기술: 애플리케이션 서버

limdae94 2024. 5. 30. 13:17
 

개발자를 위한 쉬운 도커 | 데브위키 - 인프런

데브위키 | 현업 개발자가 도커를 사용한 경험을 녹여낸 새로운 커리큘럼으로 기존 교재 및 강의와 차별된 강의를 제공합니다. 단순한 명령어 사용법이 아닌 도커를 왜 사용해야하는지 대한 근

www.inflearn.com

 

1. 서버

1.1 서버: 서버의 의미

클라이언트와 서버 간의 통신 흐름

서버(Server)는 클라이언트에게 네트워크를 통해 정보나 서비스를 제공하는 컴퓨터 시스템으로 컴퓨터 프로그램(Server Program) 또는 장치(Device)를 의미한다. 특히, 서버에서 동작하는 소프트웨어를 서버 소프트웨어(Server Software)라 한다. 주로 리눅스 등의 운영 체제를 설치한 대형 컴퓨터를 쓰지만, 그렇지 않은 경우도 있다.

- 위키백과: 서버 -


서버는 소프트웨어(Software)와 하드웨어(Hardware)를 포함한다. 때로는 서버의 의미는 흔히 알고 있는 백엔드 API 서버가 될 수도 있으며 데이터 센터에서 수많은 하드웨어 장비를 떠올릴 수 있다. 이처럼 서버의 의미는 맥락에 따라 전혀 다른 의미를 갖게 된다. 일반적으로 서버는 아래 그림과 같이 클라이언트의 요청을 응답을 수행한다.

 

1.2 서버: 백엔드 서버 구조

 

스프링 부트 기반으로 AWS 배포까지 한 경험이 있다면 흔히 만나게 되는 서버 구조이다.

기본적인 백엔드 서버 구조

 

파일 서버

  • 파일 공유 소프트웨어가 설치되어 있는 서버
  • 파일 공유하는 기능을 클라에게 제공

 

DB 서버

  • 데이터를 관리하는 DBMS가 설치된 서버
  • 데이터 저장하는 기능을 클라이언트에게 제공
  • 오픈소스인 MySQL이나 PostgreSQL 사용이나, Oracle DB를 구매하여 설치 후 사용 가능

위와 같은 서버들은 이미 개발되어 있는 소프트웨어를 다운 받아서 실행시키는 형태이다. (우리가 웹 브라우저를 사용하기 위해 크롬을 다운받아 쓰는 것과 비슷하다.) 또한, 다운받은 소프트웨어는 오픈 소스 소프트웨어를 사용할 수도, 유로 라이선스를 구매해 사용할 수도 있다.

 

 

웹 서버 (WEB)

  • 클라이언트가 웹 브라우저를 통해서 HTTP 요청을 보내면 정적인 웹 페이지를 제공해주는 서버
  • 주로 HTML, JS, CSS 등 프론트엔드 개발자가 개발한 파일들이 사용
  • 웹 서버의 종류에는 Nginx, Apache HTTP Server, LiteSpeed etc.

 

 

웹애플리케이션 서버(WAS)

  • Java와 같은 프로그래밍 언어로 개발된 백엔드 애플리케이션을 실행하는 서버
  • 소스 코드를 통해 개발된 소프트웨어를 실행시키는 경우 웹 서버나 웹 애플리케이션 서버가 있음

이 외에도 프록시 서버, 메일 서버 등 다양한 서버가 있지만 기업에서 운영하는 대표적인 서버로는 4가지로 볼 수 있다.

 

 

1.3 서버: 엔터프라이즈 서버 운영

베어메탈(Baremetal), 하이퍼바이저(Hypervisor), 컨테이너(Conainer) 세 가지는 모두 서버 가상화 및 애플리케이션 배포와 관련된 개념으로, 각각의 기술은 다양한 환경에서 사용된다. 앞으로 학습하게 될 도커(Docker)가 컨테이너에 속한다.

엔터프라이즈 운영 환경의 세 가지

 

 

2. 베어메탈

  • 베어메탈은 물리적인 서버 하드웨어에 직접 운영체제를 설치하고 애플리케이션을 실행하는 방식
  • 이때 "베어메탈"은 하드웨어를 가리키며, 하드웨어 위에 별도의 가상화 계층 없이 직접 소프트웨어가 설치된다는 의미

 

2.1 베어메탈: 장점

  1. 성능: 하드웨어 자원을 직접 사용하기 때문에 가상화 오버헤드가 없어서 최고의 성능을 제공
  2. 신뢰성: 단일 시스템에서 실행되므로 가상화 계층에서 발생할 수 있는 오류를 방지

 

2.2 베어메탈: 단점

  1. 유연성 부족: 물리적인 서버에 소프트웨어를 직접 설치하므로 유연하게 자원을 할당하거나 이동이 어려움
  2. 비용: 물리적인 서버를 구입하고 유지보수하는 비용이 높음
  3. 스케일링: 필요할 때 빠르게 자원을 확장하거나 축소가 어려움

 

3. 하이퍼바이저 (Hypervisor)

  • 하이퍼바이저는 물리적인 하드웨어 위에서 여러 가상 머신(VM)을 실행할 수 있도록 하는 소프트웨어
  • 하이퍼바이저는 물리적인 하드웨어와 가상 머신 간의 중개자 역할을 수행. 하이퍼바이저는 크게 두 가지 유형이 존재
    1. 타입 1 (네이티브 하이퍼바이저): 하드웨어 위에 직접 설치 -> 예: VMware ESXi, Microsoft Hyper-V, KVM.
    2. 타입 2 (호스트형 하이퍼바이저): 기존의 운영체제 위에 설치 -> 예: VMware Workstation, Oracle VirtualBox.

 

3.1 하이퍼바이저: 장점

  • 유연성: 여러 운영체제를 단일 하드웨어에서 실행할 수 있어 자원 활용이 최적화
  • 격리성: 각 가상 머신은 독립적으로 실행되므로, 하나의 VM에서 발생한 문제가 다른 VM에 영향을 주지 않음
  • 스케일링: 쉽게 가상 머신을 추가하거나 제거할 수 있어 확장성이 우수

 

3.2 하이퍼바이저: 단점

  • 성능 오버헤드: 가상화 계층이 존재하기 때문에 일부 성능 저하가 발생
  • 관리 복잡성: 가상 머신과 하이퍼바이저를 관리해야 하기 때문에 관리가 복잡

 

4. 컨테이너 (Container)

  • 컨테이너는 운영체제 수준의 가상화를 제공하여 애플리케이션과 그 의존성을 격리된 환경에서 실행할 수 있도록 제공
  • 컨테이너는 동일한 운영체제 커널을 공유하므로, 하이퍼바이저 기반의 가상 머신보다 가벼움
  • 대표적인 컨테이너화 기술로는 Docker

 

4.1 컨테이너: 장점

  • 경량성: 운영체제를 포함하지 않고, 애플리케이션과 필요한 라이브러리만 포함하기 때문에 가상 머신보다 훨씬 가볍고 빠름
  • 이식성: 컨테이너는 모든 필요한 라이브러리와 애플리케이션을 함께 패키징하므로, 어디서나 동일한 환경에서 실행이 가능
  • 빠른 시작: 컨테이너는 빠르게 시작하고 중지할 수 있어, 개발과 배포 과정이 효율적

 

4.2 컨테이너: 단점

  • 격리성: 컨테이너는 운영체제 커널을 공유하기 때문에, 가상 머신만큼 완벽한 격리를 제공하지 않음
  • 복잡성: 컨테이너 오케스트레이션과 네트워킹 등의 관리가 복잡함

 

 

요약

  • 베어메탈: 물리적인 서버에 직접 소프트웨어를 설치하는 방식으로, 최고의 성능을 제공하지만 유연성이 부족하고 비용이 높습니다.
  • 하이퍼바이저: 물리적 하드웨어에서 여러 가상 머신을 실행할 수 있는 소프트웨어로, 유연성과 격리성을 제공하지만 성능 오버헤드가 존재합니다.
  • 컨테이너: 운영체제 수준의 가상화로, 애플리케이션을 경량화하고 빠르게 배포할 수 있지만, 격리성은 하이퍼바이저에 비해 낮습니다.

이 세 가지 기술은 각각의 장단점이 있으며, 특정 상황과 요구사항에 따라 적합한 기술을 선택하여 사용할 수 있습니다.