study/devops

마이크로서비스 아키텍처(Microservices Architecture, MSA)

FYE 2023. 1. 30. 20:39

오늘 TIL시간에는 MSA에 대해 정리해보려고 합니다.,.

 

 

 

 

마이크로서비스란 무엇인가?

마이크로서비스는 소프트웨어가 잘 정의된 API를 통해 통신하는 소규모의 독립적인 서비스로 구성되어 있는 경우의 소프트웨어 개발을 위한 아키텍처 및 조직적 접근 방식이다. 애플리케이션이 독립적인 구성요소로 구축되어 각 애플리케이션 프로세스가 서비스로 실행된다. 이러한 서비스는 경량 API를 사용하여 잘 정의된 인터페이스를 통해 통신한다.

즉, 기능 중심으로 하나만 잘 하도록 서비스를 작게 유지하고 각 서비스를 분산된 환경에서 메서징으로 연결한다라고 이해했습니다.

 

 

 

 

모놀로식 아키텍처는 모든 프로세스가 긴밀하게 견합되고 단일 서비스로 실행이 된다. 따라서 애플리케이션의 한 프로세스에 대한 수요가 급증하면 해당 아키텍처 전체를 확장해야한다. 코드베이스가 증가하게 되면 모놀로식 애플리케이션의 기능을 추가하거나 개선하기가 어려운 단점이 있다. 그리고 이러한 복잡성으로 인해 기능을 추가하거나 개선하기가 어렵다. 종속 관계를 이루며 긴밀하게 결합된 많은 프로세스로 인해 단일 프로세스의 실패로 인한 영향이 증가함에 따라 모놀리식 아키텍처는 애플리케이션 가용성에 대한 위험을 가중 시킨다.

 

마이크로서비스 아키텍처는 애플리케이션이 독립적인 구성요소로 구축되어 각 애플리케이션 프로세스가 서비스로 실행이 된다. 이러한 서비스는 경량 API를 사용하여 잘 정의된 인터페이스를 통해 통신한다. 서비스는 비즈니스 기능을 위해 귀축되며 서비스마다 한 가지 기능을 수행한다. 서비스가 독립적으로 실행되기 때문에 애플리케이션의 특정 기능에 대한 수요를 충족하도록 각각의 서비스를 업데이트,배포 및 확장을 할 수 있다.

ㄴ위에 적어놨지만 쓰면서 다시 이해하기 위해 한번 더.. 

 

 

 

 

 

 

 

 

 

 

자율성 - 마이크로서비스 아키텍처의 각 구성요소 서비스는 다른 서비스의 기능에 영향을 주지 않으면서 개발, 배포, 운영학 확장할 수 있다. 서비스가 해당 코드 또는 구현을 다른 서비스와 공유할 필요는 없으며 개별 구성 요소 간의 통신은 잘 정의된 API를 통해 이루어 진다.
 
전문성 - 각 서비스는 일련의 기능을 위해 설계되며 특정 문제를 해결하는 데 중점을 둔다. 개발자가 시간이 지남에 따라 서비스에 더 많은 코드를 제공하여 서비스가 복잡해지면 더 작은 서비스로 분할할 수 있다.
 
이점으로는 각 서비스가 지원하는 애플리케이션 기능의 수요를 충족하도록 해당 서비스를 독립적으로 확장 할 수 있는 유연한 확장성,
지속적 통합 및 지속적 전달을 통해 새로운 아이디어를 손쉽게 시험하고 문제가 발생할 경우 간단히 롤백할 수 있는 손쉬운 배포,
팀이 특정한 문제를 해결하는 데 가장 적합한 도구를 자유롭게 선택할 수 있는 기술적 자유,
소프트웨어를 잘 정의된 소규모 모듈로 분할하여 팀이 기능을 여러 용도로 사용할 수 있게 하는 재사용 가능한 코드,
서비스가 독립적이기 때문에 실패에 대한 애플리케이션의 저항성 증가로 인한 복원성이 있다.
 
 

 

 

서버리스(serverless)

