프로그래밍 공부/컴퓨터공학 기초

Software Architecture

Wonuk 2023. 1. 19. 17:31
반응형
본 포스팅은 인프런
Spring Cloud로 개발하는 마이크로서비스 애플리케이션(MSA)
강의를 기반으로 작성된 포스팅입니다.

 

Spring Cloud로 개발하는 마이크로서비스 애플리케이션(MSA) - 인프런 | 강의

Spring framework의 Spring Cloud 제품군을 이용하여 마이크로서비스 애플리케이션을 개발해 보는 과정입니다. Cloud Native Application으로써의 Spring Cloud를 어떻게 사용하는지, 구성을 어떻게 하는지에 대해

www.inflearn.com


IT 시스템이 발전되어온 과정

  • 1960 ~ 1980년대 메인 프레임방식으로 하드웨어가 중심이 되었다.
    소프트웨어 보다는 하드웨어의 사양에 맞추어 서비스를 구축하였다.
    하드웨어가 고가였기 때문에 서비스의 기능을 수정하거나 변경하기가 매우 어려웠다.
    이때는 Fragile 이라고해서 깨지기 쉬운 시스템이라는 특징을 가지고 있다.

  • 1990 ~ 2000년대 분산이라는 키워드로 정리할 수 있다.
    이 시기는 Robust, Distributed라고 하여 시스템이 안정화 되었고
    분산화된 시스템 덕분에 서비스의 어느정도 불확실한 변화가 발생한다 하여도
    안정성있고 성능이 높은 서비스를 유지할 수 있게 되었다.

  • 2010년도 이후는 Resilient 탄력적이라는 뜻,
    위 Fragile과 반대되는 Anti Fragile 그리고 Cloud Naitive로 시스템이 구축되었다.
    시스템은 로컬 환경에서 Cloud로 이전되었고 확장성과 안정성이  더욱 강화 되었으며
    지속적인 개선 및 변경이 발생하여도 시스템은 탄력적으로 운영할 수 있도록 구축되었다. 

  • 마지막 단계의 Anti-Fragile 환경은 DevOps라는 IT 문화가 생겨났고
    아키텍쳐 측면에서는 Cloud Native 아키텍쳐로 전환되었던 시기라고 볼 수 있다.

  • 그래프에서 보는것과 같이 ANTIPRAGILE의 경우
    - 다른 개발 시스템, 환경보다는 시스템 변화가 적고
    - 변화에 바로 적용할 수가 있고
    - 비용또한 저렴하다.

Antifragile의 4가지 특징

  • Auto scaling - 자동 확장성
    위 그림처럼 시스템을 구성하고 있는 인스턴스를 하나의 auto scaling group으로 묶은 다음
    그룹에서 유지되어야 하는 최소 인스턴스를 지정할 수 있고
    사용량에 따라 인스턴스를 증가할 수 있는 환경을 말한다.
    ex) 특수한 이벤트가 있는 기간에는 서버의 운영개수를 늘릴 수 있다.

    이러한 작업을 운영자의 설정이 아니라 CPU, Memory, 네트워크, DB의 사용량이나 조건에 따라서 처리하는 개념이
    바로 Auto scaling 이다.

  • Microservices
    위 사진은 온라인 비디오 스트리밍 서비스로 유명한 넷플릭스의 마이크로 서비스 구상도이다.
    파란색
    은 서비스간의 연동이나 통신을 의미하고
    초록색은 넷플릭스라는 전체 서비스를 구축하고 있는 각각의 Microservices 이다.
    넷플릭스와 아마존은 클라우드 서비스를 가장 잘 구축하고 활용하고 있는 업체로 알려져있다.
    Spring Cloud의 초창기 라이브러리 중 많은 부분이 넷플릭스에서 개발되었다.

    마이크로 서비스는 Cloud Native Architecture Application의 핵심이라고 할 수 있다.
    기존 시스템이 하나의 거대한 형태로 구축되어 서비스 되었다고 한다면
    마이크로 서비스는 전체 서비스를 구성하고 있는 개별적인 모듈이나 기능을 독립적으로 개발하고 배포하고
    운영할 수 있도록 세분화된 서비스라고 할 수 있다.

  • Chaos engineering
    시스템이 급격하고 예측하지 못한 상황이라도 견딜 수 있고 신뢰성을 쌓기위해
    운영중인 소프트웨어 시스템에 실행하는 방법 혹은 규칙이다.
    시스템이 1.어떤 변동이나 2.예견된 불확실성이나 3.예건되지 않는 불확실성 에서도
    안정적으로 서비스를 제공할 수 있도록 구축되어야 한다는것을 의미한다.



 

  • Continuous deployments
    CI / CD 라는것은 지속적인 통합, 지속적인 배포라고 할 수 있다.
    Cloud Native Application은 적게는 수십개 많게는 수백개 이상의 마이크로 서비스로
    도메인이 분리되어 개발되는 경우가 일반적이다.
    이렇게 하나의 어플리케이션을 구성하는 수백개의 서비스들을 하나하나 빌드하고 테스트하고
    서버에 배포하는 등의 작업을 수작업으로 한다고 가정해보자.
    시스템 자체의 복잡성을 떠나서 각각의 서비스를 빌드하고 배포하는 작업이
    하나의 큰 업무가 되어버린다.
    그래서 이러한 수십, 수백개의 마이크로 서비스를 빌드하고 배포함에 있어서 자동화된 시스템을 구축하고
    하나의 작업에서 다른 작업으로 연계되는 작업을 파이프 라인으로 연결 시키게되면
    작은 변화 뿐만 아니라 전체적인 시스템 업그레이드 측면에서도 빠르게 적용이 될것이다.
    CI / CD 라는 개념은 Cloud Naitve나 마이크로 서비스에서만 새롭게 사용되는것이 아니라
    이전부터 시스템의 통합적인 관리와 운영을 위해 사용되었지만 
    Cloud Native나 마이크로 서비스에서 더욱 빛을 발하게 되었다.

 

반응형

'프로그래밍 공부 > 컴퓨터공학 기초' 카테고리의 다른 글

12 Factors, +3  (0) 2023.01.25
Cloud Native Architecture, Application  (0) 2023.01.25
동기화(Synchronization) Mutex와 Semaphore  (0) 2022.12.28
웹 보안(SQL Injection, XSS)  (0) 2022.12.27
Web Socket이란?  (0) 2022.01.25