본문 바로가기

CS 이야기

Cloud Native Architecture란?

안녕하세요. 이번 포스팅에서는 Cloud Native Architecture에 대해 알아보겠습니다.

 

Cloud Native Application

Cloud Native Architecture라는 것은 결국 Application 구축 방법 중 하나를 말합니다. 따라서 어떠한 Applictaion을 위한 Architecture인지 알아보기 위해 Cloud Native Applictaion에 대해 먼저 알아보겠습니다.

 

Cloud Native Application은 다음과 같은 네가지 특징을 가집니다.

 

1. Microservices. 마이크로 서비스로 개발됩니다.

 

2. CI/CD. 자동으로 통합되고, 빌드 테스트 배포됩니다. 

* CI/CD : 지속적인 통합/ 지속적인 배포라는 의미를 가지고 있는 용어입니다.

* 지속적인 통합 : 하나의 애플리케이션을 여러명이 개발하고 있다고 생각해보면 쉽습니다. 각자 개발한 코드는 하나로 통합되어야 합니다. Jenkins, Team CI, Travis CI와 같은 툴을 사용하며, git과 같은 형상관리 시스템을 통해 통합니다.

* 지속적인 배포 : 지속적인 전달, 배포를 의미합니다. git과 같은 저장소에 코드가 새로 통합되었을 때 이를 자동으로 배포해주는 것을 의미합니다.

 

3. DevOps. 마이크로 서비스에 문제 발생시 자동으로 감지, 수정하고 배포됩니다.

* Development + Operations를 의미합니다. 개발과 운영을 통합한 용어입니다. 따라서 고객의 요구에 따라 바로바로 수정하고 적용하는 것을 의미합니다. 이는 전체 일정을 조금 느리게 할 수 있지만, 빠르게 고객의 요구를 반영할 수 있습니다.

 

4. Containers. 컨테이너 가상화 기술을 사용합니다. 

* Cloud Native Architecture의 핵심입니다. 기존의 가상머신 기반의 서비스는 Host Hardware의 부담이 크고, 속도면에서 느리다는 문제가 있었습니다. Container기반 가상화의 핵심은 공통되는 library나 실행파일을 공유하며, 각각 독립적인 환경을 구축함에 있습니다. 

 

Cloud Native Architecture

Cloud Native Architecture란 위에 정의된 Application을 구축하기 위한 방법입니다.

Cloud Native Architecture의 특징은 다음과 같습니다.

 

1. 확장 가능한 아키텍쳐.

* 시스템의 수평적 확장에 유연합니다. 시스템의 수평적 확장이란 필요에 따라서 서버를 늘리고 줄이는(auto scaling)을 통해 서버의 트래픽에 유연하게 대응하겠다는 의미입니다. 

 

* 확장된 서버로 시스템의 부하 분산, 가용성을 보장합니다. 위에서 말한 auto scaling을 통해 시스템의 부하를 분산합니다.

 

* 컨테이너 기반의 패키지(Docker)를 운용하며 실시간으로 모니터링합니다.

 

2. 탄력적 아키텍처

* 서비스의 생성-통합-배포, 비즈니스 환경 변화에 대응 시간을 단축합니다. CI/CD 자동화 파이프라인을 활용하여 단축합니다. Micro Service를 통해 여러 개의 서비스를 분산해서 관리한다고 생각해보면, 만약에 이러한 자동화 방법이 존재하지 않는다면, 개발자는 일일이 모든 서비스를 통합, 배포해야 하므로 굉장히 오랜 시간이 걸리고, 생산성이 현저하게 낮아지게 됩니다.

 

* Micro Service를 활용합니다. 따라서 분할된 서비스 구조를 갖습니다.

 

* 그 외에 서비스의 추가, 삭제, 변경 등을 자동으로 감지하고 동적으로 처리합니다.

 

3. 장애 격리 (Fault isolation)

* 특정 서비스에 오류가 발생해도 모든 서비스가 종속성을 최소화하기 때문에 다른 서비스에 거의 영향을 주지 않습니다.

 

Micro Service

Micro Service는 애플리케이션 구축을 위한 아키텍처 접근 방식 중 하나입니다. 전통적인 Monolithic접근 방식과 대비되는 방식으로 보통 알려져 있는데, 애플리케이션을 하나의 Service에서 관리하지 않고 여러 핵심기능을 따라 세분화하여 관리하는 것을 말합니다. 따라서 기능에 따라 독립적으로 구축하고 배포할 수 있습니다. 

 

이렇게 되면, 하나의 서비스가 다른 서비스에 독립적으로 실행되며, 하나의 서비스가 망가지더라도 다른 서비스에 영향을 미치지 않게 됩니다.

 

위 그림은 전 세계적으로 가장 Cloud 환경 구축을 잘한다고 평가받는 기업 중 하나인 Netflix의 microservice 간의 연관관계를 보여주는 그림입니다. 초록색이 microservice, 파란색 선이 각각 연관관계입니다. 얼마나 많은 서비스들이 세분화되고, 연결되어 있는지 보시기 바랍니다.

 

지금까지의 내용을 잘 이해하고 계시다면 monolithic 한 개발방법 보다 microservices가 갖는 장점이 바로 보이실 겁니다. monolithic한 방법은 극히 일부를 수정하더라도 전체를 수정, 테스트, 빌드, 배포를 해야 합니다. 너무 무겁죠... 그래서 요즘 커다란 IT기업은 모두 microservices 방법으로 개발을 한다고 생각하시면 됩니다.

 

*저의 글에 대한 피드백이나 지적은 언제나 환영합니다.

'CS 이야기' 카테고리의 다른 글

[ 네트워크 이야기 #1 ] OSI 7 Layers(4-7), HTTP, TCP, UDP  (0) 2021.10.03
운영체제란?  (0) 2021.08.30
Rest API란?  (0) 2021.08.30
Servlet의 개념과 동작 과정  (2) 2021.06.14
Web Server와 WAS(web application server)란?  (2) 2021.06.13