2010년도 이후부터 IT 시스템은 클라우드 네이티브, Anti-fragile 아키텍처 형태로 발전되어 왔다.
확장 가능한 아키텍처 (scale-up, scale-out으로 나눌 수 있다.)
원래라면 물리적인 서버, 하드웨어를 업그레이드를 해야 하지만 클라우드 네이티브에서는 가상의 서버, 가상의 스토리지를 이용하여 이러한 비용을 줄일 수 있다.
- 서버 가상화는 필수적이다.
- 시스템의 수평적 확장에 유연하다.
- 확장된 서버로 시스템의 부하 분산, 가용성 보장
- 시스템 또는, 서비스 애플리케이션 단위의 패키지 (컨테이너 기반 패키지)
- 체계적인 모니터링을 통해 상태를 지속적 관리
탄력적 아키텍처
- 분리된 독립적 서비스로 구성을 함
- 서비스 생성 - 통합 - 배포, 비즈니스 환경 변화에 대응 시간 단축
- 분할된 서비스 구조
- 무상태 통신 프로토콜
- 서비스의 추가와 삭제 자동으로 감지
- 변경된 서비스 요청에 따라 사용자 요청 처리 (동적 처리)
장애 격리
특정 서비스에 오류가 발생해도 다른 서비스에 영향 주지 않음
지속적인 통합, CI(Continuous Integration)
하나의 애플리케이션을 여러 팀이나 여러 개발자 들에 의해 결과물을 통합하기 위한 형상 관리를 뜻할 수 있다.
통합된 코드를 빌드하고 테스트하는 과정 자체를 의미할 수 있다. CI/CD의 파이프라인을 잘 연동하게 되면 개발자가 코드를 완성한 뒤 git과 같은 곳에 해당 코드를 업로드 커밋함과 동시에 빌드, 테스트들을 다루면서 잘 작동을 하는지 확인할 수 있다.
변경되면서 사용자들의 이질감을 최소화할 수 있는 게 중요하다.
통합 서버, 소스 관리, 빌드 도구, 테스트 도구
ex) Jenkins, Team CI, Travis CI
- 지속적 배포(Continuous Delivery Continuous Deployment)
변경된 코드를 자동으로 배포하고, 실제 서비스 환경에 반영하는 프로세스다.
- 카나리 배포: 서비스 일부(예: 5%)에만 새로운 버전을 배포하여 안정성을 확인한 뒤 전체로 확장한다.
- 블루-그린 배포: 기존 버전(블루)과 새 버전(그린)을 병렬로 운영하며 무중단 배포를 실현한다.
- DevOps
Development, QA, Operation이 합쳐진 단어이다.
개발 조직과 운영조직의 통합을 의미한다. 이런 통합으로 고객의 요구사항을 빠르게 반영하고 만족되는 결과물을 제시하는 것에 큰 의미를 둔다. 고객의 요구사항은 언제든지 바뀐다. 그러므로 이러한 요구사항은 개발의 막바지에 적용되는 것이 아니라 필요할 때마다 바로 반영이 되고 필요할 때마다 바로바로 수정할 수 있는 구조가 더 좋다.
애플리케이션은 궁극적으로 고객의 요구사항에 맞는 에러 없는 완성물이어야 한다.
따라서 자주 테스트하고 자주 피드백을 받고 자주 업데이트하는 과정을 거쳐 전체 개발 일정이 완료될 때까지 지속적으로 끊임없이 진행해 가는 것을 DevOps라고 볼 수 있다.
클라우드 네이티브 애플리케이션은 이러한 DevOps 환경에 맞춰서 서비스의 구조를 작은 단위로 분할할 수 있게 함으로써 더 자주 통합 더 자주 테스트, 더 자주 배포할 수 있는 구조가 될 수 있다.
- Container 가상화
가상화는 클라우드 네이티브 아키텍처의 핵심이다. 기존에 로컬 환경에서 운영하고 유지해야만 했던 시스템을 클라우드 환경으로 이전해서적은 비용으로 탄력성 있는 시스템을 구축하게 된 배경이 바로 컨테이너 가상화기술이다.
전통적인 방식의 개발 시스템은 하드웨어 시스템 위에 운영체제를 설치하고 그다음에 운영하게 된다.
가상화를 통한 개발 시스템에서는 운영체제 위에 Operating System 운영체제 위에 Hypervisort 기술을 통한 가상 머신, 왼쪽에 있는 이 하나의 회색 네모칸이 가상 머신인데 가상 머신인데 가상 머신을 기동 하게 됨 , 가상머신은 시스템이 가지고 있는 물리적인 하드웨어 호스트 시스템이라고 하는데 호스트 시스템이 가지고 있는 물리적인 하드웨어를 쪼개서 사용하는 개념으로서 하나의 가상 머신은 독립적인 운영체제를 가지고 실행될 수 있다. 각각의 가상 머신에 애플리케이션을 운영할 수 있다는 얘기가 됨
하지만 가상 머신에서 작동되는 어프리케이션은 호스트 운영체제에 많은 부하를 주게 되고 시스템 확장에 한계가 있을 수밖에 없다.
운영체제 위에 컨테이너 가상화를 기동 하기 위한 소프트웨어 서비스를 작동하게 되고 컨테이너 가상화에서는 공통적인 라이브러리나
리소스 같은 것들을 공유해서 사용하게 됨 각자 필요한 부분에 대해서만 독립적인 영역에다가 실행할 수 있는 구조이다.
따라서 기존의 하드웨어 가상화 기술보다는 더 적은 리소스를 사용하게 될 수 있다. 컨테이너 가상화 위에서 작동되는 서비스들은 가볍고 빠르게 운영할 수 있다는 특징을 가지고 있다.
'개발 > MSA' 카테고리의 다른 글
[MSA] Spring Cloud Gateway를 통해 서비스간 라우팅 해보기 (0) | 2024.11.30 |
---|---|
[MSA] SOA와의 차이점은 뭘까?, REST Maturity Model (2) | 2024.11.27 |
[MSA] 12-Factors App? +3 (1) | 2024.11.26 |