2024. 10. 29. 21:36ㆍSpring Boot
Eureka는 서비스 레지스트리와 서비스 디스커버리를 제공하는 역할을 한다.
우리는 API Gateway를 통하여 다양한 서비스에 접속한다.
그런데 서비스의 상태가 정적일 경우는 고정된 주소로 찾아가면 되지만
서비스의 주소가 바뀌면 API Gateway에 등록된 주소 또한 바뀌어야 한다.
그리고 이러한 일은 AutoScaling, 생성 삭제, 확장등을 이유로 자주 일어난다.
이럴 때 필요한 것이 Service Discovery이다.
우선 Service Registry에 최신의 서비스의 IP와 Port 정보가 저장된다.
그 후 Service Discovery는 요청에 알맞은 서비스의 정보를 제공한다.
API Gateway를 Eureka에 연동함으로서 서비스 IP와 Port가 변경되더라도 문제 없이 서비스를 제공할 수 있다.


Eureka Server 구축
ext {
set('springCloudVersion', "2023.0.3")
}
implementation 'org.springframework.cloud:spring-cloud-starter-netflix-eureka-server'
dependencyManagement {
imports {
mavenBom "org.springframework.cloud:spring-cloud-dependencies:${springCloudVersion}"
}
}
기본적으로 netflix eureka server를 implement한 프로젝트를 새로 만든다.
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer;
@SpringBootApplication
@EnableEurekaServer
public class EurekaApplication {
public static void main(String[] args) {
SpringApplication.run(EurekaApplication.class, args);
}
}
그 후 기존의 main 코드에 @EnableEurekaServer를 추가한다.
spring.application.name=eureka
server.port=8761
# eureka registry에 자신을 등록시킬 것인가
eureka.client.register-with-eureka=false
# eureka registry 레지스트리에 있는 정보를 가져올 것인가
eureka.client.fetch-registry=false
이제 Eureka에 서비스를 등록시켜 보겠다
기존의 API를 제공하는 서비스에 netfix eureka client를 추가한다
ext {
set('springCloudVersion', "2023.0.3")
}
implementation 'org.springframework.cloud:spring-cloud-starter-netflix-eureka-client'
dependencyManagement {
imports {
mavenBom "org.springframework.cloud:spring-cloud-dependencies:${springCloudVersion}"
}
}
그 후 main 클래스에 @EnableDiscoveryClient를 추가한다
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
@SpringBootApplication
@EnableDiscoveryClient
public class MicroServiceApplication {
public static void main(String[] args) {
SpringApplication.run(MicroServiceApplication.class, args);
}
}
spring.application.name=microService
server.port=0
eureka.instance.instance-id = ${spring.cloud.client.hostname}:${spring.application.instance_id:${random.value}}
eureka.client.register-with-eureka = true
eureka.client.fetch-registry = false
eureka.client.service-url.defaultZone = http://127.0.0.1:8761/eureka
마지막으로 properties를 수정한다
이제 주소와 Port는 자동으로 API Gateway에 등록되고 이 값을 API Gateway에서 읽어오니
port를 0으로 지정해서 랜덤 포트를 사용하도록 한다.
이제 API Gateway도 Eureka client로 등록하기 위해서 netfix eureka client를 추가한다
ext {
set('springCloudVersion', "2023.0.3")
}
implementation 'org.springframework.cloud:spring-cloud-starter-netflix-eureka-client'
dependencyManagement {
imports {
mavenBom "org.springframework.cloud:spring-cloud-dependencies:${springCloudVersion}"
}
}
그 후 설정에 들어가서
# eureka registry에 자신을 등록시킬 것인가
eureka.client.register-with-eureka=true
# eureka registry 레지스트리에 있는 정보를 가져올 것인가
eureka.client.fetch-registry=true
eureka.client.service-url.defaultZone = http://localhost:8761/eureka
원하는 eureka에 등록하고 정보를 가져오게 설정한 뒤
기존의 URL을 lb:// + 등록한 서비스 이름으로 바꾼다.
spring.cloud.gateway.routes[0].uri=lb://MICROSERVICE

이러면 이제 Eureka에 등록된 서비스의 주소를 가져와서 요청을 넣고 받는다.

그래서 이렇게 랜덤 포트로 설정해서 무작위 포트에 열려있는데도 값을 받아 올 수 있다.
'Spring Boot' 카테고리의 다른 글
| JPA Paging (0) | 2024.11.28 |
|---|---|
| JPQL (0) | 2024.11.28 |
| Spring Cloud Gateway Filter (0) | 2024.10.29 |
| Spring Cloud Gateway (2) | 2024.10.25 |
| Redis Cache (0) | 2024.10.11 |