갑자기 왜 Spring Cloud Gateway?
Spring Cloud Gateway를 배우기 시작한건 MSA의 관심이 커서이다.
MSA는 마이크로 소프트 아키텍처의 약자로 한 어플리케이션의 기능을 여러개로 쪼갠뒤,
기능마다 독자적인 서버(포트)를 열어 서비스하는 방식이다.
Spring Cloud Gateway는 이 MSA 구축을 가능케하는 Java 기술이다.
Route
API Gateway에서 가장 기본이 되는 요소로 요청할 서비스의 고유한 값인 id, 요청할 uri, Predicate, Filter로 구성되어 있습니다. 요청된 uri의 조건이 predicate와 일치하는지 확인 후, 일치하는 경우 해당 uri 경로로 요청을 매칭 시켜줍니다.
Predicate
API Gateway로 들어온 요청이 주어진 조건을 만족하는지 확인하는 구성요소입니다.
하나 이상의 조건을 정의할 수 있으며, 만약 Predicate 조건에 맞지 않는 경우 HTTP 404 Not Found 응답을 반환합니다.
Filter
API Gateway로 들어오는 요청에 대해 Filter를 적용하여 선처리 및 후처리를 할 수 있게 해주는 구성요소입니다.
이제 이론은 이정도만, 진짜 사용해봐서 감을 익혀보자.
start.spring.io 를 통해 프로젝트를 하나 실행해보자.
Gateway를 한번 체험해 보기위해 저 라이브러리만 의존시키자.
Gateway
Main에다가 gateway를 하나 선언해보자
route를 사용하여,
localhost:8080/ => naver
localhost:8080/drive => google
localhost:8080/groups => facebook
을 설정했다.
.routes() : 라우터들 선언
.route(): 이동할 라우터를 설정 (id, Func)
path : 접근 경로 설정
uri: 기본 uri 설정
filter (X)
실제 실행시키고 경로를 입력해보면, 해당 uri 로 이동한다.
필터를 적용을 안하면 uri+ path로 이동한다.
필터를 적용한 Gateway
Naver 라우터
path: "/naver/{param}" 으로 접근 => localhost:8080/naver/{param} 으로 시작
uri : http://search.naver.com
fliter 적용
rewritePath("/naver(?<segment>)/?.*","/search.naver") => 경로를 다시 써주는 메소드이다.
여기서 REGEX로 쓰인 (?<segmet>)/?.* 이게 잘 이해가 안될텐데..
한마디로 보면 여러가지 파라미터들이다. 여기선 {param}이다.
즉,
1. /naver/ {param} 을 입력받는다.
2. /naver/{param}형태를 fliter가 (REGEX 패턴) 인식함 , 인식했으면 /naver/{param}을 /search.naver로 변환
3. 쿼리 파라미터를 던진다. query = {param}
4. 조합하면, uri + 2번 +3번
여기선 http://search.naver.com/search.naver?query={param} 으로 다시써준다.
구글 라우터도 이와 동일다.
여기까지가 Spring Cloud Gateway의 기본이다.
이 Gateway를 MSA와 접목시킨다면 다음과같다.
Spring cloud gateway는 yml, 자바코드 둘다 쓸수있다. 이 코드는 yml형태다.
8085서버 = product 8081 서버 = order , ...
기능들을 서버별로 실행한뒤, 나눠 관리하고있다.
'자바 > 스프링(Spring)' 카테고리의 다른 글
(Java) 공공데이터 API 가져와서 쓰는법 (0) | 2023.03.29 |
---|---|
Spring Eureka (스프링 유레카) 간단 실습 및 예제 (0) | 2023.03.28 |
스프링(Spring) 테스트 환경에서 @PostConstruct 비활성화 (0) | 2022.10.12 |
XSS , CORS, CSRF 의 차이점 (0) | 2022.09.28 |
스프링 시큐리티 + OAuth2.0 (Kakao편) (0) | 2022.09.25 |