[Cloud] 컨테이너(Container), 마이크로 서비스(Microservice)
본문 바로가기
IT/Cloud

[Cloud] 컨테이너(Container), 마이크로 서비스(Microservice)

by 로진김 2021. 6. 21.

가상화란, 물리적인 자원을 동시에 다수의 논리적인 자원으로 사용하는 것입니다. 가상화는 사용자와 물리 리소스 간의 가상화 layer 구현을 통해, 리소스에 대한 접근과 관리를 간소화합니다. 

 

Container는 모듈화 되고 격리된 컴퓨팅 환경을 의미합니다.

 

VM과 Container의 차이

 VM은 가상 머신이며 Hypervisor기반을 두고 여러 개의 VM을 올려 실행됩니다. VM 서로 독립된 OS 환경을 제공합니다. 한 곳의 VM에서의 저장 내역은 지역 변수처럼 다른 VM에 영향을 끼치지 않습니다. 이를 VM당 모노리딕(Monolithic)한 서비스라고 하며, 1VM당 1 서비스를 제공합니다. VM 단위로 생성과 수정이 가능하며 GB 단위의 VM을 생성하는 것이 필요합니다. 또한 VM 개수만큼 라이선스 비용이 산정되며 독립된 VM들로 안정적인 운영이 가능합니다. 그러나 오버헤드가 상당하며 부팅에 소요되는 시간이 매우 큽니다.

 

 반면, Container는 애플리케이션을 실제 구동하는 환경으로부터 추상화하는 논리 패키징을 도와줍니다. 잘 구동되는 프로그램을 배포하였는데, 버전이나 설정에 의해 구동이 되지 않는 상황이 발생합니다. 구글에 따르면 효율적인 애플리케이션 개발과 배포를 위해 개발되었다고 합니다. 구글 클라우드는 'Container는 SW 서비스를 실행하는 데 필요한 버전의 프로그래밍 언어 런타임과 라이브러리 같은 종속 항목 그리고 애플리케이션 코드를 가볍게 패키징 한 것이라고 정의하였습니다. Container는 Host OS 커널 공유로 필요한 만큼의 자원을 사용합니다. MS 구축에 최적화되어있으며 MB 단위의 Container를 생성합니다. 그리고 Host 1대당 라이선스 비용을 산정합니다. 대신, OS 커널 공유로 해당 부분의 장애 발생 시 영향이 발생합니다.

마이크로 서비스(Microsevices) : SW가 정의된 API를 통해 통신하는 작고 독립적인 서비스로 구성된 SW 개발을 위한 아키텍처입니다. 즉, 업무별로 나눌 수 있을 만큼 최대한 나눈 것입니다. 애플리케이션 핵심 기능을 서비스로 분리한 마이크로 서비스는 각 서비스를 독립적으로 구축하고 배포합니다. 또한, 서비스 간에 부정적인 영향을 주지 않도록 구성합니다.

 

기존 모노리딕(Monolithic, 레거시) 앱은 다음과 같은 문제로 마이크로 서비스로 이전하였습니다.

첫째, 구식 아키텍처 패턴과 프로그래밍을 유지하여 수천 개의 코드와 논리가 중복되는 Redundancy 문제가 있었습니다. 둘째, 복잡한 기능 추가 절차 때문에 로드, 컴파일, 빌드 등의 과정에서 시간이 증가하였습니다. 셋째, 고비용 HW를 필요로 하여 단일 서버를 사용하였습니다. 넷째, 앱 인스턴스를 추가하려면, 로드 밸런서(load balancer)와 고비용을 지불하여 서버를 구매해야 했습니다. 다섯째, 애플리케이션을 패치를 하게 되면 서비스를 중단할 것을 미리 대비해야 했습니다. 그래서 다운타임을 미리 계획하는 등의 번거로운 과정들이 필요하였습니다.

 

 기존 모노리딕 애플리케이션의 문제와 번거로움을 해소하기 위해, 마이크로 서비스로 이전하고 있습니다. 마이크로 서비스로 이전하면 하나의 모노리딕 애플리케이션에서 여러 서비스로 분리할 수 있고, 각 서비스는 특정 비즈니스 로직만을 수행하여 필요한 리소스만을 효율적이게 할당할 수 있습니다. 또한 서비스 개별로 스케일링할 수 있기 때문에 패치와 업그레이드 시 다운타임을 최소화할 수 있습니다. 그리고 서비스 유형에 특화된 언어로 개발이 가능하여 기존 앱의 개발 패턴을 유지할 필요가 없습니다. 이로써 특정 기능과 서비스만을 담당하는 개발 팀을 꾸려 프로젝트를 이끌어 나갈 수 있습니다.

 

 마이크로 서비스와 컨테이너의 조합은 애플리케이션의 모든 종속성과 함께 포장된 패키지를 독립적으로 작동하도록 구성할 수 있으며, 다른 애플리케이션과 격리된 가상 환경을 제공합니다. 따라서, 마이크로 서비스와 컨테이너의 조합으로 효율적인 개발, 배포를 할 수 있습니다.

 

 그러나, 수많은 컨테이너를 일일이 관리하는 것은 부담이 될 수밖에 없습니다. 서비스가 거대해질수록 컨테이너뿐만 아니라 서버도 증가하게 됩니다. 증가한 컨테이너를 효율적으로 관리하는 Container Orchestration이 등장하게 됩니다. Container Orchestration이란, 복잡한 컨테이너 환경을 효과적으로 관리하기 위한 툴이라고 생각하면 됩니다.

컨테이너 사진.

 다음에는 Container Orchestration를 대표하는 쿠버네티스(Kubernetes)를 소개해보겠습니다.

 

잘못된 정보는 댓글로 부탁드립니다.

반응형