[스프링 MSA] MSA_S2 : API Gateway Service (2)
`Spring Cloud로 개발하는 마이크로서비스 애플리케이션 (MSA)` 강의를 듣고 정리한 자료입니다
✨ Spring Cloud Gateway - Custom Filter
- JWT = Json Web Token
- ServerHttpRequest, ServerHttpResponse 활용
오류 발생 이유
1. 내부 클래스로 Config 존재 X
2. 구현시켜야 할 메소드 존재 X
메소드 구현 (apply)
@Override
public GatewayFilter apply(Config config) {
return null;
}
import org.springframework.http.server.reactive.ServerHttpRequest;
import org.springframework.http.server.reactive.ServerHttpResponse;
- 가져올 때 reactive가 포함되어 있어야 한다
Mono 객체
// Custon Post Filter
return chain.filter(exchange).then(Mono.fromRunnable(() -> {
log.info("Custom PRE filter: response code -> {}", response.getStatusCode());
}));
- Spring5에 추가되어 있는 기능
- 비동기 방식의 서버 지원 시 사용
✨ Spring Cloud Gateway - Global Filter
- 어떠한 라우터 정보가 실행된다 하더라도 공통적으로 시행되는 필터라는 점에서 Custom Filter과 차이점이 두드러진다.
-> Custom Filter : 라우터에 개별적으로 등록해야함 (yml 파일에 개별적으로 지정)
- Global Filter : 일반 필터와 동일하게 만들지만 개별적이 아닌 공통적으로 등록됨
- Config에 환경 설정 정보 등록 가능 <- (application.yml 파일) : 전달하고자 하는 파라미터 등록
-> baseMessage
-> preLogger
-> postLogger
Test
- 모든 필터의 가장 첫 번째에 시작되고, 가장 마지막에 종료
- ex_Global Filter Start -> Custom filter -> Global Filter End
- 외부 데이터를 가져와 Microservice가 갱신되지 않도록 작업도 가능하다
✨ Spring Cloud Gateway - Custom Filter (Logging)
- AbstarctGatewayFilterFactory 상속
- apply 메소드 구현
- 순서 : Gateway Client -> Gateway Handler -> Global Filter -> Custom Filter -> Logging Filter -> Proxied Service (끝나면 역순)
-> CustomFilter 밑에 Logging Filter 해둠 (application.yml)
- OrderedGatewayFilter filter 메소드 재정의
- Logging이 먼저 온 이유는?
-> 필터의 우선순위를 변경했기 때문
-> 1순위 실행 : Ordered.HIGHEST_PRECEDENCE
-> 1순위 실행 : Ordered.LOWEST_PRECEDENCE
✨ Spring Clou Gateway - Load Balancer
Eureka 연동
1. Eureka Client 추가 (pom.xml, application.yml에 설정 정보 넣기)
-> lb://~ uri 변경 (네이밍 서버로 포워딩시켜준다)
2. Eureka Server - Service 등록 확인
두 개의 서비스 기동
1. VM Options -> -Dserver.port=[다른포트]
2. $mvn spring-boot:run -Dspring-boot.run.jvmArguments='-Dserver.port=9003'
-> 랜덤 포트인 경우 포트번호를 작성할 필요가 없다
-> mvn spring-boot:run
3. $mvn clean compile package
$ java -jar -Dserver.port=9004 ./target/user-servic-0.0.1-SNAPSHOT.jar
cmd 창에서 띄우기
1. 디렉토리 이동
2. dir: target 폴더 있는지 확인
✨ E-commerce 애플리케이션
애플리케이션 구성요소
1. Git Repository : 마이크로서비스 소스 관리 및 프로파일 관리
2. Config Server : Git 저장소에 등록된 프로파일 정보 및 설정 정보
3. Eureka Server : 마이크로서비스 등록 및 검색
4. API Gateway Server : 마이크로서비스 부하 분산 및 서비스 라우팅
5. Microservices : 회원 MS, 주문 MS, 상품(카테고리) MS
6. Queuing System : 마이크로서비스 간 메시지 발행 및 구독