A Column

[응수쌤의 IT노트] 클라우드 네이티브 아키텍처와 클라우드 네이티브 애플리케이션

장성민

view : 934

 

클라우드 네이티브 아키텍처와 클라우드 네이티브 애플리케이션

 

 

 

클라우드 네이티브 아키텍처란?

기존의 로컬 환경이나 사내에서 구축하고 운영하였던 시스템을 클라우드 환경으로 전환해서 클라우드 컴퓨팅 시스템의 장점을 100% 활용할 수 있도록 애플리케이션을 구축하는 방법이다. 클라우드 컴퓨팅의 장점을 이용하기 위해서는 자동화된 빌드와 테스트 그리고 배포가 가능해지고 단단한 서비스의 구성요소와 변화에 민첩한 시스템을 구축할 수 있게 된다.

 

클라우드 네이티브 아키텍처의 핵심

확장 가능한 아키텍처

확장가능한 아키텍처란 시스템의 수평적 확장에 유연한 구성을 말한다. 많은 사용자들이 몰리더라도 확장된 서버로 시스템을 부하 분산하고 가용성을 보장할 수 있게 하는 것이다.

시스템을 양적으로 늘리는 것은 시스템의 하드웨어 비용이 증가되겠지만, 클라우드 네이티브 아키텍처에서는 클라우드 서비스를 제공하는 업체로부터 가상의 서버, 스토리지, 네트워크 등을 빌려서 사용하게 됨으로써 비용을 최소화 시킬 수 있고, 양적으로 증가된 시스템을 더 이상 사용하지 않게 되었을 경우에는 대여했던 자원을 반납해서 비용을 낮출 수 있다.

 

탄력적 아키텍처

탄력적 아키텍처는 CI/CD를 이용해서 서비스의 통합, 배포, 생성의 시간을 단축시키는 것을 뜻한다. 애플리케이션을 구성하는 각 기능을 하나의 분리된 마이크로서비스로 개발하고, 분리된 서비스를 통합하고 배포하기까지 소요되는 시간을 CI/CD를 통해서 처리함으로써 시스템 환경에 적용되는 시간을 단축할 수 있게 된다.

탄력적 아키텍처는 마이크로서비스로 작게 분리된 독립적인 서비스 구조로 개발되어야 하며, 서로 분리된 서비스들은 종속성을 최소화시키기 위해서 각 서비스는 상태를 가지지 않는 서비스 형태로 제공해야 한다.

 

장애격리

장애격리는 특정 서비스에 오류가 발생하더라도 다른 서비스에 영향을 주지 않는 것을 말한다. 클라우드 네이티브 아키텍처에서 마이크로서비스들은 하나의 독립적인 작은 단위의 애플리케이션과 동일하기 때문에 하나의 마이크로서비스에서 발생하는 문제나 오류사항이 다른 서비스에 미치는 영향을 최소화할 수 있다.

 

 

클라우드 네이티브 애플리케이션

클라우드 네이티브 애플리케이션은 클라우드 네이티브 환경에서 개발, 실행되는 애플리케이션을 말한다.

클라우드 네이티브 애플리케이션은 클라우드 환경에 지속적인 개발과 자동화된 관리 환경을 제공하기 위해 설계된 애플리케이션이므로 클라우드 내에서 확장이 가능하고, 어떤 클라우드에도 이식이 가능하다.

기존 애플리케이션은 모놀리식(Monolithic, 단일한) 구조로 물리서버 기반 위에서 동작하는 반면, 클라우드 네이티브 애플리케이션은 소규모 서비스 단위의 마이크로서비스로 구성되며 가상 컨테이너 환경에서 동작되도록 설계되고 구현된다.

 

[기존 애플리케이션과 클라우드 네이티브 애플리케이션을 차이점]

 

구분

모놀리식 애플리케이션

클라우드 네이티브 애플리케이션

애플리케이션 구조

모놀리식 구조

마이크로서비스

결합

크고, 조밀한 결합

작고, 느슨한 서비스 기반

실행환경

물리서버

가상 컨테이너

확장

수직확장(Scale-Up)

수평확장(Scale-Out)

인프라 의존성

인프라 의존

인프라 독립, 의존성 보장

개발방법

폭포수 개발 방법

애자일 개발방법

빌드 및 배포

수작업, 긴 시간

CI/CD 자동화, 지속적, 짧은 시간

조직 구조

단절된 개발

DevOps 협업

 

클라우드 네이티브의 구성요소

클라우드 네이티브를 위한 구성요소는 마이크로서비스, 컨테이너, 데브옵스, CI/CD.

 

1. 마이크로서비스

