[MSA] chapter 1.1 ~1.4_IT 시스템의 발전과 클라우드 네이티브 애플리케이션의 특징

Updated:

Categories:

Tags: ,

📌 개인적인 공간으로 공부를 기록하고 복습하기 위해 사용하는 블로그입니다.
정확하지 않은 정보가 있을 수 있으니 참고바랍니다 :😸
[틀린 내용은 댓글로 남겨주시면 복받으실거에요]

인프런 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를 통해 마이크로서비스가 자동화된 빌드, 테스트, 배포 과정을 거친다. 수백 개의 서비스가 자동으로 관리됨으로써 변화가 빠르게 반영된다. 클라우드 네이티브 애플리케이션에서는 필수 요소로 자리잡았다.

클라우드 네이티브 아키텍처의 특징

  1. 확장 가능한 아키텍처
    • 수평적 확장성
      • 클라우드 네이티브 아키텍처는 시스템의 수평적 확장을 지원해, 필요에 따라 인스턴스를 추가하여 처리 능력을 높일 수 있다.
    • 장애 분산 및 가용성:
      • 확장된 서버 구조를 통해 시스템에 장애가 발생해도 다른 인스턴스에서 이를 보완함으로써 가용성을 보장한다.
    • 컨테이너 기반 패키지화
      • 서비스 애플리케이션은 컨테이너 단위로 패키지화되어 배포, 운영된다.
      • 이를 통해 일관된 환경에서 서비스가 실행될 수 있으며, 확장이 용이해진다.
    • 모니터링
      • 실시간 모니터링을 통해 시스템의 상태와 성능을 추적하고, 장애 발생 시 즉각 대응할 수 있다.
  2. 탄력적 아키텍처
    • 신속한 서비스 생성 및 통합
      • 서비스의 생성, 통합, 배포가 빠르게 이루어지며, 비즈니스 환경 변화에 따른 적응 시간을 단축할 수 있다.
    • 분할된 서비스 구조
      • 서비스가 개별적으로 분리되어 독립적으로 운영된다. 이로 인해 한 서비스에 문제가 발생해도 다른 서비스에는 영향을 주지 않는다.
    • 무상태 통신
      • 서비스 간 통신은 무상태(stateless) 프로토콜을 사용하여, 인스턴스 간의 독립성과 확장성을 유지한다.
    • 자동 감지 및 업데이트
      • 서비스의 추가와 삭제가 자동으로 감지되고, 변경 사항에 따라 동적으로 사용자의 요청을 처리할 수 있다.
  3. 장애 격리 (Fault Isolation)
    • 서비스 간 장애 격리
      • 특정 서비스에 장애가 발생해도 다른 서비스에는 영향을 주지 않도록 설계되었고 이를 통해 전체 시스템의 안정성이 유지된다.

클라우드 네이티브 애플리케이션의 특징

클라우드 네이티브 애플리케이션은 anti-fragile 특성을 갖추어 시스템이 다양한 변화에 탄력적으로 대응할 수 있도록 설계된 애플리케이션이다. 주요 특징은 다음과 같다.

  1. 마이크로서비스 구조
    • 각 서비스가 독립적으로 운영되고 배포 가능하며, 문제 발생 시에도 전체 시스템에 영향을 미치지 않는다.
  2. CI/CD 시스템을 통한 자동화된 배포
    • 수많은 마이크로서비스가 자동으로 통합, 빌드, 테스트, 배포를 거치면서 운영된다. 이러한 시스템을 통해 변경사항이 즉각 반영되며, DevOps 환경에서 서비스 품질을 유지한다.
  3. 컨테이너 가상화 기술 활용
    • Kubernetes와 같은 컨테이너 관리 도구를 통해 클라우드에서 각 서비스가 효율적으로 운영된다. 컨테이너화된 마이크로서비스는 확장성이 높고 자원을 효율적으로 사용할 수 있다.

클라우드 네이티브 애플리케이션 구축을 위한 12가지 원칙 (12 Factors)

Heroku가 제시한 12가지 원칙은 클라우드 네이티브 애플리케이션을 구축할 때 참고할 수 있는 가이드라인으로, 시스템의 탄력적 운영과 확장성을 위해 중요한 요소들로 구성되어 있다.

  1. 코드베이스: 단일 코드베이스를 버전 관리하여 통합적 관리.
  2. 종속성: 서비스가 자체 종속성을 가져야 함.
  3. 구성 관리: 구성 정보를 코드 외부에서 관리하여 변경 시 시스템에 쉽게 반영할 수 있다.
  4. 보조 서비스: 데이터베이스와 캐시를 분리하여 시스템의 의존성을 줄임.
  5. 빌드, 릴리스, 실행 환경 분리: 버전 관리와 롤백 기능을 지원.
  6. 프로세스: 각 서비스가 독립적인 프로세스로 운영됨.
  7. 포트 바인딩: 서비스가 고유한 포트로 노출되도록 함.
  8. 동시성: 여러 인스턴스에서 부하 분산을 통해 성능을 높인다.
  9. 삭제 가능성: 인스턴스가 쉽게 삭제될 수 있어야 확장성이 높아짐.
  10. 환경 구분: 개발 환경과 운영 환경을 분리하여 운영.
  11. 로깅 관리: 로그를 이벤트 스트림으로 처리하여 분석 가능.
  12. 운영 관리: 서비스 상태와 리소스 사용을 파악할 수 있는 관리 도구 제공.

추가 3가지 항목 (Pivotal의 보강)

Pivotal은 기존 12가지 원칙에 API-first, 텔레메트리(모니터링), 인증(Authentication)과 권한 관리(Authorization)를 추가하여 보안을 강화하고 관리 기능을 확장했다.

  1. API-first: 모든 마이크로서비스가 API 형태로 제공되도록 설계.
  2. 텔레메트리: 시스템 지표를 수치화하고 시각화하여 관리.
  3. Authentication & Authorization: 각 서비스 간 인증을 통해 보안성을 높인다.






MSA 카테고리 내 다른 글 보러가기

Leave a comment