MSA (1) - Spring Cloud Netflix Eureka

2025. 1. 2. 19:18·Infra

Spring Cloud Netflix Eureka

Service Discovery

Eureka는 Spring Cloud Netflix에서 제공하는 서비스 디스커버리 도구로, MSA 환경에서 각 서비스의 위치(IP와 포트)를 동적으로 관리한다.

  1. 서비스 디스커버리란?
    • MSA에서는 각 서비스가 독립적으로 배포되고 확장되므로, 고정된 IP와 포트를 사용하는 것이 어렵다.
    • Eureka는 서비스 레지스트리로 작동하여 각 서비스의 위치 정보를 등록하고, 다른 서비스가 이를 검색할 수 있도록 돕는다.
  2. Eureka Server와 Eureka Client
    • Eureka Server: 모든 서비스의 위치 정보를 저장 및 관리.
    • Eureka Client: 애플리케이션이 Eureka Server에 자신의 위치를 등록하거나, 다른 서비스의 위치를 검색.
  3. Service Discovery의 흐름
    • 서비스 A가 시작되면 Eureka Server에 자신의 위치(IP/포트)를 등록.
    • 서비스 B가 서비스 A에 요청하려고 할 때, Eureka Server에서 서비스 A의 위치를 검색.

API Gateway Service

역할

API Gateway는 MSA에서 클라이언트와 백엔드 서비스 간의 중간 관문 역할을 한다.

  1. 인증 및 권한 부여:
    • 요청을 처리하기 전에 인증 및 권한 확인을 수행.
  2. 서비스 검색 통합:
    • Eureka와 통합하여 동적으로 서비스 위치를 확인.
  3. 응답 캐싱:
    • 자주 요청되는 데이터를 캐싱하여 성능 향상.
  4. 정책, 회로 차단기 및 QoS:
    • 장애 격리 및 서비스 안정성을 위해 회로 차단기(Circuit Breaker)와 QoS(품질 보증) 정책 적용.
  5. 속도 제한:
    • 과도한 요청을 방지하기 위해 클라이언트별 요청 속도 제한.
  6. 부하 분산:
    • 여러 인스턴스에 요청을 분산하여 성능 최적화.
  7. 로깅 및 추적:
    • 요청 및 응답에 대한 로깅, 추적 ID 추가로 분산 추적 가능.
  8. 헤더, 쿼리 문자열 및 청구 변환:
    • 클라이언트 요청 헤더 또는 쿼리를 백엔드 서비스에 맞게 변환.
  9. IP 허용 목록:
    • 특정 IP에서만 요청을 허용하여 보안을 강화.

Spring Cloud Gateway에서의 MSA 간 통신

Spring Cloud Gateway는 클라이언트와 여러 MSA 서비스 간의 통신 허브 역할을 하며, MSA 간 통신을 지원한다

 

Eureka와 연동:

  • Spring Cloud Gateway는 Eureka를 사용하여 백엔드 서비스의 위치를 동적으로 확인.
spring:
  cloud:
    gateway:
      discovery:
        locator:
          enabled: true

 

라우팅 구성:

  • Gateway는 클라이언트 요청을 특정 서비스로 전달하는 라우팅을 설정.
routes:
  - id: serviceA-route
    uri: lb://serviceA
    predicates:
      - Path=/serviceA/**
  - id: serviceB-route
    uri: lb://serviceB
    predicates:
      - Path=/serviceB/**
(lb://는 Eureka를 통해 로드 밸런싱을 수행.)

 

필터 적용:

  • 요청 및 응답에 대해 필터를 사용하여 헤더 추가, 인증 처리, 데이터 변환 등을 수행.
filters:
  - name: AddRequestHeader
    args:
      name: X-Request-ID
      value: ${random.uuid}

 

회로 차단기와 속도 제한:

  • Spring Cloud Gateway는 Resilience4j와 통합하여 회로 차단기를 설정 가능.
routes:
  - id: serviceA-route
    uri: lb://serviceA
    filters:
      - name: CircuitBreaker
        args:
          name: serviceA-cb
          fallbackUri: forward:/fallback/serviceA

 

Spring Cloud Gateway가 정상적으로 실행됐을 때, Netty 비동기 방식으로 실행되는 것을 확인 할 수 있다.

 

Spring Cloud Gateway와 Eureka를 활용한 MSA 구성의 장점

  1. 중앙 집중화:
    • Gateway를 통해 모든 요청을 중앙에서 관리하고, 클라이언트와 서비스 간의 복잡성을 제거.
  2. 동적 서비스 디스커버리:
    • Eureka와 연동하여 서비스의 위치를 자동으로 탐색.
  3. 유연한 확장성:
    • 각 서비스가 독립적으로 확장 가능하며, Gateway와 Eureka가 이를 지원.
  4. 보안 및 성능 강화:
    • 인증, 속도 제한, 캐싱 등을 통해 성능 최적화 및 보안 강화.

'Infra' 카테고리의 다른 글

MSA (2) Spring Cloud Gateway - Filter  (2) 2025.01.07
'Infra' 카테고리의 다른 글
  • MSA (2) Spring Cloud Gateway - Filter
JAVALA
JAVALA
워니‘s Diary
  • JAVALA
    정신줄 JAVA라
    JAVALA
  • 전체
    오늘
    어제
    • 분류 전체보기 (87)
      • Codding_Test (11)
        • BaekJoon (7)
        • Programmers (3)
      • Algorithm (11)
      • Daily (4)
        • memoir (4)
      • TroubleShooting (8)
        • InteliJ (1)
        • Server (1)
        • Infra (0)
        • DB (0)
      • Computer Science (1)
      • JAVA (8)
      • Javascript (0)
      • Spring Boot (7)
      • API (2)
      • Server (0)
      • DB (3)
        • ORACLE (1)
      • Infra (2)
      • Refactoring (1)
      • Plugin (1)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    코딩테스트
    개발자 국비
    자바 스프링부트
    자바 클래스
    개발자 비전공자
    springboot
    트리 자료구조
    백준
    스프링부트
    제로베이스
    개발자 부트캠프
    백엔드 개발자
    자바 메소드
    개발자
    프로그래머스
    자바
    프론트엔드 개발자
    자바 스프링
    spring boot
    자바 알고리즘
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
JAVALA
MSA (1) - Spring Cloud Netflix Eureka
상단으로

티스토리툴바