MSA

Spring Cloud Gateway, Eureka 사용해보기

초록색거북이 2024. 4. 18. 11:32
728x90
반응형
SMALL

 

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 에서 라우팅 설정을 해줬기 때문 입니다.

 

 

게이트웨이를 통해 유레카에 등록되있는 서버의 정보를 읽어 올바르게 라우팅해주는 것을 확인할수 있습니다.

728x90
반응형
LIST