마이크로서비스 아키텍처는 소프트웨어 시스템을 작고 독립적인 서비스들로 분리하여 개발하고 배포하는 아키텍처 스타일 입니다.
기존 모노리틱 아키텍처와 달리, MSA는 각 서비스가 특정 비즈니스 기능을 담당하여 독립적으로 실행될 수 있도록 설계되었습니다.
독립적인 서비스
- 각 서비스는 자체적 데이터베이스와 통신 인터페이스를 가짐
- 특정 비즈니스 기능을 수행함
- 서비스 간의 결합도를 낮춤
- 개발과 배포의 독립성을 높임
분산형 데이터 관리
- 독립적 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 |