๐ ์ฐ๋ฆฌ๋ Spring Cloud๋ฅผ ํ์ฉํ์ฌ MSA๋ฅผ ๊ตฌ์ถํ๋ค.
Service Discovery ํํธ 2
Service Discovery์ ์ญํ ์ ๊ฐ๋ตํ๊ฒ ์ ๋ฆฌํ์๋ฉด,
Service Discovery๋?
- ๋ง์ดํฌ๋ก์๋น์ค์ ์ ๋ณด(์์น ๋ฑ)๋ฅผ ๋ฑ๋กํ ์ ์๋ค.
- ์ธ๋ถ์ ์์ฒญ์ด๋ ์๋น์ค๊ฐ ๋ง์ดํฌ๋ก์๋น์ค์ ์ ๋ณด๋ฅผ ๊ฒ์ํ๊ธฐ ์ํด ์ฌ์ฉ๋๋ค.
Spring Cloud์์๋ Spring Cloud Netflix Eureka๊ฐ Service Discovery์ ์ญํ ์ ์ํํ๋ค. Eureka๋ Eureka Server์ Eureka Client๋ก ๊ตฌ์ฑ๋๋ค.
Eureka ํด๋ผ์ด์ธํธ๋?
MSA๋ฅผ ๊ตฌ์ฑํ๋ ์์๋ค ์ค Eureka ์๋ฒ์์ ๋ชจ๋ํฐ๋ง ๋ฐ ๊ด๋ฆฌ๋ฅผ ์ํ๋ ์์๋ฅผ Eureka ํด๋ผ์ด์ธํธ ์ค์ ์ ์งํํด์ ๋ฑ๋กํ ์ ์๋ค.
๐ ์ด๋ฒ์๋, ์ด์ ์ ์์ฑํ ๊ฐ๊ฐ์ ๋ง์ดํฌ๋ก์๋น์ค๋ค์๊ฒ Eureka Client ์ค์ ์ ํ ๊ฒ์ด๋ค.
๋ง์ดํฌ๋ก์๋น์ค Eureka ํด๋ผ์ด์ธํธ ์ค์ ํ๊ธฐ
์์ฑํ ๋ชจ๋ ๋ง์ดํฌ๋ก์๋น์ค๋ค์๊ฒ ๋์ผํ๊ฒ ์ค์ ํ๋ค.
- user-service
- beverage-service
- community-service
1. Eureka ํด๋ผ์ด์ธํธ ์ค์ ์ ์ํ ์์กด์ฑ ์ถ๊ฐ
ํ์ ์์กด์ฑ
- Eureka Discovery Client
// build.gradle
ext {
set('springCloudVersion', "2023.0.0")
}
dependencies {
implementation 'org.springframework.cloud:spring-cloud-starter-netflix-eureka-client'
}
dependencyManagement {
imports {
mavenBom "org.springframework.cloud:spring-cloud-dependencies:${springCloudVersion}"
}
}
2. Main ํด๋์ค ์ด๋ ธํ ์ด์ ๋ฑ๋ก
Eureka ํด๋ผ์ด์ธํธ๋ก ๋์ํ๊ธฐ ์ํด @EnableDiscoveryClient ์ด๋ ธํ ์ด์ ์ ๋ฑ๋กํด์ผ ํ๋ค.
// UserServiceApplication
package com.caffeinedoctor.userservice;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
@SpringBootApplication
@EnableDiscoveryClient // ์ ๋ ์นด ํด๋ผ์ด์ธํธ๋ก ๋ฑ๋ก
public class UserServiceApplication {
public static void main(String[] args) {
SpringApplication.run(UserServiceApplication.class, args);
}
}
3. Eureka ์๋ฒ์ ์ฐ๊ฒฐ
application.yml ๋ณ์ ์ค์ ์ ํตํด Eureka ์๋ฒ์ ๋ฑ๋กํ ์ ์๋ค.
# application.yml
# ํ์ฌ ํ๋ก์ ํธ ํฌํธ ์ง์ (user-service)
server:
port: 8081
# ํ์ฌ ํ๋ก์ ํธ ์ด๋ฆ ์ง์
spring:
application:
name: user-service
# eureka ์ค์ (eureka ์๋ฒ์ ์ฐ๊ฒฐ)
eureka:
client:
# eureka ์๋ฒ์ ๋ฑ๋กํ ์ง ์ฌ๋ถ
register-with-eureka: true
# eureka ์๋ฒ๋ก ๋ถํฐ ์ธ์คํด์ค๋ค์ ์ ๋ณด๋ฅผ ๊ฐ์ ธ์ฌ ๊ฒ์ธ์ง ์ค์ ํ๋ ์์ฑ
fetch-registry: true
# eureka ์๋ฒ ์ฃผ์์ ๋ง์ดํฌ๋ก์๋น์ค ์ ๋ณด ๋ฑ๋ก
service-url:
defaultZone: http://admin:1234mst@localhost:8761/eureka
- spring: application: name:
- ํ๋ก์ ํธ์ ์ ํ๋ฆฌ์ผ์ด์ ์ด๋ฆ์ ์ ํ๋ค.
- ํด๋น ์ด๋ฆ์ผ๋ก Gateway์์ ํธ์ถํ๋ฏ๋ก ํ์์ ์ผ๋ก ์ ๋ ฅํ๋ค.
- eureka: client: register-with-eureka (๋ํดํธ true)
- eureka ์๋ฒ์ ๋ฑ๋ก ์ค์
- eureka: client: fetch-registry (๋ํดํธ true)
- ์ธ๋ถ์์ Client๊ฐ ๊ฒ์ ๊ฐ๋ฅ ์ฌ๋ถ ์ค์
- eureka: client: service-url: defaultZone:
- eureka ํด๋ผ์ด์ธํธ๊ฐ ๋ง์ดํฌ๋ก์๋น์ค๋ฅผ ๋ฑ๋กํ eureka ์๋ฒ ์ฃผ์๋ฅผ ์ง์ ํ๊ธฐ ์ํด ์ฌ์ฉํ๋ค.
- ์ฆ, ๋ง์ดํฌ๋ก์๋น์ค๋ฅผ ๋ฑ๋กํ eureka ์๋ฒ ์ฃผ์๋ฅผ ์์ฑํ๋ค.
Spring Cloud Eureka ์๋ฒ ์คํ
์ฐธ๊ณ ์๋ฃ
https://covenant.tistory.com/251
https://devhan.tistory.com/m/260
https://substantial-park-a17.notion.site/6-Eureka-057c942a7a4041bf87ab5cd3043af021