[MSA] chapter 1.1 ~1.4_IT 시스템의 발전과 클라우드 네이티브 애플리케이션의 특징
Categories: MSA
Tags: MSA, SpringCloud
📌 개인적인 공간으로 공부를 기록하고 복습하기 위해 사용하는 블로그입니다.
정확하지 않은 정보가 있을 수 있으니 참고바랍니다 :😸
[틀린 내용은 댓글로 남겨주시면 복받으실거에요]
인프런 Dowon Lee님의 Spring Cloud로 개발하는 마이크로서비스 애플리케이션(MSA) 강의를 듣고 정리한 필기입니다.😊
Spring Cloud로 개발하는 마이크로서비스 애플리케이션(MSA) 강의 들으러 가기🔗
IT 시스템의 발전과 클라우드 네이티브 애플리케이션의 특징
MSA 프로젝트 진행하면서 강의 들었던 내용인데, 너무 정신없이 핵심만 들어서 더 깊게 공부하고자 따로 정리해보았다. 강의 다시 들으니까 들었는데도 새로운 느낌…!😥
IT 시스템은 시대에 따라 발전해 왔으며, 메인프레임부터 분산 시스템을 거쳐 클라우드 네이티브 아키텍처와 애플리케이션으로 확장되어 왔다.
IT 시스템의 발전 과정
1960-1980년대: 메인프레임 시대
- 당시 시스템은 하드웨어가 중심으로, 고가의 메인프레임에 맞춰 소프트웨어가 제한된 기능으로 개발되었다. 수정 및 변경이 어려웠고, 특히 시스템의 유연성이 낮았다.
- 프레즐 시스템 : “깨지기 쉬운 시스템”으로 불렸으며, 예기치 않은 상황에 취약했다.
1990-2000년대: 분산 시스템 시기
- 분산 시스템 아키텍처로 전환되며 여러 서버에 분산되어 안정성이 높아졌다.
- 로버스트 시스템: 서비스의 불확실성이 높아져도 안정성을 유지할 수 있는 robust distributed 시스템으로 변화했다.
2010년대 이후: 탄력적 시스템과 클라우드 네이티브
- 클라우드 네이티브 아키텍처가 등장하면서 시스템이 로컬 환경에서 클라우드로 이전했다. 서비스의 확장성과 유연성이 높아졌으며, 변화에도 탄력적으로 대응할 수 있는 anti-fragile 환경이 자리잡았다.
- DevOps와 클라우드 네이티브 아키텍처: 시스템 아키텍처는 클라우드 네이티브로 전환되고, DevOps라는 IT 문화가 확산되었다.
Anti-Fragile 시스템의 4가지 핵심 요소
1. Auto-Scaling
- 자동 확장성
- 서비스 수요에 맞춰 서버 개수를 자동으로 조정하여 성수기와 비수기에 탄력적으로 대응하는 개념이다. CPU, 메모리, DB 사용량에 따라 자원을 유동적으로 관리할 수 있다.
2. Microservices
- 넷플릭스가 개발한 여러 오픈소스 라이브러리들이 스프링 클라우드에 기부되면서 클라우드 네이티브 아키텍처의 중심이 되었다.
- 기존 시스템이 하나의 덩어리로 구성되었다면, 마이크로서비스는 개별 기능을 독립적으로 개발, 배포, 운영할 수 있도록 세분화하여 민첩성과 유지보수성을 높인다.
3. Chaos Engineering
- 운영 중인 시스템에 예측 불가능한 상황을 의도적으로 발생시켜 문제에 대한 대응력을 높이는 접근 방식이다.
- 변동성이나 불확실성에도 안정적인 서비스를 제공할 수 있도록 실험하고 규칙을 적용하는 방법이다.
4. Continuous Deployment
- CI/CD를 통해 마이크로서비스가 자동화된 빌드, 테스트, 배포 과정을 거친다. 수백 개의 서비스가 자동으로 관리됨으로써 변화가 빠르게 반영된다. 클라우드 네이티브 애플리케이션에서는 필수 요소로 자리잡았다.
클라우드 네이티브 아키텍처의 특징
- 확장 가능한 아키텍처
- 수평적 확장성
- 클라우드 네이티브 아키텍처는 시스템의 수평적 확장을 지원해, 필요에 따라 인스턴스를 추가하여 처리 능력을 높일 수 있다.
- 장애 분산 및 가용성:
- 확장된 서버 구조를 통해 시스템에 장애가 발생해도 다른 인스턴스에서 이를 보완함으로써 가용성을 보장한다.
- 컨테이너 기반 패키지화
- 서비스 애플리케이션은 컨테이너 단위로 패키지화되어 배포, 운영된다.
- 이를 통해 일관된 환경에서 서비스가 실행될 수 있으며, 확장이 용이해진다.
- 모니터링
- 실시간 모니터링을 통해 시스템의 상태와 성능을 추적하고, 장애 발생 시 즉각 대응할 수 있다.
- 수평적 확장성
- 탄력적 아키텍처
- 신속한 서비스 생성 및 통합
- 서비스의 생성, 통합, 배포가 빠르게 이루어지며, 비즈니스 환경 변화에 따른 적응 시간을 단축할 수 있다.
- 분할된 서비스 구조
- 서비스가 개별적으로 분리되어 독립적으로 운영된다. 이로 인해 한 서비스에 문제가 발생해도 다른 서비스에는 영향을 주지 않는다.
- 무상태 통신
- 서비스 간 통신은 무상태(stateless) 프로토콜을 사용하여, 인스턴스 간의 독립성과 확장성을 유지한다.
- 자동 감지 및 업데이트
- 서비스의 추가와 삭제가 자동으로 감지되고, 변경 사항에 따라 동적으로 사용자의 요청을 처리할 수 있다.
- 신속한 서비스 생성 및 통합
- 장애 격리 (Fault Isolation)
- 서비스 간 장애 격리
- 특정 서비스에 장애가 발생해도 다른 서비스에는 영향을 주지 않도록 설계되었고 이를 통해 전체 시스템의 안정성이 유지된다.
- 서비스 간 장애 격리
클라우드 네이티브 애플리케이션의 특징
클라우드 네이티브 애플리케이션은 anti-fragile 특성을 갖추어 시스템이 다양한 변화에 탄력적으로 대응할 수 있도록 설계된 애플리케이션이다. 주요 특징은 다음과 같다.
- 마이크로서비스 구조
- 각 서비스가 독립적으로 운영되고 배포 가능하며, 문제 발생 시에도 전체 시스템에 영향을 미치지 않는다.
- CI/CD 시스템을 통한 자동화된 배포
- 수많은 마이크로서비스가 자동으로 통합, 빌드, 테스트, 배포를 거치면서 운영된다. 이러한 시스템을 통해 변경사항이 즉각 반영되며, DevOps 환경에서 서비스 품질을 유지한다.
- 컨테이너 가상화 기술 활용
- Kubernetes와 같은 컨테이너 관리 도구를 통해 클라우드에서 각 서비스가 효율적으로 운영된다. 컨테이너화된 마이크로서비스는 확장성이 높고 자원을 효율적으로 사용할 수 있다.
클라우드 네이티브 애플리케이션 구축을 위한 12가지 원칙 (12 Factors)
Heroku가 제시한 12가지 원칙은 클라우드 네이티브 애플리케이션을 구축할 때 참고할 수 있는 가이드라인으로, 시스템의 탄력적 운영과 확장성을 위해 중요한 요소들로 구성되어 있다.
- 코드베이스: 단일 코드베이스를 버전 관리하여 통합적 관리.
- 종속성: 서비스가 자체 종속성을 가져야 함.
- 구성 관리: 구성 정보를 코드 외부에서 관리하여 변경 시 시스템에 쉽게 반영할 수 있다.
- 보조 서비스: 데이터베이스와 캐시를 분리하여 시스템의 의존성을 줄임.
- 빌드, 릴리스, 실행 환경 분리: 버전 관리와 롤백 기능을 지원.
- 프로세스: 각 서비스가 독립적인 프로세스로 운영됨.
- 포트 바인딩: 서비스가 고유한 포트로 노출되도록 함.
- 동시성: 여러 인스턴스에서 부하 분산을 통해 성능을 높인다.
- 삭제 가능성: 인스턴스가 쉽게 삭제될 수 있어야 확장성이 높아짐.
- 환경 구분: 개발 환경과 운영 환경을 분리하여 운영.
- 로깅 관리: 로그를 이벤트 스트림으로 처리하여 분석 가능.
- 운영 관리: 서비스 상태와 리소스 사용을 파악할 수 있는 관리 도구 제공.
추가 3가지 항목 (Pivotal의 보강)
Pivotal은 기존 12가지 원칙에 API-first, 텔레메트리(모니터링), 인증(Authentication)과 권한 관리(Authorization)를 추가하여 보안을 강화하고 관리 기능을 확장했다.
- API-first: 모든 마이크로서비스가 API 형태로 제공되도록 설계.
- 텔레메트리: 시스템 지표를 수치화하고 시각화하여 관리.
- Authentication & Authorization: 각 서비스 간 인증을 통해 보안성을 높인다.
Leave a comment