320x100
320x100

API Gateway Pattern

이미지출처: https://www.wallarm.com/what/the-concept-of-an-api-gateway

: 모든 클라이언트 요청에 단일 진입점 역할을 하는 API gateway를 두어 마이크로서비스 액세스를 단순화 하여 클라이언트와 서비스 간 원활한 커뮤니케이션을 제공

: API Gateway는 마이크로 서비스의 프론트엔드 역할을 수행하며 클라이언트로부터 요청을 받아 적절한 서비스로 라우팅을 수행

 

 

 

 

Circuit Breaker

: 서비스 내 실패 모드 (과부하, 장애 등)를 모니터링 하고 발생한 서비스에 요청이 도달하는 것을 차단하여 전체 시스템이 붕괴하는 것을 방지

: 서비스 간에 서킷 브레이커를 두고 서킷 브레이커는 요청받은 서비스의 장애를 감지하면 해당 서비스를 차단

 

 

 

 

CQRS (Command Query Responsibility Segregation)

: 서비스의 Read와 Write 작업을 구분하여 마이크로서비스의 성능과 확장성을 증가시킬 수 있는 패턴

: 읽기 및 쓰기 작업을 하는 시스템이 복잡해지고 크기가 커져도 확장 및 유지 관리가 수월

 

 

 

 

Event Sourcing

: 응용 프로그램의 상태를 일련의 이벤트로 모델링하여 저장 및 사용

: 애플리케이션의 현재 상태를 저장하는 시스템은 일련의 이벤트를 저장하고 필요 시 이를 읽어들여 애플리케이션의 상태를 업데이트 

 

 

 

 

Saga Pattern

출처: https://docs.aws.amazon.com/prescriptive-guidance/latest/modernization-data-persistence/saga-pattern.html

: 분산 시스템에서 여러 서비스를 포함하는 여러 트랜잭션에서 일관성을 유지하는데 사용

: 분산 트랜잭션을  처리할 수 있는 안정적인 솔루션을 제공하여 서비스의 자율성을 유지하면서 데이터 일관성을 보장

 

 

 

 

 

Service Discovery Pattern

출처: https://bcho.tistory.com/1252

: 마이크로서비스의 복잡한 설계를 쉽게 탐색할 수 있도록 도와줌

: 서비스 간 원활한 커뮤니케이션을 보장하고 수동 configuration의 필요성을 감쇠

: 클라이언트측 디스커버리와 서버측 디스커버리로 나뉨

 

- 서비스 레지스트리 (서비스 디스커버리)

: 서비스들의 IP 주소와 포트를 가지고 있으며, 클라이언트에서 부터 오는 요청을 처리

 

 

 

 

 

Load Balancing Pattern

: 대량의 트래픽이 발생할 수 록 서비스간 트래픽을 분산하는 패턴

: 라운드 로빈, 최소 연결 등의 로드밸런싱 알고리즘을 이용한다

 

 

 

 

Bulkhead Pattern

: 서비스와 리소스를 분리하여 특정 서비스에서 장애가 발생해도 전체 시스템이 다운되지 않도록 하는 패턴

: AWS Lambda와 데이터베이스의 connection pooling이 있음

 

 

 

 

 

Event-Driven Architecture Pattern

출처: https://www.linkedin.com/pulse/anti-patterns-event-driven-architecture-arpit-jain

: 이벤트를 활용하여 서비스 간 이벤트를 트리거하여 실시간 응답을 지원하고 서비스 간 느슨한 커플링을 촉진

: 이벤트를 트리거로 활용함으로써 서비스 간 직접적인 의존성을 최소화하여 유연성을 높이고 시스템을 보다 쉽게 진화시킬 수 있음

: 이벤트 브로커를 하나 두고 이 브로커가 이벤트 발생 시 마다 서비스를 요청하는 방식

 

 

 

 

 

Retry Pattern

: 장애 완화 또는 극복을 위해 실패한 작업을 재시도 하는 패턴

: 재시도 방법은 최대 재시도 횟수 지정, 재시도 사이의 지연 및 exponential backoff (1회 실패 시 2번 재시도, 2회 실패 시 4번 재시도 등...)

 

 

 

 

 

Backends for Frontends Pattern (BFF)

: 프론트엔드 당 전용 백엔드 서비스를 생성하여 각  플랫폼에 맞는 최적의 성능과 UX를 보장

 

 

 

 

Sidecar Pattern

출처: https://learn.microsoft.com/en-us/azure/architecture/patterns/sidecar
: 자울성을 해치지 않고 마이크로서비스에 기능을 추가할 수 있는 패턴: 서비스에 추가 구성 요소를 연결해서 핵심 서비스를 변경하지 않고 모듈식 기능을 제공할 수 있음

: 애플리케이션을 수정하지 않고 애플리케이션에 붙은 사이드카를 붙혔다 뗐다할 수 있음 

 

- 예시

: 보안을 위해 Nginx reverse proxy 등을 붙혀서 HTTPS 통신을 수행

: 컨테이너 외부로 로그를 모으기 위해 logstash, fluentd 등을 추가

 

 

 

 

 

Strangler Pattern

출처: https://microservices.io/patterns/refactoring/strangler-application.html

: 모놀리식 아키텍처를 점차적으로 마이크로서비스를 기반하는 아키텍처로 리스크 없이 바꿀 수 있게 하는 패턴

: 기존에 모놀리식 아키텍처로 만든 서비스 내에서 기능을 하나씩 MSA로 변경

 

 

 

 

 

 

 

Reference

 

킴코더 / 면접 전 꼭 알아야 할 설계 패턴 12가지 | 커리어리

👉 기본적으로 알아야 하고 자주 사용하는 패턴입니다. 면접 준비와 상관 없이 패턴에 익숙해지도록 좀 더 깊...

careerly.co.kr

 

이양일 / 마이크로서비스 설계 패턴 | 커리어리

마이크로서비스 설계 패턴은 작고 독립적으로 배포 가능한 서비스로 구성된 마이크로서비스를 효율적으로 개발하고 ...

careerly.co.kr

 

 

MSA에서 Service discovery 패턴

MSA에서 Service discovery 패턴의 이해 조대협 (http://bcho.tistory.com) MSA와 같은 분산 환경은 서비스 간의 원격 호출로 구성이 된다. 원격 서비스 호출은 IP 주소와 포트를 이용하는 방식이 되는다. 클라

bcho.tistory.com

 

사이드카 패턴(Sidecar pattern)

사이드카 패턴은 어플리케이션 컨테이너와 독립적으로 동작하는 별도의 컨테이너를 붙이는 패턴이다. 어플리케이션 컨테이너의 변경이나 수정 없이 독립적으로 동작하는 컨테이너를 붙였다

blog.leocat.kr

 

300x250
728x90