본문 바로가기

개발/소프트웨어공학

Deployment Generation

Traditional Deployment (전통적인 배포 시대)

초기 조직은 애플리케이션을 물리 서버에서 실행했었는데 한 물리서버에서 여러 애플리케이션의 리소스 한계를 정의할 방법이 없었기에 리소스 할당의 문제가 발생했다. 예를 들어 물리 서버 하나에서 여러 애플리케이션을 실행한다면 리소스 전부를 차지하는 애플리케이션 인스턴스가 있을 수 있고 결과적으로 다른 애플리케이션의 성능이 저하될 수 있었다.

 

이에 대한 해결책으로 서로 다른 여러 물리 서버에서 각 애플리케이션을 실행하는 방법이 있으나 이는 리소스가 충분히 활용되지 않는다는 점에서 확장 가능하지 않기에 물리 서버를 유지하기 위한 많은 비용이 들었다.

 

Virtualized Deployment (가상화된 배포 시대) :

전통적인 배포 시대의 문제점에 대한 해결책으로 가상화 기술이 도입되었다. 단일 물리 서버에서 CPU에 여러 가상 시스템을 실행할 수 있게 한다. 가상화를 사용하면 VM 간에 애플리케이션을 격리하고 애플리케이션의 정보를 다른 애플리케이션에서 자유롭게 엑세스 할 수 없기에 일정 수준의 보안성을 제공할 수 있다.

 

가상화를 사용하면 물리 서버에서 리소스를 보다 효율적으로 활용할 수 있으며 쉽게 애플리케이션을 추가하거나 업데이트할 수 있고 하드웨어 비용을 절감할 수 있어서 더 나은 확장성을 제공한다. 가상화를 통해 일련의 물리 리소스를 폐기 가능한 가상 머신으로 구성된 클러스터로 만들 수 있다.

 

각 VM은 가상화된 하드웨어 상에서 자체 운영체제를 포함한 모든 구성 요소를 실행하는 하나의 완전한 머신이다.

 

Container Deployment (컨테이너 배포 시대) :

컨테이너는 VM 과 유사하지만 격리 속성을 완화하여 애플리케이션 간에 운영체제를 공유한다. 그러므로 컨테이너는 가볍다고 여겨진다. VM 과 마찬가지로 컨테이너에는 자체 파일 시스템, CPU, 메모리, 프로세스 공간 등이 있다. 기본 인프라와의 종속성을 끊었기 때문에 클라우드나 OS 배포본에 모두 이식할 수 있다.

 

컨테이너는 다음과 같은 추가적인 혜택을 제공하기 때문에 인기가 있다.

1. 기민한 애플리케이션 생성과 배포 : VM 이미지를 사용하는 것에 비해 컨테이너 이미지 생성이 보다 쉽고 효율적이다.

2. 지속적인 개발, 통합 및 배포 : 안정적이고 주기적으로 컨테이너 이미지를 빌드해서 배포할 수 있고 이미지의 불변성 덕에 빠르고 쉽게 롤백할 수 있다.

3. 개발과 운영의 관심사 분리 : 배포 시점이 아닌 빌드/릴리스 시점에 애플리케이션 컨테이너 이미지를 만들기 때문에 애플리케이션이 인프라스트럭처에서 분리된다.

4. 가시성은 OS 수준의 정보와 메트릭에 머무르지 않고 애플리케이션의 헬스와 그 밖의 시그널들을 볼 수 있다.

5. 개발, 테스팅 및 운영 환경에 걸친 일관성, 랩탑에서도 클라우드와 동일하게 구동된다.

6. 클라우드 및 OS 배포판 간 이식성, 어디에서든 구동된다.

7. 애플리케이션 중심 관리 : 가상 하드웨어 상에서 OS를 실행하는 수준에서 논리적인 리소스를 사용하는 OS 상에서 애플리케이션을 실행하는 수준으로 추상화 수준이 높아진다.

8. 느슨하게 커플되고 분산되고 유연하며 자유로운 마이크로서비스를 구축할 수 있다. 애플리케이션은 단일 목적의 머신에서 모놀리식 스택으로 구동되지 않고 보다 작고 독립적인 단위로 쪼개져서 동적으로 배포되고 관리될 수 있다.

9. 리소스 격리 : 애플리케이션 성능을 예측할 수 있다.

10. 자원 사용량 및 리소스 사용량 : 고효율 고집적이다.

 

# 출처 : 쿠버네티스란 무엇인가? - Kubernetes

반응형