๋ทํ๋ฆญ์ค ์ ๋ ์นด(Eureka)๋ฅผ ์ฌ์ฉํ์ฌ ์๋น์ค ๋์ค์ปค๋ฒ๋ฆฌ๋ฅผ ๊ตฌํํด๋ณด์.
์คํ๋ง ๋ถํธ ํ๋ก์ ํธ 2๊ฐ๋ฅผ ๋ง๋ค์ด์ ํ๋๋ ๋์ค์ปค๋ฒ๋ฆฌ ์๋ฒ, ๋ค๋ฅธ ํ๋๋ ๋์ค์ปค๋ฒ๋ฆฌ ํด๋ผ์ด์ธํธ ์ญํ ์ ํ๋๋ก ํ ๊ฒ์ด๋ค.
java 11
spring boot 2.4.9
gradle
๋์ค์ปค๋ฒ๋ฆฌ ์๋ฒ - ์ ๋ ์นด ์๋ฒ
์ฐ์ ๋์ค์ปค๋ฒ๋ฆฌ ์๋ฒ ์ญํ ์ ํ ์คํ๋ง ๋ถํธ ํ๋ก์ ํธ๋ฅผ ๋ง๋ค๊ณ ๋ค์๊ณผ ๊ฐ์ด ์ธํ ํ๋ค.
Dependency
spring-cloud-starter-eureka-server ์์กด์ฑ์ ์ถ๊ฐํ๋ค.
implementation 'org.springframework.cloud:spring-cloud-starter-netflix-eureka-server'
์ ๋ ์นด ์๋ฒ ํ์ฑํ
์คํ๋ง ๋ถํธ ๋ฉ์ธ ํด๋์ค์ @EnableEurekaServer ์ ๋ ธํ ์ด์ ์ ๋ถ์ฌ ์ ๋ ์นด ์๋ฒ๋ฅผ ํ์ฑํํ๋ค.
@EnableEurekaServer
@SpringBootApplication
public class DiscoveryApplication {
public static void main(String[] args) {
SpringApplication.run(DiscoveryApplication.class, args);
}
}
์ ๋ ์นด ์๋ฒ ์ค์
๐ application.yml
server:
port: 8761
spring:
application:
name: eureka-server
eureka:
client:
register-with-eureka: false
fetch-registry: false
์ ๋ ์นด ์๋ฒ๋ ์ผ์ข ์ ์น์๋น์ค์ด๋ค.
์คํ๋ง ๋ถํธ ๋ด์ฅ ์๋ฒ๋ฅผ ํตํด ์๋น์ค๋๋ฏ๋ก server.port๋ก ์ ๋ ์นด ์๋ฒ์ ํฌํธ๋ฅผ ๋ณ๊ฒฝํ ์ ์๋ค.
๋ค์์ ์ดํด๋ณผ ์ ๋ ์นด ํด๋ผ์ด์ธํธ์ ๊ธฐ๋ณธ ๋์ค์ปค๋ฒ๋ฆฌ ์๋ฒ ํฌํธ๊ฐ 8761์ด๋ผ ์ด ํฌํธ๋ฅผ ์ฌ์ฉํ์๋ค.
๋ณดํต ์ ๋ ์นด ์๋ฒ๋ 8761์ ๊ธฐ๋ณธ ํฌํธ๋ก ์ฌ์ฉํ๋ค.
๋๋จธ์ง ์ค์ ์ ๋ค์์ ์ฐธ๊ณ ํ๋ค.
spring.application.name
MSA์์ ์ด ์๋น์ค๋ฅผ ์๋ณํ๋ id์ด๋ค.
eureka.client.register-with-eureka
์ ๋ ์นด ์๋ฒ์ ์๊ธฐ ์์ ์ ํด๋ผ์ด์ธํธ๋ก ๋ฑ๋กํ์ง ์๋๋ก ํ๋ ์ค์ ์ด๋ค.
๋ณธ ํ๋ก์ ํธ๋ ๋์ค์ปค๋ฒ๋ฆฌ ์๋ฒ ์ญํ ์ ํ๋ ์ ๋ ์นด ์๋ฒ์ด๋ฏ๋ก ์๊ธฐ ์์ ์ ํด๋ผ์ด์ธํธ๋ก์จ ๋์ค์ปค๋ฒ๋ฆฌ ์๋ฒ์ ๋ฑ๋กํ์ง ์๋๋ก false๋ก ์ค์ ํ๋ค.
eureka.client.fetch-registry
ํด๋ผ์ด์ธํธ๋ก์จ eureka ์๋ฒ์์ eureka ๋ ์ง์คํธ๋ฆฌ ์ ๋ณด๋ฅผ ๊ฐ์ ธ์ฌ์ง ์ฌ๋ถ๋ฅผ ์ค์ ํ๋ค.
์ ์ค์ ๊ณผ ๋ง์ฐฌ๊ฐ์ง๋ก ํด๋ผ์ด์ธํธ๊ฐ ์๋๋ฏ๋ก false๋ก ์ค์ ํ๋ค.
์ ๋ ์นด ์๋ฒ ์คํ ๋ฐ ํ์ธ
์ ํ๋ฆฌ์ผ์ด์ ์ ์คํํ์ฌ ๋ค์ url๋ก ์๋น์ค๋ฅผ ํ์ธํด๋ณธ๋ค.
UI ๋์๋ณด๋ - http://localhost:8761
์ ๋ ์นด ์๋ฒ๊ฐ ์ ๊ณตํ๋ UI ๋์๋ณด๋๋ฅผ ์ฌ์ฉํ ์ ์๋ค.
์๋ฒ ๋ชฉ๋ก - http://localhost:8761/eureka/apps
์ ๋ ์นด ์๋ฒ์ ๋ฑ๋ก๋ ๋ง์ดํฌ๋ก ์๋น์ค์ ๋ชฉ๋ก์ ์กฐํํ ์ ์๋ค.
๋์ค์ปค๋ฒ๋ฆฌ ํด๋ผ์ด์ธํธ - ์ ๋ ์นด ํด๋ผ์ด์ธํธ
์ ๋ ์นด ํด๋ผ์ด์ธํธ๋ ๋ค์์ ๋ ๊ฐ์ง ์ญํ ์ ์ํํ๋ค.
- ์ ๋ ์นด ์๋ฒ์ ํต์ ํ์ฌ ์์ ์ ๋ฑ๋กํ๊ณ ์๋น์ค ์ ๋ณด๋ฅผ ๋ณด๋ธ๋ค.
- ์๋ฒ๋ก๋ถํฐ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์ ์บ์ฑํ๊ณ ์ฃผ๊ธฐ์ ์ผ๋ก ๋ณ๊ฒฝ์ฌํญ์ ํ์ธํ๋ค.
๋ค์์ผ๋ก ๋์ค์ปค๋ฒ๋ฆฌ ํด๋ผ์ด์ธํธ ์ญํ ์ ํ ์คํ๋ง ๋ถํธ ํ๋ก์ ํธ๋ฅผ ์๋ก ๋ง๋ ๋ค.
Dependency
spring-cloud-starter-netflix-eureka-client ์์กด์ฑ์ ์ถ๊ฐํ๋ค.
implementation 'org.springframework.cloud:spring-cloud-starter-netflix-eureka-client'
์ ๋ ์นด ํด๋ผ์ด์ธํธ ํ์ฑํ
์ ๋ ์นด ์๋ฒ๋ฅผ ํ์ฑํํ ๋ @EnableEurekaServer ์ ๋ ธํ ์ด์ ์ ๋ถ์ด๋ฏ, ์ ๋ ์นด ํด๋ผ์ด์ธํธ๋ ์ ๋ ธํ ์ด์ ์ ๋ถ์ฌ ํ์ฑํํ ์ ์๋ค.
์ ๋ ์นด ํด๋ผ์ด์ธํธ๋ฅผ ํ์ฑํํ๊ธฐ ์ํ ์ ๋ ธํ ์ด์ ์ ๋ค์์ ๋ ๊ฐ ์ค ํ๋๋ฅผ ์ฌ์ฉํ ์ ์๋ค.
- org.springframework.cloud.client.discovery.EnableDiscoveryClient
- org.springframework.cloud.netflix.eureka.EnableEurekaClient
์ฐ์ @EnableDiscoveryClient๋ฅผ ์ฌ์ฉํด ๋ณด์.
@EnableDiscoveryClient
@SpringBootApplication
public class ClientApplication {
public static void main(String[] args) {
SpringApplication.run(ClientApplication.class, args);
}
}
์คํ๋ง ๋ถํธ ๋ฉ์ธ ํด๋์ค์ @EnableDiscoveryClient ์ ๋ ธํ ์ด์ ์ ๋ถ์ธ๋ค.
์ ํ๋ฆฌ์ผ์ด์ ์ค์
application.yml์ ๋ค์๊ณผ ๊ฐ์ด ์ค์ ๊ฐ์ ์ถ๊ฐํ๋ค.
spring:
application:
name: client-service
eureka:
client:
serviceUrl:
defaultZone: http://localhost:8761/eureka/
spring.application.name์ ์๋น์ค ๋์ค์ปค๋ฒ๋ฆฌ์ ๋ฑ๋กํ ํด๋ผ์ด์ธํธ ์๋น์ค ์ด๋ฆ,
eureka.client.serviceUrl.defaultZone์ ํด๋ผ์ด์ธํธ์ ํต์ ํ ๋์ค์ปค๋ฒ๋ฆฌ ์๋ฒ ์ฃผ์๋ฅผ ์ค์ ํ๋ค.
์ ๋ ์นด ํด๋ผ์ด์ธํธ ์คํ ๋ฐ ํ์ธ
์์ ๋ง๋ ์ ๋ ์นด ์๋ฒ๊ฐ ๋์์ ธ ์๋ ์ํ์์, ์ด๋ฒ์ ๋ง๋ ์ ๋ ์นด ํด๋ผ์ด์ธํธ ์ ํ๋ฆฌ์ผ์ด์ ์ ์คํํ์.
์ ๋ ์นด ํด๋ผ์ด์ธํธ ์ ํ๋ฆฌ์ผ์ด์ ์ ์๋ก ๋ค๋ฅธ ํฌํธ๋ก ์ด 2๊ฐ์ ์ธ์คํด์ค๋ฅผ ์คํํ ๊ฒ์ด๋ค.
๐ฅ ๋น๋
./gradlew -x test clean build
๐ฅ ์คํ
java -jar -Dserver.port=8081 study-eureka-client-0.0.1-SNAPSHOT.jar
java -jar -Dserver.port=8083 study-eureka-client-0.0.1-SNAPSHOT.jar
์ ๋ ์นด ์๋ฒ, ์ ๋ ์นด ํด๋ผ์ด์ธํธ๊ฐ ๋ชจ๋ ์ ์ ์คํ๋๊ณ ๋๋ฉด ์ ๋ ์นด ์๋ฒ UI ์ฝ์ - http://localhost:8761์ ๋ค์ ์ ์ํด๋ณด์.
Instances currently registered with Eureka ์์ญ์ 8081, 8083 ํฌํธ๋ก ๋ฑ๋ก๋ ๋ ๊ฐ์ client-service ์ธ์คํด์ค๋ฅผ ํ์ธํ ์ ์๋ค.
โ๏ธ ์ฐธ๊ณ
Application์ ๋ณด์ด๋ application name(์ฌ๊ธฐ์ ์๋ก ๋ค๋ฉด CLIENT-SERVICE)๋ ๋์๋ฌธ์๋ฅผ ๊ตฌ๋ถํ์ง ์๋๋ค.
spring.application.name์๋ client-service๋ก ์ค์ ํ์ง๋ง eureka ๋์๋ณด๋์์๋ ์๋น์ค ์ด๋ฆ์ด ๋ชจ๋ ๋๋ฌธ์๋ก ๋ณํ๋์ด CLIENT-SERVICE๋ผ๊ณ ์ถ๋ ฅ๋๋ค.
์ด๋ฒ์ 8083 ํฌํธ๋ก ๋์ด ํด๋ผ์ด์ธํธ ์ธ์คํด์ค๋ฅผ ์ข ๋ฃํ ๋ค ๋ค์ ํ์ธํด๋ณด์.
์ ํ๋ฆฌ์ผ์ด์ ์ข ๋ฃ ์ ๋ค์๊ณผ ๊ฐ์ ๋ก๊ทธ๋ฅผ ๋ณผ ์ ์๋ค.
2021-08-02 22:44:09.979 INFO 10948 --- [extShutdownHook] com.netflix.discovery.DiscoveryClient : Shutting down DiscoveryClient ...
2021-08-02 22:44:12.984 INFO 10948 --- [extShutdownHook] com.netflix.discovery.DiscoveryClient : Unregistering ...
2021-08-02 22:44:12.990 INFO 10948 --- [extShutdownHook] com.netflix.discovery.DiscoveryClient : DiscoveryClient_CLIENT-SERVICE/192.168.219.104:client-service:8083 - deregister status: 200
2021-08-02 22:44:12.997 INFO 10948 --- [extShutdownHook] com.netflix.discovery.DiscoveryClient : Completed shut down of DiscoveryClient
๊ทธ ๋ค์ ์ ๋ ์นด ์๋ฒ ๋์๋ณด๋๋ฅผ ๋ณด๋ฉด registered ๋ชฉ๋ก์์ 8083 ํฌํธ์ ์ธ์คํด์ค๊ฐ ์ ๊ฑฐ๋๊ณ , 8081 ํฌํธ์ ์ธ์คํด์ค๋ง ๋ณด์ด๋ ๊ฒ์ ํ์ธํ ์ ์๋ค.
์ถ๊ฐ๋ก ์ ๋ ์นด ์๋ฒ ๋์๋ณด๋์ http://localhost:8761/lastn ์์๋ ์๋กญ๊ฒ ๋ฑ๋ก๋๊ฑฐ๋ ๋ฑ๋ก ์ทจ์๋ ์๋น์ค ์ด๋ ฅ์ ํ์ธํ ์ ์๋ค.
์ ๋ ์นด ํด๋ผ์ด์ธํธ ์ธ์คํด์ค๋ฅผ ๋ชจ๋ ์ข ๋ฃ ํ, ํด๋ผ์ด์ธํธ ํ์ฑํ๋ฅผ ์ํด ์ถ๊ฐํ๋ @EnableDiscoveryClient ์ ๋ ธํ ์ด์ ์ @EnableEurekaClient๋ก ๋ณ๊ฒฝ ํ ์ธ์คํด์ค๋ฅผ ์ฌ์คํํด๋ ๋์ผํ ๊ฒฐ๊ณผ๋ฅผ ๋ณผ ์ ์๋ค.
๐ ์ฐธ๊ณ ์์
๋ง์คํฐ๋ง ์คํ๋ง ํด๋ผ์ฐ๋
๋๊ธ