Spring Cloud Eureka
๋ง์ดํฌ๋ก์๋น์ค ํ๊ฒฝ์์ ์๋น์ค ๋ฑ๋ก ๋ฐ ์์น ์กฐํ๋ฅผ ๊ด๋ฆฌํ๋ ์๋น์ค ๋์ค์ปค๋ฒ๋ฆฌ ์๋ฒ
์๋น์ค๊ฐ ์ฌ๋ฌ ๊ฐ๋ก ๋ถ๋ฆฌ๋ ํ๊ฒฝ์์๋
๊ฐ ์๋น์ค์ IP / Port๋ฅผ ์ง์ ๊ด๋ฆฌํ๊ธฐ ์ด๋ ค์
์๋น์ค๊ฐ ์คํ๋ ๋ ์๋์ผ๋ก Eureka Server์ ๋ฑ๋ก๋๊ณ
๋ค๋ฅธ ์๋น์ค๊ฐ ํ์ํ ์๋น์ค์ ์์น๋ฅผ ์กฐํํ ์ ์๋๋ก ์ง์
Spring Cloud ํ๋ก์ ํธ ์์ฑ
https://start.spring.io/
์๋น์ค๊ฐ ์คํ๋ ๋ Eureka Server์ ์์ ์ ์ ๋ณด๋ฅผ ๋ฑ๋ก
Eureka Server
Eureka Client
์๋น์ค๊ฐ ๋ค๋ฅธ ์๋น์ค๋ฅผ ํธ์ถํ ๋
Eureka Server๋ฅผ ํตํด ์๋น์ค ์์น ์กฐํ
Client โ ์ง์ ์๋น์ค ์ฃผ์ ํธ์ถ
Client โ Eureka Server โ Service Instance
์๋น์ค ํธ์ถ ์ ๋ก๋๋ฐธ๋ฐ์ฑ ์ ์ฉ ํ์
@LoadBalanced
RestTemplate
ํน์ง
ํ์ง๋ง ํ์ฌ ํ๋ก์ ํธ์์๋ RestTemplate ๋ฐฉ์ ์ฌ์ฉํ์ง ์์
์ธํฐํ์ด์ค ๊ธฐ๋ฐ HTTP Client
ํน์ง
๊ตฌ์กฐ
Client โ Feign Client โ Eureka โ Target Service
์์ ์ฝ๋
@FeignClient(name = "store-service")
public interface StoreClient {
@GetMapping("/stores/{id}")
StoreResponse getStore(@PathVariable Long id);
}
์ค๋ช
name ๊ฐ์ด ์๋น์ค ์ด๋ฆEureka๋ ์๋น์ค ์ํ๋ฅผ ํฌ์ค ์ฒดํฌ ๊ธฐ๋ฐ์ผ๋ก ๊ด๋ฆฌ
/actuator/health
Service โ Eureka Server โ ์ํ ๋ณด๊ณ
Eureka๊ฐ ํด๋น ์ธ์คํด์ค๋ฅผ ์๋น์ค ๋ชฉ๋ก์์ ์ ์ธ
๋ค๋ฅธ ์ ์ ์ธ์คํด์ค๋ก ํธ๋ํฝ ์ ๋ฌ
ํจ๊ณผ
Service Instance โ Eureka Server ๋ฑ๋ก
Client Service
โ
Eureka Server (์๋น์ค ์์น ์กฐํ)
โ
Target Service Instance
Feign Client ์ฌ์ฉ ์
Client โ Feign Client โ Eureka โ Target Service
@SpringBootApplication
@EnableEurekaServer
public class EurekaServerApplication {
public static void main(String[] args) {
SpringApplication.run(EurekaServerApplication.class, args);
}
}
spring.application.name=eureka-server
server.port=19090
eureka.client.register-with-eureka=false
eureka.client.fetch-registry=false
eureka.client.service-url.defaultZone=http://localhost:19090/eureka/
์ค๋ช
Eureka Server๋ ์๋น์ค ๋ฑ๋ก ์๋ฒ ์ญํ
์๊ธฐ ์์ ์ ๋ฑ๋กํ์ง ์๊ธฐ ๋๋ฌธ์ false ์ค์ ์ฌ์ฉ
@SpringBootApplication
@EnableDiscoveryClient
public class FirstServiceApplication {
public static void main(String[] args) {
SpringApplication.run(FirstServiceApplication.class, args);
}
}
spring.application.name=first-service
server.port=19091
eureka.client.service-url.defaultZone=http://localhost:19090/eureka/
๋ ๋ฒ์งธ ์๋น์ค ์์
spring.application.name=second-service
server.port=19092
eureka.client.service-url.defaultZone=http://localhost:19090/eureka/
๋ง์ดํฌ๋ก์๋น์ค ํ๊ฒฝ์์ ์๋น์ค ํธ์ถ ๊ด๋ฆฌ
์์ ๊ตฌ์กฐ
Client
โ
API Gateway
โ
Microservices
Microservices
์๋น์ค ๋ฑ๋ก ๊ตฌ์กฐ
๊ฐ ์๋น์ค โ Eureka Server ๋ฑ๋ก
์๋น์ค ํธ์ถ
Service โ Eureka โ ๋ค๋ฅธ ์๋น์ค ํธ์ถ
์๋น์ค IP ๋ณ๊ฒฝ์ด๋ ์ธ์คํด์ค ์ถ๊ฐ ์
Eureka๊ฐ ์๋์ผ๋ก ๊ด๋ฆฌ
Eureka Server ์คํ ํ ๋ธ๋ผ์ฐ์ ์ ์
http://localhost:19090/
๋๋
http://localhost:19090/eureka/
Instances currently registered with Eureka
์ฌ๊ธฐ์ ๋ค์ ์๋น์ค๊ฐ ๋ณด์ด๋ฉด ์ ์ ๋ฑ๋ก
FIRST-SERVICE
SECOND-SERVICE
์ฆ
์ธ์คํด์ค๊ฐ ํ์๋๋ฉด Eureka Client ๋ฑ๋ก ์ฑ๊ณต