서킷 브레이커
서비스 간 호출 실패를 감지하고 장애를 격리하여 시스템 안정성을 유지하는 패턴이다.
- Closed: 모든 요청을 통과시키며, 실패율이 설정된 임계치를 초과하면 Open 상태로 전환된다.
- Open: 요청을 차단하며, 대기 시간이 지나면 Half-Open 상태로 전환된다.
- Half-Open: 일부 요청만 허용하여 성공 여부를 검증하고, 성공하면 Closed 상태로, 실패하면 다시 Open 상태로 전환된다.
- Fallback: 장애 시에도 대체 로직을 제공하여 서비스의 안정성을 보장할 수 있다.
이 패턴은 장애가 전파되는 것을 방지하며, 사용자에게 안정적인 응답을 제공한다.
Resilience4j
Spring Cloud Netfilx 패키지의 일부로 다른 클라우드 구성 요소와 쉽게 통합할 수 있다.
의존성
설정할 것을 줄이기 위해 Spring Boot 3.x.x 버전에서는 아래 의존성을 추가한다. 기본적으로 default 옵션을 사용하면서 필요한 부분의 설정을 추가한다.
implementation 'io.github.resilience4:resilience4j-spring-boot3:2.2.0'
Resilience4j Dashboard
서킷 브레이커의 상태를 모니터링 한다. Prometheus를 통해 수집한 메트릭을 Grangana 대시보드에서 시각화할 수 있다.
API 게이트웨이
클라이언트 요청을 백엔드 서비스로 라우팅하고, 보안, 로깅, 로드 밸런싱 등의 다양한 기능을 제공하는 중간 서버이다. 클라이언트와 서비스 간의 단일 진입점을 제공하며, 보안과 모니터링을 용이하게 한다.
주요 기능
- 라우팅을 통해 클라이언트의 요청을 적절한 서비스로 전달한다.
- 인증 및 권한 부여를 처리하여 보안을 강화한다.
- 로드 밸런싱으로 여러 인스턴스 간에 부하를 분산시킨다.
- 요청 변환 및 필터링을 통해 데이터 가공 및 정제를 수행한다.
Spring Cloud Gateway
Spring 프로젝트 기반의 API 게이트웨이로, MSA 환경에서 널리 사용된다. 클라이언트는 하나의 엔드포인트로 다양한 백엔드 서비스를 통합적으로 사용할 수 있다.
lb://
접두사를 통해 서비스 이름 기반 라우팅을 지원한다.- Eureka와 통합되어 동적으로 서비스 인스턴스를 검색하고, 라우팅 및 로드 밸런싱을 수행한다.
- 필터링을 통해 요청 전후에 추가적인 로직을 실행할 수 있다.
OAuth2
OAuth2는 토큰 기반의 인증 및 권한 부여 프로토콜로, 클라이언트 애플리케이션이 사용자(리소스 소유자)의 권한을 획득하여 보호된 리소스에 접근할 수 있도록 한다.
주요 역할
- 리소스 소유자는 권한을 가진 사용자이다.
- 클라이언트는 권한을 요청하는 애플리케이션이다.
- 리소스 서버는 보호된 리소스를 제공하는 서버이다.
- 인증 서버는 클라이언트를 인증하고 권한 부여를 처리하는 서버이다.
JWT (JSON Web Token)
OAuth2에서 자주 사용되는 토큰 형식으로, 사용자 정보를 포함하고 암호화를 통해 무결성과 출처를 보장한다.
- 헤더: 토큰의 타입과 암호화 알고리즘을 정의한다.
- 페이로드: 사용자 정보와 클레임 데이터를 포함한다.
- 서명: 토큰의 무결성을 검증한다.
JWT는 상태 저장이 필요 없으며, 간결한 문자열 형식으로 빠르고 효율적인 인증을 제공한다.
Spring Cloud Config
Spring Cloud Config는 중앙 집중식 구성 관리를 제공하는 프레임워크이다.
- Git, 파일 시스템, JDBC 등 다양한 저장소를 지원하여 설정을 중앙에서 관리할 수 있다.
- 환경별로 구성을 분리하여 개발, 테스트, 운영 환경에 맞는 설정을 유지할 수 있다.
- 구성 변경 시 Spring Cloud Bus를 통해 변경 사항을 브로드캐스트하거나
/actuator/refresh
엔드포인트를 호출하여 실시간으로 반영할 수 있다.
Spring Cloud Config는 변경 사항을 중앙에서 관리하고 실시간으로 반영할 수 있어, 분산 환경에서의 설정 관리를 용이하게 한다.