## 0. 게이트웨이 서버 프로젝트 생성 ![[Pasted image 20231221160829.png]] - [스프링 부트 프로젝트 생성 페이지](https://start.spring.io/)에서 프로젝트를 생성한다. ```yml server: port: 8000 spring: application: name: gateway-server cloud: gateway: routes: - id: configservertest uri: http://localhost:8001 predicates: - Path=/print/** - id: eureka uri: http://localhost:8002 predicates: - Path=/eureka ``` - `application.properties`를 `application.yml`로 확장자를 변경한 다음 위의 코드를 입력한다. - `spring.cloud.gateway.routes` 설정은 게이트웨이를 통해 어떻게 라우팅하는지에 대한 설정이다. 설정 방식은 API 프록시 설정 방법과 똑같다. - 위 설정을 중 `configservertest`를 예로 들어보자. - 클라이언트가 `http://localhost:8000/print/hello`로 요청을 보내면 게이트웨이는 `predicates`인 `/print/hello`를 통해 라우팅 경로를 찾는다. - `/print/hello`는 `/print/**`에 속하기 때문에 라우팅 경로는 `http://localhost:8001`에 해당한다. - 게이트웨이는 `http://localhost:8001/print/hello`로 요청을 보내고 받은 응답을 클라이언트에게 전달한다. ## 1. 게이트웨이 테스트 ```java @RestController public class PrintController { @GetMapping("/print/{text}") public String printText(@PathVariable("text") String text) { return text; } } ``` - 현재 [[7. Spring Cloud Config를 통한 Config 관리#5. Config 서버 테스트|Config 서버 테스트 서버]]에 `/print/**` 요청을 처리할 컨트롤러가 없다. 케이트웨이가 정상적으로 요청을 분류하는지 테스트하기 위해 컨트롤러를 생성하자. ![[Pasted image 20231221165848.png]] - 컨트롤러를 생성한 다음 재기동한다. 그리고 `http://localhost:8000/print/hello`로 접속하면 게이트웨이가 정상 작동하고 있는 걸 확인할 수 있다. ## 2. 게이트웨이와 Eureka 서버 연동 ```groovy implementation 'org.springframework.cloud:spring-cloud-starter-netflix-eureka-client' ``` - 게이트웨이 서버에 Eureka 클라이언트 의존성을 추가한다. ```yml eureka: client: register-with-eureka: true fetch-registry: true service-url: defaultZone: http://eureka-manager:qwerty123@localhost:8002/eureka ``` - 게이트웨이 서버의 설정에 위 Eureka 클라이언트 설정을 추가한다. 사용하는 Eureka 서버는 이전에 만든 [[8. Spring Cloud Eureka를 통한 마이크로서비스 모니터링|Eureka 서버]]와 같다. ```yml spring: application: name: gateway-server cloud: gateway: routes: - id: configservertest uri: lb://CONFIGSERVERTEST # before : http://localhost:8001 predicates: - Path=/print/** ``` ![[Pasted image 20231221171352.png]] - 라우팅 설정에서 uri를 `lb://[애플리케이션 name]`으로 변경한다. 여기서 `lb`는 로드밸런서를 의미한다. ## 3. Eureka 서버 연동 테스트 이제 Eureka 서버 연동을 테스트해보자. Eureka를 통해 로드밸런싱이 되고 있다는 걸 확인하기 위해서는 요청을 받은 서버의 Origin을 확인할 수 있어야 한다. 현재 호스트는 `localhost`로 같으니 포트 번호로 서버를 구분할 것이다. ```java @RestController public class PrintController { @GetMapping("/print/{text}") public String printText( @PathVariable("text") String text, @Value("${server.port}") String port) { return "Server is running on port: " + port + "\n Text: " + text; } } ``` ![[Pasted image 20231221174605.png]] - 현재 포트 번호도 텍스트와 함께 출력하도록 서블릿을 수정하자. 포트 번호는`@Value` 어노테이션을 통해 받아올 수 있다. ```powershell cd [Config 서버 테스트 서버 프로젝트 디렉터리] ./gradlew bootjar ``` ![[Pasted image 20231221172038.png]] - 이제 서버를 수동으로 [[IT 용어 정리 📕#`스케일아웃`|스케일아웃]]해보자. - 위 명령어를 통해 Jar 파일을 생성한 다음 Jar 파일로 애플리케이션을 실행할 것이다. ![[Pasted image 20231221172824.png]] ```powershell java -jar '-Dserver.port=[포트 번호]' [jar 파일 경로] ``` - 위 사진처럼 powershell을 3개 실행한 서로 포트 번호를 다르게 하여 Jar 파일을 실행한다. ![[Pasted image 20231221172957.png]] - Eureka 페이지에 들어가보면 위처럼 원래 실행되고 있던 서버와 방금 실행한 서버 3개가 동시에 실행되고 있다. 이 서버 4개의 상태를 고려하여 Eureka 서버는 로드밸런싱을 할 것이다. ![[ezgif-4-c0821f54cc.gif]] - `http://localhost:8000/print/hello`로 접속하면 로드밸런싱이 잘 작동되고 있는 것을 확인할 수 있다.