Skip to content

2 Composition

laigasus edited this page Dec 9, 2024 · 1 revision

구성

라우팅

라우팅 설정은 이곳에 있습니다.

각 서비스 별 서버의 이름을 따 경로를 지정했습니다.

api.sesac.market/product/**

라우팅된 서버 목록입니다.

로드밸런싱

Kubernetes 친화적 환경에서 동작하도록 설정했습니다. 개발환경에서의 기본 설정은 '라운드로빈' 입니다.

폴백 처리

서킷브레이커

서킷 브레이커 패턴을 구현하여 마이크로서비스 간의 장애 전파를 방지하고 시스템의 복원력을 향상시켰습니다. Resilience4j의 CircuitBreaker 기능을 활용하여 서비스 호출의 실패율이 임계값을 초과할 경우 자동으로 회로를 차단하고, Fallback 메커니즘을 통해 대체 응답을 제공하도록 구성했습니다. 또한 슬라이딩 윈도우 방식으로 실패율을 모니터링하여 시스템의 안정성을 실시간으로 관리할 수 있도록 했습니다.

서킷브레이커의 기본 상태 전이도입니다.

Retry

Retry 메커니즘을 통해 일시적인 오류가 발생했을 때 자동으로 재시도하도록 구성했습니다. Resilience4j의 Retry 기능을 사용하여 재시도 횟수와 대기 시간을 설정할 수 있습니다. 이를 통해 네트워크 지연이나 일시적인 서비스 장애로 인한 실패를 효과적으로 처리할 수 있습니다.

TimeLimit

TimeLimit 기능을 사용하여 서비스 호출의 최대 시간을 제한했습니다. Resilience4j의 TimeLimiter를 활용하여 특정 시간 내에 응답이 없을 경우 호출을 중단하고, Fallback 메커니즘을 통해 대체 응답을 제공하도록 구성했습니다. 이를 통해 응답 지연으로 인한 시스템 자원 낭비를 방지할 수 있습니다.

인증

Okta OIDC를 사용하여 인증을 처리합니다.

Redis Session을 사용해 분산 애플리케이션에서의 인증을 구현하였습니다. Redis를 세션 저장소로 활용함으로써 여러 서버 간에 세션 정보를 공유하고, 확장성과 고가용성을 확보할 수 있었습니다. 또한 세션 만료 시간을 정해 용량 제약을 극복했습니다. 기 로그인한 사용자가 다른 클라이언트에서 로그인하면 이전 로그인 정보를 무효화 후 세션을 다시 등록하도록 설계했습니다.

인증 정보와 일반 사용자 정보를 분리함으로써 보안성을 강화하고, 각 데이터베이스의 역할을 명확히 구분하여 시스템의 유지보수성을 향상시켰습니다.

Okta에서는 비밀번호, 인증 토큰 등의 민감한 정보를 안전하게 관리하고, Account DB에서는 사용자의 프로필, 설정 등 일반적인 정보를 효율적으로 관리할 수 있게 되었습니다.

세션 클러스터링

모든 서비스가 동일한 Redis session store를 사용하도록 구성하여 세션 클러스터링을 구현했습니다. 따라서 서비스 간에 세션 정보를 공유하고, 확장성과 고가용성을 확보할 수 있었습니다.

Clone this wiki locally