TIL 2024-08-06 Spring MSA 라이브러리

2024. 8. 6. 23:44TIL
목차
  1. 서비스 디스커버리 (feat. Eureka)
  2. Eureka란
  3. 클라이언트 사이드 로드 밸런싱 (feat. FeignClient, Ribbon)
  4. 로드 밸런싱이란
  5. 클라이언트 로드 밸런싱이란
  6. FeignClient란
  7. 주요 특징
  8. Ribbon이란
  9. 주요 특징
  10. API 게이트웨이 (feat. Spring Cloud Gateway)
  11. API 게이트웨이란
  12. 주요 기능
  13. Spring Cloud Gateway
  14. 주요 특징
  15. Spring Cloud Gateway Filtering

현재 작성 중인 MSA 서버 아키텍쳐


서비스 디스커버리 (feat. Eureka)

  • MSA에서 각 서비스의 위치를 동적으로 관리하고 찾아준다.
  • 각 서비스는 등록된 서버에 각자 위치를 등록, 다른 서비스는 이를 조회하여 통신한다.
  • 주요 기능
    • 서비스 등록
    • 서비스 조회
    • 헬스 체크

Eureka란

넷플릭스에서 개발한 서비스 디스커버리 서버

  • 서비스 위치 동적 관리
  • 헬스 체크
  • 여러 인스턴스 지원 - 고가용성

 

Eureka 서버를 구성하고

각 서비스가 Eureka Client 로 서버에 자신을 등록해야 사용할 수 있다.


클라이언트 사이드 로드 밸런싱 (feat. FeignClient, Ribbon)

로드 밸런싱이란

  • 네트워크 트래픽 분산 기술
  • 가용성 UP, 성능 UP
  • 종류: 클라이언트, 서버

클라이언트 로드 밸런싱이란

  • 클라이언트가 여러 서버 중 하나를 선택 후 요청
  • 클라이언트는 서버의 목록(feat. Eureka Server)을 가지고 있고, 이를 바탕으로 로드밸런싱

FeignClient란

  • Spring Cloud 가 제공하는 Http Client
  • Eureka와 같은 서비스 디스커버리와 연동하여 인스턴스 조회 및 로드 밸런싱 수행 가능

주요 특징

  • 선언적 HTTP Client: 인터페이스, 어노테이션을 사용하여 REST API 호출 가능
    • RestTemplate 와 차이
      • 한 줄 요약: RestTemplate 로 구현하면 귀찮아진다.
      • FC == FeignClient && RT == RestTemplate
      • 1. FC의 높은 추상화 및 RT의 낮은 추상화
        • FC는 인터페이스 기반으로 구현체를 사용자가 직접 정의하지 않아도 된다.
        • 서버의 구성이 바뀌면 RT는 서비스 코드를 수정해야 한다. -> Open-Closed Principle 원칙 위반 -> 유지보수 Down
          FC는 yml(Config) 만 바꿔도 된다.
      • 2. 단위 테스트 용이성
        • 단위 테스트는 딱 서비스 코드만 테스트 해야한다.
        • 근데 단위 테스트 코드에 Mock 객체를 만들 때 RestTemplate 설정 넣어주고.. 막 한다면 이것도 상당히 객체지향적이지 않은 코드가 된다.
      • 3. 예외 처리
        • 만약 Client끼리 통신을 하다 예외가 발생한다면, 타 Client 에게 요청을 보낸 Client는 요청을 받지 못하여 500 에러를 발생시킨다.
        • 500 에러를 받은 Client 가 400 번대를 반환하고 싶을 때 어떻게 해야할까?
        • RT - try-catch
        • FC - ErrorDecoder 예외 핸들러 제공
    • 그냥 Feign Client 쓰자!
  • Eureka 연동: 서비스 인스턴스 목록 동적 조회 및 로드밸런싱
  • 자동 로드 밸런싱: 내부에 Ribbon이 들어있어 자동 로드밸런싱 실행

Ribbon이란

  • Netflix 가 개발한 클라이언트 사이드 로드 밸런서
  • 다양한 로드 밸런싱 알고리즘 지원, Eureka와 같은 서비스 디스커버리와 연동 가능

주요 특징

  • 서버 리스트 제공자: Eureka 등과 같은 서비스 디스커버리에서 인스턴스 리스트를 제공받아 사용
  • 로드 밸런싱 알고리즘: 라운드 로빈, 가중치 기반 등 다양한 로드 밸런싱 알고리즘 지원
  • Failover: 요청 실패 시 다른 인스턴스로 자동 전환

API 게이트웨이 (feat. Spring Cloud Gateway)

API 게이트웨이란

  • 클라이언트의 요청을 받아 백엔드 서버로 라우팅(주), 다양한 부가 기능 제공(부)
  • 클라이언트와 서비스 간 단일 진입점 역할, 보안, 로깅, 모니터링, 요청 필터링 등 처리

