코딩과 결혼합니다

[CS] MSA : MicroService Architecture 본문

2세/Computer Science

[CS] MSA : MicroService Architecture

코딩러버 2023. 11. 2. 17:11
728x90

✏️MSA

하나의 큰 애플리케이션을 여러 개의 작은 서비스로 분리하는 아키텍쳐 패턴을 말한다. 이 작은 서비스들은 각각 자신의 프로세스를 갖고 있으며, 비즈니스 목표를 달성하기 위해 서로 통신한다. 각 서비스는 독립적으로 배포할 수 있고, 각자 다른 프로그래밍 언어와 데이터베이스를 사용할 수 있다. 

 

 

🔸 MSA의 등장배경

기존의 모놀리식 아키텍쳐의 한계를 극복하고자 하는 시도에서 시작되었다.

  1. 모놀리식 아키텍처는 애플리케이션의 모든 구성요소가 한 개의 단위로 시스템의 한 부분이 다른 부분과 강하게 연결되어 있는 구조로 시스템의 규모가 커질수록 코드의 복잡성을 증가시키고, 한 부분의 변경이 전체 시스템에 영향을 미칠 수 있다. 또한, 전체 애플리케이션을 한 번에 배포해야 하므로 배포 과정이 복잡해지고 많은 시간이 소요된다.
  2. 애플리케이션의 규모 확장, 기능 추가, 기술 변화 등에 빠르게 대응하기 위해 각 기능이 독립적으로 개발되고 배포되는 필요성이 생겼다.
  3. 개발과 운영의 경계를 허물고 빠른 배포와 지속적인 통합을 가능하게 하는 DevOps 및 클라우드 컴퓨팅이 발전하고 있다. MSA또한 이러한 트렌드를 지원하고, 이를 통해 더 빠른 시장 반응 속도와 개선된 사용자 경험을 제공할 수 있다.

 

🔸 MSA의 특징

API를 통해서만 상호작용할 수 있다. 즉, 마이크로 서비스는 end-point(접근점)을 API 형태로 외부에 노출하고, 실직적인 내부 사항은 모두 추상화 한다. 내부의 구현 로직, 아키텍처와 프로그래밍 언어, 데이터베이스, 품질 유지 체계와 같은 기술적인 사항들은 서비스 API에 의해 철저하게 가려진다.

  • 제대로 설계 된 마이크로서비스는 하나의 비즈니스 범위에 맞춰 만들어지므로 하나의 기능만 수행한다. 또한 여러 어플리케이션에서 재사용할 수 있었야한다.
  • 애플리케이션은 항상 기술 중립적 프로토콜을 사용해 통신하므로 서비스 기술과는 무관한다. 따라서 마이크로서비스 기반의 애플리케이션을 다양한 언어와 기술로 구축할 수 있다는 것을 의미한다.
  • SOA에서 사용되는 집중화된 관리체계를 사용하지 않는다. 마이크로서비스 구현체의 공통적인 특징 중 하나는 ESB(Enterprise Service Bus)와 같은 무서운 제품에 의존하지 않는다는 점이다. REST 등 가벼운 통신 아키텍처, 또는 kafka 등을 이용한 message stream을 주로 사용한다.

 

🔸 MSA의 장/단점

  • 장점 : 서비스를 개발적으로 업데이트 하거나 수정할 수 있어, 전체 시스템의 유연성과 확장성이 높아진다.
              팀 단위로 적절한 수준에서 기술 스택을 다르게 가져갈 수 있다.
              서비스 별로 독립적인 배포가 가능하여 CD도 모놀리식에 비해서 가볍게 할 수 있다.
              각각 서비스의 부하에 따라 개별적으로 scale-out이 가능하다. 메모리, CPU적으로 상당부분 이득이 된다.
  • 단점 : 분산 시스템의 복잡성, 서비스 간의 통신에 대한 고려, 데이터 일관성 유지 등의 도전 과제를 가지고 있다.
              통합테스트가 어렵다. 개발 환경과 실제 운영환경을 동일하게 가져가는 것이 쉽지 않다.

              실제 운영환경에 대해서 배포하는 것이 쉽지 않다. 서비스 1개를 재배포 하는 경우 다른 서비스들과의 연계가
              정상적으로 이루어지는지 확인해야 한다.

'2세 > Computer Science' 카테고리의 다른 글

[CS] Docker  (0) 2023.11.08
[CS] Caching  (0) 2023.11.03
[CS] 자료구조 : Java와 HashMap  (1) 2023.11.01
[CS] 자료구조 : Java와 ArrayList, LinkedList  (2) 2023.10.31
[CS] 자료구조 : Java와 Stack, Queue  (0) 2023.10.30