Spring Cloud Gateway, Eureka 사용해보기
Eureka란?
Neflix에서 제공하는 MSA를 위한 클라우드 오픈 소스입니다.
정의는 LB 와 Middle-tier server에 에러 대응을 위한 REST 기반 서비스입니다.
Eureka를 왜 쓸까?
LB는 MSA의 각 모듈에 대한 연결 정보(ip,host,hostname)을 알고 있어야한다.
그리고 각 모듈의 연결정보를 LB에 등록을 해야 한다.
CI/CD를 수행하게 되면서 모듈이 업데이트가 되고, 수정되며 그 과정을 통해 연결정보가 바뀌게 된다.
그럴때마다 연결정보를 찾아서, 다시 연결정보를 업데이트해주고 하기가 너무나 번거롭다.
그래서 나온게 Eureka이다.
Eureka는 LB에 연결 정보 등록을 유연하게 처리해준다.
등록과 해지를 곧바로 적용할 수 있게 해준다.
사용해보자
준비물
● module-eureka : eureka서버로 등록할 모듈
● module-first : 1번서버 (테스트용도)
● module-gateway : gateway 서버
● module-second : 2번서버 (테스트용도)
[module-eureka]
build.gradle
ext {
set('springCloudVersion', "2021.0.4")
}
dependencyManagement {
imports {
mavenBom "org.springframework.cloud:spring-cloud-dependencies:${springCloudVersion}"
}
}
dependencies {
implementation 'org.springframework.cloud:spring-cloud-starter-netflix-eureka-server'
}
ModuleEurekaApplication.java
@EnableEurekaServer 를 추가해준다.
이 프로젝트는 유레카 서버로 사용하겠다 라는 뜻입니다.
application.yml
management.endpoints.web.exposure.include는 Actuator 엔드포인트의 대한 접근 허용수준을 설정해주는 기능인데
우리는 연습용이기에 * 로 전체허용을 해준다.
설정이 다 되었으면 서버를 구동시킨다.
http://localhost:8761/ 로 접속한다.
접속하게 되면 위에 그림과같이 UI가 보인다.
[module-first]
ModuleFirstApplication.java
application.yml
유레카 서버에 클라이언트로 등록하는 코드입니다.
FirstController.java
간단하게 문자열을 반환하는 API를 만들었습니다.
[module-second] (module-first) 와 세팅이 동일함으로 설명을 생략합니다.
ModuleSecondApplication.javva
application.yml
SecondController.java
유레카에 1번,2번서버가 잘등록되어있는지 확인하기
화면과 같이 등록이 잘 되었습니다.
[module-gateway]
이 설정은 spring cloud gateway를 사용하여 API 게이트웨이를 구성하는 설정입니다.
먼저 gateway도 유레카서버에 등록을 시켜줍니다.
id -> 식별값 설정입니다.
uri -> 실제 사용할 url 입니다. lb:// 는 spring cloud의 로드 밸런서를 지칭하는 프로토콜입니다.
predicates -> 요청경로에 대한 조건을 거는 곳입니다.
filters: 요청에 대한 필터를 정의합니다. (first-request 및 first-response 헤더를 추가했습니다.)
이런식으로 설정을 해주면 됍니다.
동작확인하기
module-gateway이 8000포트로 설정되어있기때문에 8000포트로 요청을 해야합니다.
module-gateway 에서 라우팅 설정을 해줬기 때문 입니다.
게이트웨이를 통해 유레카에 등록되있는 서버의 정보를 읽어 올바르게 라우팅해주는 것을 확인할수 있습니다.