구름DGU 스터디 2주차 - 클라우드 컴퓨팅의 역사, 그리고 Docker

박민기·2024년 9월 27일

구름 DGU 스터디

개요

이번 세미나는 클라우드 컴퓨팅의 역사, 그리고 Docker 입니다. 세미나 전에 도커를 사용은 하고 있지만 도커가 뭔지는 정확히 공부한 경험이 없어서 재미있는 세미나가 될 거 라고 생각했습니다.

이번 세미나에서는 클라우드 컴퓨팅, 컨테이너, 도커등의 전반적인 역사와 사용하게 된 배경에 대한 플로우로 진행되었습니다.

스터디 전 스몰토크

스몰토크는 크게 없었지만 스터디 전에 같이 점심을 먹으면서 간단한 아이스브레이킹(?) 하는 시간을 가졌습니다.

세미나 내용 정리

클라우드 컴퓨팅이란?

  • 클라우드 컴퓨팅: 인터넷을 통해 필요한 만큼의 컴퓨팅 자원을 사용하는 방식입니다. 물리적 서버 구매 대신 가상화된 자원을 활용합니다.
  • 클라우드 서비스 모델: IaaS, PaaS, CaaS, SaaS
  • IaaS (Infrastructure as a Service): 예시로 Amazon EC2가 있습니다.
  • PaaS (Platform as a Service): IaaS보다 더 많은 기능을 제공합니다. 운영 체제와 런타임 환경까지 포함됩니다. 예: Vercel, Heroku
  • SaaS (Software as a Service): 완전한 소프트웨어 솔루션을 제공합니다. 예: Notion, Gmail
  • CaaS (Container as a Service): 컨테이너 관리 도구
    • 예시: Amazon EKS, Google Kubernetes Engine

클라우드 컴퓨팅의 발전 과정

  • 온프레미스 (On-premise): 물리적 서버 + 베어메탈 (자체 OS로 애플리케이션 실행)
  • 2000년대 초반: 가상화 기술 도입, 하지만 여전히 물리적 서버 사용
  • 2000년대 중반: 클라우드 컴퓨팅의 초기 형태 등장
  • 2010년대: Docker 기술 도입
  • 현재: 쿠버네티스 (Kubernetes) 도입 및 확산

베어메탈 (Bare Metal) 환경

  • 전통적인 방식 (약 40년간 사용): 실제 하드웨어에 직접 OS 설치, 단일 OS에 단일 애플리케이션 구동
  • 주요 문제점: 고사양 서버의 리소스 낭비, 버전 관리의 어려움, 보안 취약성 (한 지점의 침해가 전체에 영향), 확장성 제한 등 다양한 운영상의 문제점 발생

가상화 기술

  • 단일 물리적 컴퓨터를 여러 가상 환경으로 분할하여 사용
  • 하이퍼바이저 (Hypervisor): 단일 물리적 컴퓨터에서 다수의 운영 체제를 동시에 실행할 수 있게 하는 기술. 이로 인해 가상 머신 (VM) 시대가 시작되었습니다.
  • 장점: VM의 리소스 할당을 통한 자원 격리 가능. 베어메탈의 문제점 대부분 해결. 각 VM은 독립된 환경을 제공하며, VM 간 통신은 내부 IP와 포트를 통해 이루어집니다.
  • 현재 과제: 유휴 리소스의 효율적 관리 방안 모색 중

온프레미스(On-premise) 방식

  • 이 방식은 앞서 언급한 방식들의 문제점을 해결하려는 시도입니다.

오프프레미스(Off-premise) 방식: 클라우드 컴퓨팅

  • 장점 → 사용한 만큼만 비용을 지불합니다.
  • AWS는 온프레미스인 반면, 오프프레미스 방식을 사용하면 자원 확보가 용이합니다.

VM(가상 머신)의 한계

  • VM은 각각 독립적인 운영체제를 가지고 있어 무겁습니다.
  • 이를 개선하기 위해 컨테이너가 등장했습니다. 경량화 별표 5개 컨테이너는 커널을 공유하여(운영체제 공유와 유사) 일관된 실행 환경을 구축합니다.
  • 컨테이너는 OS를 포함하지 않아 매우 가볍습니다. 빠르고 필요한 기능을 모두 갖추고 있어 확장성이 뛰어납니다.
  • 컨테이너 런타임: 컨테이너를 실행하고 관리하는 소프트웨어 (예: Docker)
  • User Space → Docker가 생성한 컨테이너 내부에 User Space가 있으며, 여기서 동일한 OS 커널을 공유합니다.

하드웨어 CPU 구조: CISC(복잡한 구조), RISC(ARM, 스마트폰에 주로 사용되는 구조)

클러스터 기반 오케스트레이션 도구

  • 여러 서버를 하나의 시스템처럼 자동화하여 클러스터를 구성합니다.
  • 확장성 있게 배포하고 관리합니다. 노드를 물리적으로 파드, 노드로 구성합니다.

컨테이너

  • Docker 데몬이 컨테이너 생성에 관여합니다.
  • 커널은 운영체제의 일부이며, 운영체제는 소프트웨어입니다. 커널에서 컨텍스트 스위치가 일어나 CPU 등으로 전환됩니다.
  • 운영체제는 커널과 사용자 GUI 등으로 구성됩니다. 각 컨테이너는 호스트의 커널을 공유합니다.
  • 컨테이너는 OS를 어떻게 공유할까요?
  • User Space → 사용자 앱이 실행되는 영역으로, 각 컨테이너는 하나의 User Space를 가집니다.
  • 컨테이너 런타임 → 컨테이너 이미지를 생성하고 관리하는 소프트웨어입니다. Namespace와 Cgroups 같은 격리 메커니즘을 설정하여 컨테이너 간, 그리고 컨테이너와 외부 간의 독립성을 유지합니다.
  • 컨테이너 이미지 → 코드, 종속성, 파일 시스템을 포함한 불변의 템플릿입니다.
  • Namespace와 Cgroups는 커널의 기능입니다. Docker가 제공하는 것이 아니라 커널이 제공하는 것으로, Docker는 이를 이용해 하드웨어 자원을 그룹별로 관리합니다.
  • Cgroups API를 이용해 컨테이너를 그룹화하여 자원을 분리합니다.
  • Docker Desktop을 실행할 때 노트북 RAM을 많이 사용하는데, 이는 리소스를 먼저 많이 할당한 후 관리하는 방식인가요?
  • Namespace에 대해 더 자세히 알아보기

컨테이너가 채택한 파일 저장 방식

  • 오버레이 파일 시스템: 업데이트가 계속 쌓이는 방식입니다.
  • 불변성을 유지하기 위해

스터디 후기

도커에 대해서 조금 알고 있긴했고 사용하면서 편리하다고는 생각은 많이했습니다. 하지만 이거를 왜 쓰는지 사용하면 어떤게 좋은지에 대해서 알지 못한 상태로 사용을 했습니다.

이번 세미나에서 클라우드 컴퓨팅 부터 시작해서 많은 실습과 역사를 자연스럽게 이어주는 방식으로 세미나를 진행해 주셔서 직접 실습하면서 이래서 좋고 이래서 안 좋았다는 것을 알게 되어서 너무 재미있었습니다.

profile
밍기적거리지 않기

0개의 댓글