기타 전공/클라우드실습

[클라우드실습] #3 클라우드 네이티브 애플리케이션

태연한 컴공생 2024. 6. 20. 22:52

• 클라우드 네이티브

 

클라우드의 이점을 최대로 활용할 수 있도록 애플리케이션을 구축하고 실행하는 방식이다.

기존 애플리케이션 개발의 한계를 극복하고 민첩성, 생산성 등 효율화를 위해 등장하였다.

 

클라우드 네이티브 애플리케이션의 핵심은 '서비스' 이다.

 

• 전통적인 애플리케이션 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를 비교해보자.

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를 실현하기 위해 필수적인 방법 요소이다.