티스토리 뷰

자바/MSA

SpringCloud Gateway 연동

UroJem 2023. 12. 18. 19:49

Spring Cloud Gateway

Gateway란 클라이언트의 요청을 직접받아 직접 서비스 모듈에서 처리하는 것이 아닌 Gateway에서 모든 요청을 받아 공통된 로직처리, 인증 및 인가, 로드밸런싱, 라우팅등을 처리 하고 알맞은 요청을 각 서비스에 분산시키는 역할을 한다.

 

Spring Cloud Gateway는 Spring 생태계 기반의 API Gateway를 제공해주는 라이브러리로 간단하지만 효율적인 방법으로 API를 라우팅하는 방법을 제공한다.

 

작동 원리

클라이언트가 Spring Cloud Gateway에 요청하면 Gateway Handler Mapping에서 요청이 경로와 일치한다고 판단한 경우 Gateway Web Handler로 요청이 전송된다.

이 핸들러는 요청과 관련된 Filter Chain을 통해 요청을 실행 후 서비스에 대한 proxy 처리가 이루어진다.

 

proxy 처리란? 요청 액세스 처리를 먼저 대신 받아서 전처리를 진행하고 원하는 서비스로 전달한다.

 

 

마이크로서비스 A와 B에 대해 공통 처리 로직을 위해 Gateway에 여러 Filter를 사용한다.

Gateway를 통해 마이크로서비스 로드밸런싱 처리를 하며 동일한 서비스에 대해 고정 포트값이 아닌 랜덤한 포트번호를 사용하여 중복 포트사용 오류를 피하고 여러 서비스 요청을 분산하여 처리하도록 만들 수 있다.

로드밸런싱이란 동일한 마이크로서비스를 여러 대 구축해서 요청데이터 처리에 대해 분산처리할 때 사용하는 기술이다.

 

이 랜덤한 포트들을 찾아가는 방법은 Eureka에 서비스 정보가 등록되면 binding된 서비스의 포트 정보를 가지고 있다.

클라이언트가 요청을 주면 Gateway가 먼저 받아서 Eureka에 등록된 서비스 정보를 조회하여 해당 서비스로 요청 데이터를 전달하게 된다.

 

 

Gateway 모듈 생성

item-service에 bootstrap.yml 포트번호를 0으로 바꿔주면 랜덤한 사용가능한 포트값으로 변경된다.

 

모듈 추가

모듈 설정

라이브러리 추가 config와 bootstrap은 별도로 의존성 추가해야 에러가 없다.

 

gateway-server에 application.properties 파일을 bootstrap.yml 으로 변경

 

gateway-server는 포트번호 8070으로 실행하고 config-server와 연동하고 actuator 사용을 위한 설정을 작성해준다.

 

config-server에 gateway-server-local.yml 설정 파일 추가

 

  • spring.cloud.gateway.routes: 요청 URI에 대해 어떤 마이크로서비스로 요청 데이터를 전달할지 라우팅 지정
  • spring.cloud.gateway.routes.id: 라우팅 구분 식별 id
  • spring.cloud.gateway.routes.uri: 이동할 마이크로서비스명(lb:로드밸런싱 약자)
  • spring.cloud.gateway.routes.predicates: -Path 설정은 실제 요청 들어온 URI 주소

 

 

서버 실행 순서

  1. config-server
  2. eureka-server
  3. gateway-server
  4. item-service

 

item-service 포트가 랜덤하게 생성됨을 확인

 

eureka 대시보드에 gateway-server가 잘 실행됨을 확인

 

 

이제 물품등록 요청을 테스트해본다. 기존 item-service에 지정된 포트였던 5000번을 gateway-server인 8070으로 변경한다.

성공적

 

로드밸런싱 확인을 위해 item-service을 1개 더 띄운다.

 

총 item-service가 2개 실행되었지만 Eureka 대시보드에 실행상태는 1개밖에 표시되지 않느다.

서비스 인스턴스 id가 유일값이어야 하나 지금은 서비스 명인 'item-service'로 지정되어있기 때문에 유일키로 변경해야한다.

 

 

config-server에 item-service-local.yml 파일을 열어 eureka 설정에 instance-id를 추가한다.

호스트명과 random 포트값을 합쳐서 id로 지정하는 설정이다.

 

서비스 2개를 띄우기 위해 item-service main을 실행시킬 부트를 하나 더 추가하였다.

 

 

대시보드에 item-service가 2개 실행된 것 확인

 

 

로드밸런싱 처리 확인

gateway-server로 물품등록 요청을 2번 실행시킨다.

 

itemService2 콘솔에 첫 요청으로 insert 되었고

intemServiceApplication 콘솔에 두번째 요청으로 update가 된 것을 확인

 

 

 

https://www.inflearn.com/course/java-msa-%ED%94%84%EB%A1%9C%EC%A0%9D%ED%8A%B8-%EC%8B%A4%EC%8A%B5/dashboard

 

Java 마이크로서비스(MSA) 프로젝트 실습 강의 - 인프런

Java SpringCloud와 여러 오픈소스를 연동하여 마이크로서비스를 구축하는 세미 프로젝트를 경험해보실 수 있습니다. 마이크로서비스 구축 경험을 해보고 싶으시다면 이 강의를 추천할게요!, 마이

www.inflearn.com

 

https://mangkyu.tistory.com/230

 

[Spring] Spring Cloud Gateway(스프링 클라우드 게이트웨이) 공식 문서 간단히 살펴보기 및 리서치 후기

아래의 내용은 Spring Cloud Gateway의 공식 문서를 보고 요약 정리한 내용입니다. 1. Spring Cloud Gateway 공식 문서 간단히 살펴보기 [ Spring Cloud Gateway란? ] Spring 생테계를 기반으로 하는 API Gateway를 제공해

mangkyu.tistory.com

 

https://docs.spring.io/spring-cloud-gateway/docs/current/reference/html/

 

Spring Cloud Gateway

This project provides an API Gateway built on top of the Spring Ecosystem, including: Spring 6, Spring Boot 3 and Project Reactor. Spring Cloud Gateway aims to provide a simple, yet effective way to route to APIs and provide cross cutting concerns to them

docs.spring.io

 

https://yoonchang.tistory.com/86

 

[Spring Cloud Gateway] 스프링 클라우드 게이트웨이란?

[주의] 개인 공부를 위해 쓴 글이기 때문에 주관적인 내용은 물론, 쓰여진 정보가 틀린 것일 수도 있습니다! 피드백 부탁드립니다. (- -)(_ _) 꾸벅 1. API Gateway 백엔드 시스템 및 서비스에 대한 액세

yoonchang.tistory.com

 

'자바 > MSA' 카테고리의 다른 글

JWT를 활용한 인증키 발급  (0) 2023.12.31
Gateway Logging 구현  (0) 2023.12.21
Eureka와 마이크로서비스 연동  (1) 2023.12.17
Eureka와 Config 연동  (0) 2023.12.17
SpringCloud Config 활용  (0) 2023.12.11
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/05   »
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31
글 보관함