애플리케이션의 민첩성과 유지/관리 편의를 위해 기존의 모놀리식 아키텍처를 작은 기능 단위인 마이크로서비스로 분리하고, API를 통해 서로 커뮤니케이션 할 수 있게 하여 독립적으로 개발, 배포, 운영되는 서비스다.

모놀리식은 전체 애플리케이션이 하나의 통합된 패키지 현태로 구성되어 있고 구성 모듈들이 의존적으로 연결되어 있기 때문에 기능 하나를 변경하려면 전체 애플리케이션을 재배포해야 하는 번거로움이 있다. 같은 이유로 특정 모듈만 확장하기가 어별고, 어플리케이션을 담고 있는 서버 자체를 늘려야 하는 비효율적인 구조다.

마이크로서비스 아키텍처는 애플리케이션을 작은 기능으로 나누어 구축하기 때문에 개별 서비스들은 더 쉽게 변경하거나 확장할 수 있으며, 서비스마다 다른 언어, 프레임워크, 라이브러리를 사용할 수 있다는 장점이 있다.

 

2. 컨테이너 가상화

컨테이너 가상화는 클라우드 네이티브의 핵심 개념이다.

기존의 로컬환경에서 운영하던 시스템을 클라우드 환경으로 이전함으로써 적은 비용으로 확장성과 이식성을 갖는 시스템을 구축할 수 있도록 하는 것이 컨테이너 가상화 기술이다. 컨테이너 가상화는 기존의 서버보다 훨씬 가벼운 프로세스 수준의 컨테이너를 마이크로서비스의 배포 및 실행환경으로 사용하기 때문에 어떠한 클라우드 환경에도 즉각적인 배포가 가능하도록 확장성과 이식성을 갖추고 있다.

하이퍼바이저 기반의 가상화(VM방식)는 애플리케이션이 돌아갈 수 있는 OS환경이 포함된다. 그렇기 때문에 애플리케이션을 실행하기 위해서는 VM을 띄워 자원을 할당한 다음, OS를 부팅한 후 애플리케이션을 구동할 수 있기 때문에 애플리케이션을 구동시키는데 시간이 오래 걸린다.

반면, 컨테이넌 기반의 가상화 방식은 프로세스 간 벽을 만들어 어플리케이션이 구동되는 격리(컨테이너)되어 있기 때문에 애플리케이션마다 OS를 개별로 구성해줄 필요 없이 하나의 OS을 공유하여 사용한다. 개별 OS가 필요하지 않기 때문에 더 가볍고 크기도 작아서 복제와 배포에도 간편하다. 따라서 애플리케이션 실행에 필요한 모든 것(라이브러리, 바이너리, 기타 구성 파일 등)을 패키지로 묶어 컨테이너 이미지를 만들어 사용하기 때문에 컨테이너가 작동하는 환경이라면 어디서든지 실행시킬 수 있다는 장점이 있다.

 

3. 데브옵스(DevOps)

DevOpsDevelopmentOperation이 합쳐진 용어다.

개발조직과 운영조직의 통합을 의하는 것으로 개발조직과 운영조직이 통합되면 고객의 요구사항을 빠르게 반영할 수 있다. DevOps는 자주 변경되는 고객의 요구사항을 반영하기 위해서 개발된 내용을 테스트하고, 피드백 받고, 업데이트하는 과정을 전체 개발 일정이 완료될 때까지 끊임없이 반복적으로 진행하는 것이다.

따라서, 클라우드 네이티브 환경에서는 이러한 DevOps 환경에 맞게 서비스를 더 작은 단위의 마이크로서비스로 분할해서 개발함으로써 더 자주 테스트하고, 쉽게 배포할 수 있어야 한다.

 

4. CI/CD

CI/CD는 지속적인 통합과 지속적인 배포를 의미한다.

지속적인 통합은 애플리케이션을 수많은 마이크로서비스로 분할하고 여러 개의 개별 개발팀에서 개발하고 있는 경우에 결과물을 통합하기 위한 형상관리를 의미하기도 하고, 통합된 코드를 빌드하고, 테스트하고, 배포하는 과정 자체를 의미하기도 한다. CI 시스템은 Git과 같은 형상관리 시스템과 연동해서 사용되며, 개발자가 Git에 해당 코드를 업로드함과 동시에 빌드/테스트를 실행해서 다른 코드와 문제가 발생하는지 여부를 바로 확인해 볼 수 있다.

지속적인 배포는 패키지화된 결과물을 개발자나 운영자의 개입없이 자동으로 실행환경에 배포하는 것이다.

 

 

 

<저작권자(c)중앙에이치티에이(주). 무단전재-재배포금지>

 

먼저 비밀번호를 입력하여 주세요.

창닫기확인

TOP