MSA (Microservice Architecture)
서비스 기반 아키텍처 패턴 중 하나로, 각 서비스가 독립적으로 개발, 배포, 확장, 유지보수될 수 있는 아키텍처를 말합니다. 이를 위해 각 서비스는 API를 통해 통신하며, 데이터베이스 등의 리소스도 각각 가지고 있습니다.
*Swift에서 MSA를 구현하기 위해서는 다음과 같은 디자인 패턴을 활용할 수 있습니다.
1. 서비스 디스커버리 패턴
* 서비스 디스커버리 패턴은 분산 시스템에서 서비스를 찾아 사용하기 위한 패턴입니다. 이 패턴은 서비스 프로바이더가 서비스를 등록하고, 서비스 사용자가 필요한 서비스를 검색하고, 이를 사용하는 방식으로 동작합니다.
서비스 디스커버리 패턴에는 여러가지 방법이 있지만, 대표적인 방법으로는 Eureka와 Consul 등의 서비스 디스커버리 프레임워크를 이용하는 방법이 있습니다.
예를 들어, Eureka를 사용하여 서비스 디스커버리 패턴을 구현하면, 서비스 프로바이더는 Eureka 서버에 자신의 서비스 인스턴스를 등록하고, 서비스 사용자는 Eureka 서버에 등록된 서비스 인스턴스를 검색하여 사용할 수 있습니다. 이를 통해 분산 시스템에서 서비스의 위치와 상태를 추적하고, 서비스 간 통신을 용이하게 할 수 있습니다.
2. API 게이트웨이 패턴
*API 게이트웨이 패턴(API Gateway Pattern)은 마이크로서비스 아키텍처에서 사용되는 패턴 중 하나로, API 엔드포인트와 마이크로서비스 간의 중개자 역할을 수행합니다. API 게이트웨이는 클라이언트 요청을 받아 서비스 간 통신을 조정하고 필요한 인증, 인가, 로깅, 부하 분산 등의 기능을 제공합니다.
API 게이트웨이는 다양한 프로토콜(HTTP, WebSocket 등)을 지원하며, 백엔드 서비스의 프로토콜 변환을 처리할 수 있습니다. 이를 통해 서비스 간에 서로 다른 프로토콜을 사용할 때도 투명하게 통신할 수 있습니다.
또한 API 게이트웨이는 클라이언트와 백엔드 서비스 간의 결합도를 낮출 수 있습니다. 클라이언트는 게이트웨이의 엔드포인트만 알고 있으면 되므로, 백엔드 서비스의 변경이나 추가가 있어도 클라이언트를 수정할 필요가 없습니다.
API 게이트웨이 패턴은 마이크로서비스 아키텍처에서 일반적으로 사용되는 패턴 중 하나이며, API 관리 및 보안을 강화하고, 백엔드 서비스 간의 결합도를 낮추는 등의 이점을 제공합니다.
.
3. Circuit Breaker 패턴
* Circuit Breaker 패턴은 분산 시스템에서 장애가 발생할 때 시스템 전체의 장애를 방지하기 위해 사용하는 패턴입니다.
이 패턴에서는 시스템의 부분적인 장애가 발생할 때 이 부분을 격리시키고, 해당 부분에 대한 요청을 처리하지 않도록 회로를 차단합니다. 이렇게 하면 해당 부분에서 발생한 장애가 시스템 전체로 확산되는 것을 방지하고, 시스템의 안정성을 유지할 수 있습니다.
Circuit Breaker 패턴의 핵심 구성 요소는 세 가지 상태입니다.
- Closed: 회로가 열려있지 않은 상태입니다. 이 상태에서는 요청이 정상적으로 처리됩니다.
- Open: 회로가 열려있는 상태입니다. 이 상태에서는 해당 부분에 대한 요청을 처리하지 않으며, 대신 미리 정의된 에러 메시지나 기본값을 반환합니다.
- Half-open: 회로가 닫히는 중인 상태입니다. 이 상태에서는 몇몇 요청을 처리하고, 이에 대한 응답이 성공하면 회로를 다시 닫습니다. 반면, 실패하면 다시 열린 상태로 돌아갑니다.
Circuit Breaker 패턴은 대규모 분산 시스템에서 많이 사용됩니다. 이 패턴은 서비스 간 의존성이 높은 분산 시스템에서 일어날 수 있는 고장과 같은 문제를 방지하고, 시스템의 안정성을 보장합니다.
4. 서비스 메시 패턴
* 서비스 메시 패턴(Service Mesh Pattern)은 분산 시스템에서 여러 서비스 간의 통신을 관리하기 위한 패턴입니다. 서비스 메시 패턴은 각 서비스 인스턴스의 네트워크 상에서의 연결, 로드 밸런싱, 서비스 디스커버리, 보안 등의 기능을 제공합니다.
서비스 메시 패턴의 주요 구성 요소는 서비스 메시(Service Mesh)와 사이드카 프록시(Sidecar Proxy)입니다. 서비스 메시는 분산 시스템 내의 모든 서비스 인스턴스의 통신을 제어하며, 사이드카 프록시는 각 서비스 인스턴스에 배치되어 해당 서비스의 통신을 관리합니다.
서비스 메시 패턴은 여러 가지 장점을 제공합니다. 먼저, 각 서비스 인스턴스의 통신을 관리하기 때문에 서비스 간의 통신이 간단하고 안전하게 이루어질 수 있습니다. 또한, 서비스 디스커버리와 로드 밸런싱 기능을 제공하기 때문에, 서비스 간의 통신이 효율적이고 안정적으로 이루어질 수 있습니다. 마지막으로, 보안 기능을 제공하기 때문에, 보안이 중요한 분산 시스템에서도 안전하게 서비스 간의 통신이 이루어질 수 있습니다.
5. 서킷 브레이커 패턴
* 서킷 브레이커 패턴은 분산 시스템에서 서비스 간의 호출이 발생할 때, 호출된 서비스가 예상치 못한 장애 상황에 봉착하거나, 느린 응답 시간을 보일 때, 해당 서비스를 격리시켜 전체 시스템에 장애가 전파되지 않도록 하는 패턴입니다.
서킷 브레이커는 일종의 "전기 회로의 브레이커"와 같은 역할을 합니다. 서비스 간의 호출이 발생할 때, 서킷 브레이커는 호출된 서비스의 상태를 모니터링하고, 일정 기간 동안 호출이 실패하는 비율이 특정 임계치를 초과하거나, 응답 시간이 일정 기간 동안 너무 느려지는 경우, 해당 서비스에 대한 호출을 즉시 차단합니다.
이러한 격리 작업을 통해, 서킷 브레이커는 전체 시스템에 장애가 전파되지 않도록 하며, 호출된 서비스의 부하를 줄이는 효과도 가져옵니다. 따라서 서킷 브레이커 패턴은 분산 시스템에서 고 가용성과 신뢰성을 보장하기 위해 꼭 필요한 패턴 중 하나입니다.