상세 컨텐츠

본문 제목

클라우드네이티브 - 도커쿠버네티스, Docker, Kubernetes, MSA, CloudNative, PaaS, 코드베이스

GIS/공간정보

by JORDON 2023. 2. 1. 16:05

본문

반응형

클라우드 네이티브의 정의

 

클라우드 네이티브 개발은 클라우드 컴퓨팅 환경에서 소프트웨어 애플리케이션을 구축하고 실행하는 방법입니다.

컨테이너 및 마이크로 서비스와 같은 클라우드 네이티브기술을 사용하여 클라우드 환경에서 쉽게 배포하고 관리할수 있는 확장가능하고 탄력적인 어플리케이션을 만드는 것이 포함됩니다. 

클라우드 네이티브 개발은 더 빠른 개발 및 배포주기를 가능하게 하는 오픈소스 기술 및 데브옵스(DevOps) 문화의 사용을 강조합니다.

클라우드의 유연성과 확장성을 활용함으로써 클라우드 네이티브 개발은 조직이 비용을 절갑하고 어플리케이션의 성능을 향상시키는데 도움이 된다.

클라우드 네이티브

CNCF(Cloud Native Computing Foundation) = 클라우드 네이티브 + 클라우드네이티브 어플리케이션

 

CNCF(Cloud Native Computing Foundation)

퍼블릭, 프라이빗, 하이브리드 클라우드 환경에서 확장성 있는 어플리케이션

컨테이너 서비스 메시(Mesh), 마이크로서비스 인프라구조, 선언적API로 접근

자동화, 회복성, 편리성, 가시성을 갖는 느슨하게 결합된 시스템(개발 및 실행환경)

엔지니어는 최소한의 수고로 영향력이 크고 예측 가능한 변경을 할수 있는 기술 정의

클라우드 네이티브 

클라우드 컴퓨팅의 장점을 최대한 활용할 수 있는 정보시스템 분석 설계 굴현 및 실행하는 환경

탄력적인 대응 및 효율적인 자원이용

참조되는 아키텍처로는 가트너, IBM 등에서 제시하는 클라우드 네이티브 참조 아키텍처를 토대로 클라우드 네이티브 어플리케이션 아키텍처를 설계함

 

분석 단계 설계 대상

API 게이트웨이 - Proxy를 통한 접근 권한 관리

서비스메시 - 작은 단위로 분리된 기능들을 관리

런타임플랫폼(컨테이너) - 기업형 RHEL(Redhat Enterprise Linux)를 주로 이용

CI/CD - 지속적인 통합과 지속적인 배포

백엔드서비스 - 데이터베이스(큐, 스택)

텔리메트리(모니터링)

 

도커와 컨테이너

Docker - Implements

Container - Interface

 

쿠버네티스(Kubernetes) - K8S

쿠버네티스의 기본적인 구성은 Pod로 구성되어 있다.

모듈 및 기능별로 Pod안에 여러개의 도커가 존재할 수 있으며 컨테이너도 이에 포함된다.

복수의 Docker 실행환경을 통합관리하는 PaaS 표준플랫폼이다.

PaaS의 구현체가 쿠버네티스이다.

 

코드베이스

어플리케이션은 1개의 코드베이스를 통해 관리되어야하며 동일한 코드로 개발 및 운영환경에 배포되어야하며 코드베이스는 각 어플리케이션이다.

코드베이스의 유형

중앙관리형 - SVN

로컬에서 커밋하면 중앙저장소에 반영되고 직관적으로 사용가능

커밋하는 순간 모든 사람들에게 공유되고 모든 사람이 같은자료를 받아 옴

분산관리형 - Git

로컬에서 커밋하면 로컬저장소에 저장되고 푸시를 해야 모든사람들이 같은 자료를 받아 옴

설정

어플리케이션 실행시 필요로하는 설정 정보와 코드는 분리아여 관리

업무로직과는 무관한 시스템 내외부의 리소스 배포단계, OS등에 따라 달라지는 설정정보

빌드/릴리즈/실행환경

코드베이스는 엄격하게 구분된 빌드, 릴리즈, 실행 3단계의 과정을 통해 배포가 이루어지며 각 단계는 엄격하게 분리되어야한다.

