Service Discovery란?
서비스의 위치(IP, PORT) 등 저장 및 관리하는 서비스의 주소록 역할을 한다.
서비스를 호출하는 쪽에서 서비스의 위치를 몰라도 요청을 전달할 수 있다.
Service-Side Discovert / Client-Side Discovery
- Server-Side Discovery : Service Registry가 아닌 앞단의 Load Balancer를 통해 다른 서비스 호출
- Client-Side Discovery : Service Registry를 통해 서비스 호출
Eureka Server 구현
1. 의존성 추가
plugins {
id 'java'
id 'org.springframework.boot' version '3.3.2'
id 'io.spring.dependency-management' version '1.1.6'
}
...
ext {
set('springCloudVersion', "2023.0.3")
}
dependencies {
implementation 'org.springframework.cloud:spring-cloud-starter-netflix-eureka-server'
testImplementation 'org.springframework.boot:spring-boot-starter-test'
testRuntimeOnly 'org.junit.platform:junit-platform-launcher'
}
dependencyManagement {
imports {
mavenBom "org.springframework.cloud:spring-cloud-dependencies:${springCloudVersion}"
}
}
...
2. Eureka Server 관련 application.prorerties 설정
server.port=8761
spring.application.name=eureka-service
eureka.client.register-with-eureka=false
eureka.client.fetch-registry=false
eureka.client.serviceUrl.defaultZone=http://localhost:8761/eureka/
- Eureka는 8761서버를 사용
- spring.application.name=eureka-service
- Eureka 환경에서 통신할 때는 id:port가 아닌 고유 ID(서비스 이름)으로 통신
- eureka.client.register-with-eureka=false
- Eureka Server에 자기 자신을 등록할지의 여부
- eureka.client.fetch-registry=false
- Eureka Server의 등록되어 있는 서비스들을 캐싱해 둘지의 여부
- eureka.client.serviceUrl.defaultZone
- Eureka Server의 URL을 지정. 이후에 Eureka API 요청 시 해당 URL로 요청을 보낼 수 있음
3. Eureka Server 활성화
@SpringBootApplication
@EnableEurekaServer // 서버 활성화
public class EurekaServiceApplication {
public static void main(String[] args) {
SpringApplication.run(EurekaServiceApplication.class, args);
}
}
http://localhost:8761/ 에서 Eureka 대시보드를 확인할수 있다!
현재는 클라이언트가 등록되어있지 않기 때문에
Instances currently registered with Eureka 가 비어있는데 클라이언트 등록해 주면 해당 테이블에 등록된 모습을 확인할 수 있다.
Eureka Client 구현
각 서비스들의 다른 서비스들을 얻기 위해 Eureka Clients를 구현할 차례
각각의 MSA 서비스들에게 모두 Eureka Clients를 추가해주면된다
1. 의존성 추가
plugins {
id 'java'
id 'org.springframework.boot' version '3.3.2'
id 'io.spring.dependency-management' version '1.1.6'
}
...
ext {
set('springCloudVersion', "2023.0.3")
}
dependencies {
...
//Eureka
implementation 'org.springframework.cloud:spring-cloud-starter-netflix-eureka-client'
implementation 'org.springframework.boot:spring-boot-starter-actuator'
}
dependencyManagement {
imports {
mavenBom "org.springframework.cloud:spring-cloud-dependencies:${springCloudVersion}"
}
}
2. Eureka Client 관련 application.properties설정
server.port=8081
spring.application.name=user-service
eureka.client.register-with-eureka=true
eureka.client.fetch-registry=true
eureka.client.service-url.defaultZone=http://localhost:8761/eureka/
- eureka.instance.prefer-ip-address
- 서비스의 호스트 이름이 아닌, IP 주소를 Eureka Server에 등록할지 여부
- 기본값은 false로, 해당 옵션을 true로 설정하지 않으면 Eureka Server에 각 서비스들이 내부적으로 호스트 이름으로 등록
- 서비스가 배포되는 환경에서 DNS가 존재한다면 호스트 이름을 할당받고 Eureka Server가 잘 등록할 수 있으므로 해당 옵션을 설정할 필요가 없다.
- 하지만, 컨테이너 기반의 배포 환경이라면 컨테이너가 DNS 엔트리가 없는 임의의 호스트 이름이 부여되기 때문에 해당 옵션을 false로 했을 때 Eureka Server가 해당 서비스의 호스트 이름 위치를 정상적으로 얻지 못한다.
- 따라서, 컨테이너 기반 배포라면 해당 옵션을 true로 하여 Eureka Server가 서비스를 IP 주소로 등록해서 찾도록 해야 한다.
- eureka.client.register-with-eureka
- Eureka Server에 자기 자신을 등록할지의 여부
3. Eureka Client 활성화
@SpringBootApplication
@EnableDiscoveryClient // 클라이언트 활성화
public class UserServiceApplication {
public static void main(String[] args) {
SpringApplication.run(UserServiceApplication.class, args);
}
}
대시보드를 확인해 보면 잘 등록된 걸 확인할 수 있다!
'프로젝트 > Springboot-MSA- PreOrder' 카테고리의 다른 글
[Project] API Gateway (0) | 2024.08.18 |
---|---|
[Project] Spring Batch란? (0) | 2024.08.18 |
[Project] MSA란? (1) | 2024.08.18 |
[Project] Google SMTP (0) | 2024.08.11 |
[Project] 개인정보 양방향 AES 암호화 (0) | 2024.08.11 |