서버가 없다는 의미를 지닌게 아닌, 개발자가 서버를 관리할 필요 없이 애플리케이션을 빌드하고 실행 할 수 있도록 하는 클라우드 네이티브 개발 모델이다. 서버리스 모델에도 서버가 존재하지만 애플리케이션 개발에서와 달리 추상화되어 있다. 클라우드 제공업체가 서버 인프라에 대한 프로비저닝, 유지관리, 스케일링 등의 일상적인 작업을 처리하며, 개발자는 배포를 위해 코드를 컨테이너에 패키징하기만 하면 된다.
 
*프로비저닝 : 사용자의 요구에 맞게 시스템 자원을 할당,배치,배포해 두었다가 필요 시 시스템을 즉시 사용할 수 있는 상태로 미리 준비해 두는 것

 

 

장점

  • 서버리스 컴퓨팅은 개발자 생산성을 높이고 운영 비용을 줄일 수 있습니다. 서버 프로비저닝 및 관리와 같은 일상 업무의 부담을 줄여, 개발자가 애플리케이션에 더 많은 시간을 할애할 수 있습니다. 
  • 서버리스는 개발자가 프로비저닝하기 위한 작업에 필요한 인프라를 명시적으로 설명할 필요를 줄여줌으로써 DevOps 도입을 지원합니다.  
  • 제3사 BaaS 오퍼링의 모든 구성 요소를 통합해 애플리케이션 개발을 더욱 간소화할 수도 있습니다.
  • 서버리스 모델에서 운영 비용이 낮아지는 이유는 항상 자체 서버를 실행하고 관리하는 대신 필요한 만큼 클라우드 기반 컴퓨팅 시간에 대해 비용을 지불하기 때문입니다.

단점

  • 자체 서버를 실행하지 않거나 자체 서버측 로직을 제어하지 않는 데 따른 단점이 있습니다.
  • 클라우드 제공업체는 자사 구성 요소가 상호작용하는 방법을 엄격히 제한할 수 있어, 사용자 시스템의 유연성과 커스터마이징 수준에 영향을 주게 됩니다. BaaS 환경의 경우 개발자는 코드 제어 권한이 없는 서비스에 의존해야 할 수 있습니다.
  • IT 스택의 이러한 측면에 대한 제어 권한을 이전하면 벤더 종속성 문제도 발생할 수 있습니다. 제공업체를 변경하면 새로운 벤더 사양에 맞추기 위해 시스템을 업그레이드하는 비용이 발생할 수도 있습니다.

 

 

 

 

 

AWS가 제공하는 서버리스 서비스들

컴퓨팅

- AWS Lambda

서버를 프로비저닝하거나 관리하지 않고도 코드를 실행할 수 있는 이벤트 기반 종량제 컴퓨팅 서비스

 

- AWS Fargate

ECS 및 EKS와 연동되는 서버리스 컴퓨팅 엔진

 

 

애플리케이션 통합

- AWS EventBridge

AWS와 기존 시스템에서 이벤트 기반 애플리케이션을 대규모로 구축하는 데 사용할 수 있는 서버리스 이벤트 버스

 

-AWS Step Function

여러 AWS서비스를 손쉽게 비즈니스 크리티컬 애플리케이션으로 차례로 배열할 수 있게 하는 시각적 워크플로 오케스트레이터

 

-Amazon SQS

마이크로서비스, 분산 시스템 및 서버리스 애플리케이션의 손쉬운 분리 및 크기 조정을 지원하는 메시지 대기열 서비스

 

 

 

데이터 스토어

-Amazon S3

모든 양의 데이터를 저장하고 보호할 수 있도록 설계된 객체 스토리지 서비스

 

-Amazon EFS

빌더를 위한 완전 탄력적인 서버리스 파일 시스템으로, 고가용성 공유 스토리지의 설정, 크기 조정 및 비용 최적화를 간편하게 해주는 서비스

 

 

더 있지만 자세한 내용은 https://aws.amazon.com/ko/serverless/ 참고

 

 
 
 

 

 

 

 

 

참고 레퍼런스

https://www.redhat.com/ko/topics/cloud-native-apps/what-is-serverless