• 클라우드 네이티브
클라우드의 이점을 최대로 활용할 수 있도록 애플리케이션을 구축하고 실행하는 방식이다.
기존 애플리케이션 개발의 한계를 극복하고 민첩성, 생산성 등 효율화를 위해 등장하였다.
클라우드 네이티브 애플리케이션의 핵심은 '서비스' 이다.
• 전통적인 애플리케이션 vs 클라우드 네이티브 애플리케이션
구분 | 전통적인 애플리케이션 | 클라우드 네이티브 애플리케이션 |
핵심 | 정기적, 안정성 | 민첩성 |
개발 방법 | 폭포수형 개발 방법 | 애자일 개발방법 |
팀 구성 | 역할에 따른 별도 팀 구성 (개발팀, 운영팀, QW팀, 보안팀 등) |
DevOps 방식 운영 (개발-운영 간의 협업 프로세스 자동화) |
배포 주기 | 길고 간헐적인 배포 | 짧고 지속적인 배포 (CI / CD) |
애플리케이션 아키텍처 | 강한 결합 단일(Monolithic) |
느슨한 결합 분산(MicroService) / API 기반 통신 |
인프라스트럭처 | 서버 중식 온 프레미스 환경 기준 설계 OS 종속 수직 확장(스케일 업) 최대 용량으로 사전 프로비저닝 |
컨테이너 중심 온 프레미스 & 클라우드 환경 기준 설계 OS 종속성 제거 수평 확장(스케일 아웃) 수요에 따른 용량 자동 조정 |
• 12 Factors
위 그림에서 볼 수 있듯이 클라우드 네이티브 애플리케이션 개발 원칙인 '12 Factors'가 존재한다.
하지만 현실적으로 12가지가 모두 지켜지기는 불가능하다.
• 클라우드 네이티브 핵심요소
클라우드 네이티브의 핵심요소에는 MicorService, Containers, DevOps, CI/CD가 있다.
1. MSA(MicroServices) : 마이크로서비스 아키텍처
대규모 소프트웨어 개발에 적용하기 위한 것으로 단독으로 실행 가능하고 독립적으로 배치될 수 있는 작은 단위(모듈)로 기능을 분해하여 서비스 하는 아키텍처이다.
그림을 통해 Monolithic와 MicroService를 비교해보자.
특징
- One Thing : 한가지 기능을 수행하는데 초점을 맞춘 서비스
- Small : 독립적이고 배포 가능한 가장 작은 단위의 서비스로 분리
- API : API를 통해 다른 서비스와 연계한다.
- Autonomous : 각각 자율적으로 개발, 운영. 즉, 독립적인 팀이 각 서비스의 개발과 운영을 담당한다.
장점
분산형 개발을 통해 동일한 애플리케이션 개발에 더 많은 개발자들이 동시 참여할 수 있고, 유연하고 빠른 의사결정이 가능하여 개발에 소요되는 시간을 단축할수 있다.
단점
모노리식 아키텍처에 비해 구조가 복잡하고 서비스 간의 통신에 대한 처리가 추가적으로 필요하여 애플리케이션 개발, 배포, 운영 측면에서 고려해야 할 사항이 증가한다.
2. Container : 컨테이너
가상화된 운영체제 위에서 애플리케이션의 독립적인 실행에 필요한 파일(소스코드, 라이브러리 등)을 모은 패키지
App 실행을 위한 바이너리와 라이브러리 등을 패키지로 묶어 배포하는 가상화 기술이다.
특징
- 실행 속도가 빠르다.
- 배포 및 관리가 단순하다.
- 컨테이너 이미지를 쉽게 공유 및 사용이 가능하다.
- 가볍다
- 자원 낭비의 부담이 적다
- VM들이 분리되어 있어 안전성이 높다.
3. DevOps
기존의 개발업무와 운영업무로 나누어진 두 역할 사이의 커뮤니케이션, 협업, 통합을 의미한다.
시스템과의 연결이 복잡해지고 기술과 요구사항이 지속적으로 변화되고 있는 시점에서 개발과 운영의 정보가 공유되지 않아 처리속도가 매우 느리고 책임 소재도 불분명한 상황이 발생하였다.
이에 따라 두 역할 간의 커뮤니케이션, 협업, 통합을 강조하여 서로 간의 차이를 줄여주는 'DevOps' 소프트웨어 개발 방법론 대두되었다.
특징
- 속도 및 신속한 제공
- 안전성
- 확장 및 보안
- 협업강화
DevOps도입을 위한 필수요소
애자일 소프트웨어 개발, CI/CD
4. CI/CD
지속적인 통합, 서비스 제공, 배포의 자동화를 통해 더욱 짧은 주기로 고객에게 App을 제공하는 방법이다.
CI(Continuous Integration)
애플리케이션 코드의 새로운 변경 사항이 정기적으로 빌드 및 테스트를 거쳐 공유 리포지토리에 병합되는 것을 의미
CD(Continuous Delivery or Countinuous Deployment)
지속적인 서비스 제공 - 개발자들이 애플리케이션에 적용한 변경 사항이 버그 테스트를 거쳐 리포지토리에 자동으로 업로드 되는 것을 의미
지속적인 배포 - 개발자가 변경한 사항을 리포지토리에서 고객이 사용 가능한 프로덕션 환경까지 자동으로 릴리즈되는 것을 의미
따라서 DevOps는 소프트웨어 개발 효율성 향상을 목표하는 문화이자 프로세서이고, CI/CD는 DevOps를 실현하기 위해 필수적인 방법 요소이다.
'기타 전공 > 클라우드실습' 카테고리의 다른 글
[클라우드실습] #4 Kubernetes (0) | 2024.06.21 |
---|---|
[클라우드실습] #2 클라우드 모델 (0) | 2024.04.26 |
[클라우드실습] #1 클라우드 (0) | 2024.04.26 |