개념 : 가상화는 하이퍼 바이저를 활용해 물리 자원을 가상 자원으로 추상화하여, 사용자와 물리 자원 사이에 가상화 레이어를 구현하는 ‘기술’이다
- 하드웨어 수준의 가상화 : 하드웨어 수준에서 CPU, 메모리, 네트워크 리소스를 가상화한다
목적 : 컴퓨팅 리소스 활용에 대한 최적화 / 확장성 확보 / 안정성 향상 / 인프라 관리 간소화를 위해 사용한다.
레벨과 종류 : 하드웨어 레벨에서 사용되며, 서버 가상화 / 스토리지 가상화 / 네트워크 가상화 / 데스크톱 가상화가 있다
사용되는 기술 : 가상 머신과 컨테이너 기술을 활용한다 ( EX. VMware / Hyper-V / Docker )
장점 :
- 단일 물리 서버에서 여러 가상 서버를 운영할 수 있으므로, 자원 낭비를 최소화하고 비용을 절감할 수 있다
- 각 가상 서버간의 간섭을 방지하여, 전체 시스템의 안정성 향상
- 유연한 자원 확장과 빠른 애플리케이션 배포
- 가상 자원은 소프트웨어를 통한 관리가 가능하므로, 인프라 관리를 자동화할 수 있다
단점 : Hyper-Visor나 런타임으로 인한 오버헤드가 발생한다
개념 : 가상화와 풀링을 활용하여 가상 IT 리소스들을 네트워크를 통해 연결한 환경
목적 : 클라우드 서비스 제공 / 확장성과 탄력성 확보 / 자동화를 통한 리소스 관리 효율 향상
클라우드 구축 장점
- 전체 리소스에 대한 관리 효율 향상
- 리소스의 확장성과 탄력성 향상
- 탄력성은 부하에 대응해 자동으로 자원을 조절하는 능력
- 확장성은 리소스를 늘리거나 줄이는 능력
- 분산된 리소스를 통한 고가용성 및 내결함성 확보
클라우드는 네트워크( 외부망 or 내부망 )를 통해 가상 리소스들을 연결한 환경을 의미한다.
클라우드 컴퓨팅은 이러한 클라우드 환경에서 가상화된 리소스( 컴퓨팅 자원, 플랫폼, 애플리케이션 )를 네트워크를 통해 온디맨드로 제공하는 기술이다. 구성 방식에 따라 퍼블릭 클라우드, 프라이빗 클라우드, 하이브리드 클라우드, 멀티 클라우드로 나뉜다. 제공 범위에 따라 IaaS, PaaS, SaaS로 나뉜다. ( EX. AWS, GCP, AZURE, NCP )
클라우드 서비스는 외부망을 통해 제공되는 온라인 서비스다. 클라우드 컴퓨팅뿐만 아니라 파일 저장 및 공유 서비스, 이메일 서비스 등이 있다. ( EX. 구글 드라이브 )
클라우드 컴퓨팅 장점
- 사용한만큼 지불하므로 비용 효율적
- 관리형 서비스를 통해 운영 간소화 및 개발 속도 향상
- 간편한 리소스 확장과 축소가 가능
- 자동화를 활용한 간편한 프로비저닝 및 관리
클라우드 컴퓨팅 단점
- 데이터 소유권 문제
- 보안 문제
- 공유 인프라로 인한 성능 저하
개념 : 애플리케이션과 실행에 필요한 리소스들을 격리 및 패키징하여, 독립된 실행 환경을 제공하는 기술
- 컨테이너 이미지 : 애플리케이션을 실행하기 위한 요소 ( 코드, 라이브러리, 종속성, 환경 설정, 실행 환경 )들을 모두 포함한 패키지
- 운영체제 수준의 가상화 : 컨테이너는 운영체제 수준에서 CPU, 메모리, 네트워크 리소스를 가상화한다
사용되는 기술 : 컨테이너 런타임 - 컨테이너 실행 및 관리, cgroup - 자원 제한, namespace - 프로세스 격리
목적 : 이식성 향상 - 어디서든 동일하게 실행 가능 / 개발과 배포 단순화 / 오케스트레이션 툴을 활용한 관리 용이성 향상
장점 :
- 애플리케이션 실행에 필요한 운영체제의 일부분만 가지고 있기에 가볍다
- 호스트의 커널을 공유하기에 가상 머신에 비해 성능 오버헤드가 작다
- 컨테이너 이미지에 실행에 필요한 환경이 포함되었기에 어느 환경에서나 일관되게 실행된다
- 경량화를 통해 빠른 실행과 삭제가 가능하므로, 스케일 아웃에 용이하며, 높은 확장성을 지닌다
- 이식성, 경량화를 통해 IAC와 CI/CD를 활용한 인프라 및 애플리케이션 배포 자동화에 용이하다
- 컨테이너화를 통해 개발자와 운영팀간의 확실한 역할 분배가 가능해진다
단점 :
- 완벽한 보안을 보장하지 않는다
- 호스트의 커널을 공유하기에 특정 운영체제에 종속적이다
- 단, 종속성은 Docker Desktop과 같은 도구들을 활용해 해소할 수 있다
- 장점 : 물리 서버는 직접적인 물리 자원 접근을 통해 높은 성능을 제공
- 단점 : 자원에 대한 확장성과 유연성이 낮다.
- 장점 : 가상 머신은 호스트 OS와 독립적이기에 물리 서버에서 여러 OS를 실행할 수 있고, 자원의 확장성과 유연성이 높다. 전체 OS를 가상화하기에 완벽한 격리를 제공. 하드웨어 수준의 가상화
- 단점 : 자원 활용간에 가상 OS의 커널과 호스트 OS의 커널을 거치기에 성능이 물리 서버보다 낮다.
- 장점 : 컨테이너는 가상 머신과 비교했을 때 가볍기에, 빠르게 생성하고 제거할 수 있다. 또한 호스트의 OS 커널을 공유하기에 자원 활용 간에 오버헤드가 적다. OS 수준의 가상화
- 단점 : 호스트 OS에 종속적이므로 호환성을 유지해야 하며, 리눅스 기술을 통해 프로세스를 분리시키기에 완벽한 격리를 보장하기 힘들다.
도커 : 리눅스 컨테이너 기반의 가상화 플랫폼으로 이미지와 컨테이너를 관리할 수 있는 도구이다. 데몬, 런타임, 레지스트리, 클라이언트로 구성되어 있다. 런타임은 기본적으로 하이 레벨 런타임 Containerd와 로우 레벨 런타임 Runc를 사용한다.
- High level 컨테이너 런타임 : 이미지 관리, low level 런타임으로 명령 전달, 클라이언트가 컨테이너를 실행하고 모니터링할 수 있도록 데몬과 API 제공
- Low level 컨테이너 런타임 : 컨테이너 실행 기능만 제공. namespace와 cgroup 설정 후, 해당 범위 내에서 명령 실행
쿠버네티스 : 컨테이너 오케스트레이션 도구. 셀프 힐링, 오토스케일링, 모니터링 및 로깅 기능을 제공하여, 다수의 서버에서 컨테이너들의 배포, 관리, 확장에 도움을 준다.
- 클라우드 네이티브 환경을 구현하기 위해선 컨테이너 기술이 필요하며, 오케스트레이션 플랫폼을 제공하는 쿠버네티스가 이에 효과적이다
- IaC와 CI/CD를 활용해 배포 자동화를 구현하는데 있어서, 코드로 구성된 컨테이너가 효과적이다
- MSA 구현에 있어서 경량화된 컨테이너 기술이 효과적이다
- 쿠버네티스의 장점을 활용하여 클라우드 환경에서 고가용성을 확보할 수 있다