무상태서비스

상태프로세스는 클라이언트 세션 정보를 서버에 저장하므로 스케일아웃시 관련정보 이용 작업이 필요한 반면, 무상태 프로세스 서버에 저장하지 않고 외부 데이터베이스에 저장하여 스케일 아웃을 용이한 구조

※스케일 아웃은 서버를 여러 대 추가하여 시스템을 확장하는 방법입

포트바이딩

포트바인딩은 메세지를 송수신하는 위치의 방법을 경절하는 구성 정보를 의미하며 어플리케이션을 타 어플리케이션에서 접근할 수 있도록 포트바인딩을 통해 서비스를 공개 및 접근성을 제공

동시성(확장성)

모든일을 처리하는 하나의 프로세스 대신 기능별로 마이크로서비스를 실행하여 프로세스 모델을 기반으로 수직적, 수평적으로 확장성을 제공함

폐기가능성

MSA는 각종 요청에 의해 스케일 업다운이 빈번하기에 다양하고 잡다한 자료를들 남기게 되는데 폐기를 원할 경우 깔끔하게 없앨 수 있어야한다.

개발/운영환경일 일치

가능한 동일한 개발/검증/운영 환경을 유지하여 상태 시스템 및 지속적인 배포가 가능하게 함

로그

어플리케이션 로그는 파일이 아닌 로그스트림형태로 표준 출력하며 플랫폼에 의해 로그스트림이 통합되고 관리됨

로그데이터 수집 -> 로그데이터 정제 및 가공 -> 데이터 저장 -> 데이터 분석 및 시각화

관리프로세스

관리/유지/보수 프로세스를 일회성 프로세스로 실행하며 관리유지보수 프로세스는 일회성 프로세스 어플리케이션과 프로세스 분리되어 실행되지만 어플리케이션과 동일한 빌드/릴리즈/배포/사이클로 실행됨

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

클라우드환경에서 실행되는 어플리케이션

클라우드 네이티브는 어떻게 작용하는가?

1단계 레거시

물리(On-Promise)

기존어플리케이션

 

2단계 클라우드

IaaS

Lift & Shift

클라우드 준비단계 어플리케이션

 

3단계 클라우드 네이티브

Paas+컨테이너 / MSA+컨테이너

DevOps + CI/CD

Re-factor (클라우드 통합어플리케이션 제공)

클라우드 친화단계 어플리케이션

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

 

 

마이크로서비스 도출

분석단계 마이크로서비스를 도출하는 방식은 도메인 주도설계방식(DDD)과 프로세스 모델링방식이 존재하며 기관의 특성을 고려하여 적합한 방식을 적용할 수 있음

 

도메인 주도 설계

DDD방법론 (Domain Driven Design) 을 적용하여 컨텍스트 경계를 식별

세부적인 업무단위와 관계를 모델링 하고 이들간의 경계를 식별하는 과정을 통합하여 마이크로서비스를 도출하는 적략적인 방법

 

업무기능 분해

기능분해를 통해 마이크로서비스를 식별

경험적인 원칙을 적용하여 하나의 어플리케이션을 업무단위로 분해하여 게층적으로 정렬한 뒤 특정한 크기로 분리하는 방법

 

DDD(Domain Driven Design)

도메인을 중심으로한 프로그램 구성을 통해 소스코드 및 시스템구축으로 빌드업 하는 것 

TDD(Test Driven Design)

테스트코드 중심으로한 프로그램 구성을 통해 소스코드 및 시스템구축으로 빌드업 하는 것 

CDD(Component Driven Design)

컴포넌트를 중심으로한 프로그램 구성을 통해 소스코드 및 시스템구축으로 빌드업 하는 것 

도메인 주도설계(DDD:Domain Driven Design)

전체 비지니스 도메인을 여러개의 서브 도메인으로 나눈 후 서브 도메인 내 동일한 맥락을 경계로 구분하여 바운디드 컨텍스트를 도출함

 

이벤트스토밍(Event Storming)

브레인스토밍을 통한 이벤트 도출, 커맨드 도출, 애그리게잇 식별, 바운디드 컨텍스트 식별의 단계를 거쳐 마이크로서비스를 도출함

반응형

관련글 더보기

댓글 영역