[IBM]클라우드 네이티브

Seok-Hyun Lee·2020년 8월 26일
1

클라우드 네이티브(Cloud Native)

클라우드 네이티브란, 클라우드 상의 리소스를 필요에 따라 할당 및 해제할 수 있는 탄력적 환경을 활용하는 시스템을 의미한다. 그리고 Cloud Native Computing Foundation에 의하면 다음과 같은 속성이 있다.

  • 앱과 프로세스는 소프트웨어 컨테이너에서 분리된 단위로 실행
  • 프로세스는 리소스 사용을 개선하고 유지보수 비용을 줄이기 위해 중앙 오케스트레이션 프로세스에 의해 관리
  • 앱 또는 서비스(마이크로서비스)는 명시적으로 설명된 종속 항목과 느슨하게 결합

위와 같은 속성들은 클라우드 네이티브의 분산 시스템을 설명한다.

12 Factor

현대 사회에서 앱 또는 서비스로서의 소프트웨어를 구축하기 위한 12가지 요소가 Heroku의 개발자들에 의해 처음 제시되었다.

1. 버전화된 코드 베이스(예: Git 저장소)와 배치된 서비스 사이에는 1대1 연결이 있어야 하며 동일한 코드 베이스가 여러 배치에 사용된다.
2.서비스는 모든 종속 항목을 명시적으로 선언하며 시스템 수준 도구 또는 라이브러리의 존재 여부에 의존하지 않는다.
3. 배치 환경마다 달라지는 구성은 환경, 특히 환경 변수에 저장된다.
4. 모든 지원 서비스는 첨부된 리소스로 처리되면, 이 리소스는 실행 환경에서 관리(첨부 및 분리)됩니다.
5. 전달 파이프라인은 빌드, 릴리스, 실행을 엄격하게 분리한다.
6. 애플리케이션은 하나 이상의 상태 비저장(stateless) 프로세스로 배치된다. 특히, 임시 프로세스는 상태 비저장(stateless)이며 아무것도 공유하지 않는다. 지속적 데이터는 적절한 지원 서비스에 저장된다.
7. 자체 포함 서비스는 지정된 포트에서 청취하여 다른 서비스에서도 사용할 수 있도록 한다.
8. 개별 프로세스(수평적 확장)를 확장하여 동시성을 달성한다.
9. 프로세스는 일회용이다. 빠른 시작 및 정상 시스템 종료 동작으로 보다 강력하고 탄력적인 시스템이 된다.
10. 로컬 개발에서 프로덕션에 이르기까지 모든 환경은 가능한 한 유사하다.
11. 애플리케이션은 예를 들어 stdout 및 Stderr에 쓰는 이벤트 스트림으로 로그를 생성하고, 실행 환경을 신뢰하여 스트림을 집계한다.
12. 일회성 관리 테스크가 필요한 경우 해당 테스크는 소스 제어에 보관되고 애플리케이션과 함께 패키징되어 애플리케이션과 동일한 환경에서 실횅된다

마이크로서비스

분리된 시스템에서 마이크로서비스(Microservice)는 소규모의 독립적인 아키텍처 컴포넌트들의 집합으로서, 일반적인 경량 API를 통해 통신한다. 다음은 교체 가능한 백업 서비스를 사용하여 데이터를 저장하고 메시지를 전달하는 12가지 요소를 충족하는 앱의 모습이다.

그림 출처 - IBM 클라우드 네이티브 문서

이러한 모습을 통해 유추할 수 있는 것은 마이크로서비스의 독립성과, 민첩성(Agility)이다. 그래서 마이크로 서비스 아키텍처의 장점 중 하나는 다른 서비스를 방해하지 않고 서비스를 다시 작성할 수 있다. 이로 인해 마이크로서비스는 탄력적인 모습을 보여준다.

profile
Arch-ITech

0개의 댓글