주요 기능

  • 라우팅: 클라이언트 요청을 적절한 서비스로 전달
  • 인증 및 권한 부여: 요청의 인증 및 권한 검증
  • 로드 밸런싱: 여러 서비스 인스턴스 간의 부하 분산
  • 모니터링 및 로깅: 요청 및 응답을 로깅하고 모니터링
  • 요청 및 응답 변환: 요청과 응답을 변환하거나 필터링

Spring Cloud Gateway

  • Spring 프로젝트의 일환으로 개발된 API 게이트웨이, 클라이언트 요청을 적절한 서비스로 라우팅 및 다양한 필터링 기능 제공

주요 특징

  • 동적 라우팅: 요청의 URL 패턴에 따라 동적으로 라우팅
  • 필터링: 요청 전후에 다양한 작업 수행할 수 있는 필터 체인 제공
  • 모니터링: 요청 로그 및 매트릭을 통한 서비스 모니터링
  • 보안: 인증 및 권한 검증

Application 설정 예시


      
spring.cloud.gateway.discovery.locator.enabled = true # 서비스 디스커버리를 통해 동적으로 라우트 생성
spring.cloud.gateway.routes.id = "product-service" # 라우트 식별자
spring.cloud.gateway.routes.uri = "lb://product-service" # "product-service" 라는 이름으로 로드 밸런싱된 서비스
spring.cloud.gateway.routes.pridicates = "Path=/product/**" # product/** 로 들어오는 모든 요청 라우트 처리

 

Spring Cloud Gateway Filtering

  • 종류
    • Global Filter: 모든 요청에 대한 필터
    • Gateway Filter: 특정 라우트에 대한 필터
  • Filter 구현 방법
    • 위 2 종류 중 1 택 후 구현체 설정, filter 메서드 오버라이드
  • 필터 주요 객체
    • Mono
      • 리액티브 프로그래밍에서 0 또는 1개의 데이터를 비동기적으로 처리
      • Mono<Void> 는 아무 데이터도 반환하지 않음을 뜻함
    • ServerWebExchange
      • HTTP 요청 및 응답을 캡슐화한 객체
    • GatewayFilterChain
      • GatewayFilterChain 은 여러 필터를 체인처럼 연결
      • chain.filter(exchange) -> 다음 필터로 요청 전달
  • 필터 시점 별 종류
    • PreFilter
      • 요청 전 필터
    • PostFilter
      • 응답 전 필터
저작자표시 (새창열림)

'TIL' 카테고리의 다른 글

TIL 2024-08-12 VO와 JPA를 쓰면서 컨버터에 대한 깨달음  (2) 2024.08.12
TIL 2024-08-08 Feign Client 더 잘 써보기  (0) 2024.08.08
TIL 2024-08-05 다익스트라 알고리즘  (0) 2024.08.06
TIL 2024-08-02 SQLD 공부 - 오라클에서의 Group By 오류  (0) 2024.08.02
TIL 2024-08-01 SQLD 공부 - NOT 연산은 드모르간 법칙을 이용하면 쉽당  (0) 2024.08.01
  1. 서비스 디스커버리 (feat. Eureka)
  2. Eureka란
  3. 클라이언트 사이드 로드 밸런싱 (feat. FeignClient, Ribbon)
  4. 로드 밸런싱이란
  5. 클라이언트 로드 밸런싱이란
  6. FeignClient란
  7. 주요 특징
  8. Ribbon이란
  9. 주요 특징
  10. API 게이트웨이 (feat. Spring Cloud Gateway)
  11. API 게이트웨이란
  12. 주요 기능
  13. Spring Cloud Gateway
  14. 주요 특징
  15. Spring Cloud Gateway Filtering
'TIL' 카테고리의 다른 글
  • TIL 2024-08-12 VO와 JPA를 쓰면서 컨버터에 대한 깨달음
  • TIL 2024-08-08 Feign Client 더 잘 써보기
  • TIL 2024-08-05 다익스트라 알고리즘
  • TIL 2024-08-02 SQLD 공부 - 오라클에서의 Group By 오류
wonow_
wonow_
꾸준히 성장하는 개발자 WONOW 입니다. 🤗
wonow_
wonow_
wonow_
전체
오늘
어제
  • 분류 전체보기
    • Language
      • JAVA
    • TIL
    • 코딩테스트
      • 프로그래머스
      • 백준
    • 프로젝트
      • JAVA
      • Spring
    • 기타
    • ERROR
      • Spring
    • CS
      • 알고리즘
      • DB
      • Kafka
    • 잡담
    • 활동
      • 척척박사

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • 프로그래머스
  • 티스토리 꾸미기
  • 문자열 돌리기
  • 나는바봉가봉가
  • 공부열심히하자
  • 오블완
  • 홀짝 구분하기
  • 티스토리챌린지
  • 문자열 붙여서 출력하기

최근 댓글

최근 글

hELLO · Designed By 정상우.v4.2.1
wonow_
TIL 2024-08-06 Spring MSA 라이브러리
상단으로

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.