구름 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에 대해 더 자세히 알아보기
컨테이너가 채택한 파일 저장 방식
- 오버레이 파일 시스템: 업데이트가 계속 쌓이는 방식입니다.
- 불변성을 유지하기 위해
스터디 후기
도커에 대해서 조금 알고 있긴했고 사용하면서 편리하다고는 생각은 많이했습니다. 하지만 이거를 왜 쓰는지 사용하면 어떤게 좋은지에 대해서 알지 못한 상태로 사용을 했습니다.
이번 세미나에서 클라우드 컴퓨팅 부터 시작해서 많은 실습과 역사를 자연스럽게 이어주는 방식으로 세미나를 진행해 주셔서 직접 실습하면서 이래서 좋고 이래서 안 좋았다는 것을 알게 되어서 너무 재미있었습니다.