Backend · Infra

MSA (Microservice Architecture)

devhyen 2024. 7. 3. 14:42

마이크로서비스 아키텍처는 소프트웨어 시스템을 작고 독립적인 서비스들로 분리하여 개발하고 배포하는 아키텍처 스타일 입니다.

기존 모노리틱 아키텍처와 달리, MSA는 각 서비스가 특정 비즈니스 기능을 담당하여 독립적으로 실행될 수 있도록 설계되었습니다.

Logical comparison of monolithic vs microservices Source: Clover:2017

독립적인 서비스

  • 각 서비스는 자체적 데이터베이스와 통신 인터페이스를 가짐
  • 특정 비즈니스 기능을 수행함
  • 서비스 간의 결합도를 낮춤
  • 개발과 배포의 독립성을 높임

분산형 데이터 관리

  • 독립적 DB를 가지기 때문에, 데이터 관리는 분산되어 있음
  • 서비스 간 일관성 유지를 신경 써야 하지만, 해결하기 위한 패턴과 도구들이 발전하고 있음

경량화된 통신 프로토콜

  • 서비스 간 통신은 주로 HTTP RESTful API를 통하여 이루어짐
  • 서비스 간 유연하고 간단한 통신을 가능하게 함

개별적 배포 & 확장성

  • 각 서비스는 독립적으로 배포될 수 있고 필요에 따라 개별적으로 확장할 수 있음
  • 시스템의 유연성과 성능 향상

유연한 기술 스택 선택

  • 각 서비스들은 개별적으로 기술 스택을 선택할 수 있음, 다양한 요구사항에 맞춘 최적의 도구 선택을 가능하게 함

MSA 기반의 어플리케이션을 배포하는 가장 좋은 방법은 컨테이너 가상화를 이용하는 것입니다.

 

분산시스템 개발은 일반 개발보다 복잡하다.

모든 것이 독립적인 서비스이기 때문에 각 모듈간 인터페이스를 신중하게 처리해야한다.

서비스 중 하나가 응답하지 않을 경우 방어 코드도 작성해야 한다. 

호출 대기 시간이 발생하게 되면 복잡한 상황이 발생할 수 있다.

 

다중 DB 및 트랜잭션 관리가 어려울 수 있다.

 

테스트 하기 전 의존성이 있는 서비스를 미리 확인해야 한다.

 

배포시 각 서비스간의 조정이 필요할 수 있다.


Spring Cloud

MSA를 구현하고 관리하기 위한 도구들의 모음

Spring 프레임 워크 기반으로 개발되었음

 

  • 서비스 디스커버리 (Service Discovery)
    •  Eureka, Consul 등의 서비스 디스커버리 서버를 통해 서비스 간의 위치를 동적으로 관리하고 탐색할 수 있습니다.
  • 로드 밸런싱 (Load Balancing)
    • Ribbon을 사용하여 서비스 인스턴스 간의 부하 분산을 자동으로 처리할 수 있습니다.
  • 회로 차단기 (Circuit Breaker)
    •  Hystrix를 사용하여 서비스 간의 호출에서 발생할 수 있는 장애 상황을 관리하고, 회로 차단 기능을 통해 서비스의 격리 및 복구를 지원합니다.
  • 게이트웨이 (API Gateway)
    • Zuul, Spring Cloud Gateway 등을 사용하여 마이크로서비스의 진입점을 단일화하고, 라우팅 및 보안 기능을 제공할 수 있습니다.
  • 구성 관리 (Configuration Management)
    •  Spring Cloud Config 서버를 사용하여 분산 시스템의 설정을 중앙에서 관리하고 동적으로 적용할 수 있습니다.
  • 분산 추적 (Distributed Tracing)
    •  Zipkin과 같은 도구를 통해 서비스 간의 요청 추적 및 성능 모니터링을 수행할 수 있습니다.

 

 

'Backend · Infra' 카테고리의 다른 글

[ElasticSearch] nested Type  (0) 2024.07.10
[ElasticSearch] Query  (0) 2024.07.09
싱글톤 패턴 Singleton Pattern  (0) 2024.07.09
Node.js 란?  (0) 2024.06.23
DB index에 대한 이해  (0) 2024.06.16