Cloud Native Application 개념
클라우드 네이티브
클라우드의 이점을 최대로 활용할 수 있도록 애플리케이션을 구축하고 실행하는 방식
클라우드 컴퓨팅 모델의 장점을 활용할 수 있도록 애플리케이션을 개발하고 실행하기 위한 접근 방식
핵심은 '서비스'
- 최소의 상태(stateful) 컴포넌트들이 격리된 상태의 마이크로서비스로 구성되며, 각각의 서비스는 분산되고, 탄력적이며 수평적 확장성 있는 시스템으로 구성
- 애플리케이션과 각각의 독립적인 배포단위는 클라우드중심의 디자인패턴들과 셀프서비스가 가능한 *탄력적인 플랫폼**에서 운영되도록 설계
- 애플리케이션을 서로 독립적인 기능을 하는 여러 개의 서비스로 구분
- 서비스들을 어떻게 구성, 연결, 관리하는지가 핵심요소
- ‘서비스’들을 묶어 하나의 통합된‘(비즈니스) 서비스’로 만드는 다양한 기능과 기술필요
핵심요소
- Microservices
안정성, 스케일링 용이성 개선
- Container
IT 이식성, 유연성 확보
- DevOps
APP 서비스 개선 속도 증가
- CI/CD
개발-운영간 업무 속도 증가
아키텍처

개발방식

특징

예시

효과

MicroService Architecture
MSA
대규모 SW 개발에 적용하기 위한 것. 단독으로 실행 가능하고 독립적으로 배치될 수 있는 작은 단위(모듈)로 기능을 분해하여 서비스하는 아키텍처
마이크로서비스 간 연결은 응용 프로그래밍 인터페이스(API)를 이용
마이크로서비스는 자원 표현이나 데이터 관리 등에 있어 기능적으로 완전해야 함

REST API
- 두 컴퓨터 시스템이 인터넷을 통해 정보를 안전하게 교환하기 위해 사용하는 인터페이스
REST
- 자원의 표현에 의한 상태 전달
- 자원(Resource) - URI
- 행위(Verb) - HTTP Method
- 표현(Representation) - Client가 자원의 상태(정보)에 대한 조작을 요청하면 Server는 이에 적절한 응답(Representation)을 보냄(JSON, XML, TEXT, RSS 등 여러 형태)
MSA 특징
- One Thing
한 가지 기능을 수행하는데 초점
- Small
가장 작은 단위의 서비스
- API
다른 서비스와 연계
- Autonomous
각자 자율 개발
장점
- 분산형 개발을 통해 개발자들이 동시 참여 가능하고, 유연하고 빠른 의사결정이 가능 => 개발 소요시간 단축
- 모놀리식 애플리케이션과는 달리, 한 부분에 장애가 발생하더라도 전체 애플리케이션이 중단되지 않음
- 빠르고 유연한 조직문화 기여
- 출시 시간 단축
- 유연한 확장
- 뛰어난 복구 능력
- 개발자 생산성 증가
- 높은 신기술 수용력
단점
- 모놀리식 아키텍처에 비해 구조가 복잡함. 서비스 간 통신에 대한 처리가 추가적 필요. 개발, 배포, 운영 측면에서 고려해야 할 사항 증가
- 개발, 운영 복잡성 증가
- 통합 테스트 어려움
- 배포, 운영을 위한 자동화 필요
- 코드 중복성
- 트랜잭션 처리 어려움
- 디버깅 어려움
Container
컨테이너
- 가상화된 OS 위에서 애플리케이션의 독립적인 실행에 필요한 파일(소스코드, 라이브러리 등)을 모은 패키지
- Cloud Native 소프트웨어의 가장 작은 단위
- 서버에 바로 배포할 수 있을 뿐 아니라, 가상머신 위에도 배포 가능
- OS를 통해 관리되며 리소스 및 기능에 제약을 가지는 구동 프로세스(running process)
특징
- 이식성을 바탕으로 작고, 가볍고, 손쉽게 애플리케이션 배포 가능
DevOps
DevOps
- 기존의 개발업무와 운영업무로 나누어진 두 역할 사이의 커뮤니케이션, 협업, 통합
- 프로세스 자동화를 목표로 개발자와 운영자가 협업하여, 짧은 주기 내 신뢰성 있는 소프트웨어 생성, 테스트, 릴리즈 할 수 있는 문화와 환경을 의미
- 애플리케이션 개발-운영 간의 협업 프로세스를 자동화하여 개발과 개선 속도를 빠르게 함
특징
- 속도 및 신속한 제공
릴리즈 빈도, 속도를 개선
- 안전성
변경 사항이 제대로 안전하게 작동하는지 테스트 가능
- 확장 및 보안
규모에 따라 인프라와 개발 프로세스 운영, 관리 가능
- 협업강화
DevOps 도입을 위한 필수요소
CI/CD
CI/CD
- 지속적인 통합, 서비스 제공, 배포의 자동화를 통해 더욱 짧은 주기로 고객에게 App 제공하는 방법
- 지속적인 통합 / 지속적인 배포
Continuous Integration / Continuous Delivery or Deployment
CI
- 앱 코드의 새 변경사항이 정기적으로 빌드 및 테스트를 거쳐 공유 리포지토리에 병합되는 것을 의미
CD
- 지속적인 서비스 제공(Delivery)은 개발자들이 앱에 적용한 변경 사항이 버그 테스트를 거쳐 리포지토리에 자동으로 업로드되는 것을 의미
- 지속적인 배포(Deployment)는 개발자가 변경한 사항을 리포지토리에서 고객이 사용 가능한 프로덕션 환경까지 자동으로 릴리스되는 것을 의미
CI/CD와 DevOps 관계
- DevOps는 SW 개발 효율성 향상을 목표하는 문화이자 프로세스
- CI/CD는 DevOps를 실현하기 위해 필수적인 방법 요소