<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
</dependency>
eureka server를 등록하기 위해 의존성 추가를 해준다.
server:
port: 8761
spring:
application:
name: discoveryservice
eureka:
client:
register-with-eureka: false
fetch-registry: false
application.properties를 yml으로 바꿔서 진행했다.
yml은 여러 설정을 했을 때 조금 더 가독성 좋게 볼 수 있는 이점이 있다.
위에서 spring.application.name
에서 service의 이름을 설정해준다.
register-with-eureka
는 Eureka에 등록할지 설정하는 속성이다.
fetch-registry
는 Eureka 서버로부터 인스턴스들의 정보를 주기적으로 가져올 것인지 설정하는 속성이다. true
로 설정하면 갱신된 정보를 받겠다는 의미이다.
Discovery Service는 server의 역할만 할 것이기 때문에 Eureka에 등록하지 않는다.
@SpringBootApplication
@EnableEurekaServer
public class DiscoveryserviceApplication {
public static void main(String[] args) {
SpringApplication.run(DiscoveryserviceApplication.class, args);
}
}
@EnableEurekaServer
어노테이션을 달아 Eureka server application임을 선언한다.
이렇게 Discovery Service 셋팅을 마쳤다. 이제 User Service 프로젝트를 생성하고 Eureka 서버에 등록을 해 본다.
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
User Service는 직접 사용 될 Service이기 때문에 client를 의존성 주입 받는다.
아까 Discovery Service는 서버로서 역할을 하니까 serverf를 의존성 주입 받았다.
server:
port: 0
spring:
application:
name: user-service
eureka:
instance:
instance-id: ${spring.cloud.client.hostname}:${spring.application.instance_id:${random.value}}
client:
register-with-eureka: true
fetch-registry: true
service-url:
defaultZone: http://127.0.0.1:8761/eureka
위에 Discvoery Service보다 등록 할 게 많아졌다.
대부분 설정은 비슷하고(client 부분 true 설정 체크한다.) 추가된 부분은 defaultZone: http://127.0.0.1:8761/eureka
부분이다. 이 설정은 서버의 위치를 정해준다고 보면 된다. 위에 등록한 경록에 있는 Eureka에 이 마이크로 서비스를 등록하겠다. 정도로 이해하면 된다.
또, 지금 server.port
가 0
으로 설정되어 있는데 이건 랜덤으로 port
를 생성한다.
Load Balancer를 활용하는데 잠깐 사용했다.
eureka:
instance:
instance-id: ${spring.cloud.client.hostname}:${spring.application.instance_id:${random.value}}
이 부분을 보면 instance-id를 랜덤 값으로 생성하고 있다.
포트만 다르게 service를 여러 개 돌리면 Discovery가 Load Balancer 역할을 해 트래픽을 여러 서버로 분산시켜 준다.
Load Balancer에 관련된 글은 이 글을 참고한다.
근데 이때, 포트가 0으로 설정되어 있다면 Eureka에 등록된 Service의 이름이 똑같이 설정되어 구분을 할 수 없기 때문에 instence id를 랜덤으로 설정해 이름을 다르게 구분해준다.
@SpringBootApplication
@EnableEurekaClient
public class UserServiceApplication {
public static void main(String[] args) {
SpringApplication.run(UserServiceApplication.class, args);
}
}
@EnableEurekaClient
를 등록한다.
이제 서버를 돌려보면 Eureka 서버에 UserService가 등록된 것을 확인할 수 있다.
다음에는 API Gateway Service에 대해서 공부할 예정이다.