본문 바로가기
spring cloud

Service Discovery - User service 등록하기

by 킹차니 2022. 2. 28.

이번에는 이전 포트스에서 만든 Service Discovery(spring cloud netflix eureka)에 user service라는 마이크로 서비스를 만들고 이를 등록해보자. 즉 여기서 user service는 service discovery의 client가 된다.

 

 

먼저 아래의 의존성들을 추가한 스프링 부트 프로젝트를 user-service라는 이름으로 만들었다.

 

그리고 main함수를 가진 UserServiceApplication에 user service를 Eureka서버에 등록하기 위해 @EnableDiscoveyClient 어노테이션을 붙여준다.

package com.example.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);
    }
}

 

그리고 이제 application.yml 파일에 아래와 같이 작성해준다.

server:
  port: 9001

spring:
  application:
    name: user-service

eureka:
  client:
    register-with-eureka: true
    fetch-registry: true #EUREKA 서버로부터 인스턴스들의 정보를 주기적으로 가져올 것이다. 즉 갱신된 정보를 받을 것임
    service-url:
      defaultZone: http://127.0.0.1:8761/eureka

 

이제 discovery server와 user service를 모두 실행시켜보자.

그리고 localhost:8761(이전 포스트에서 설정해준 discovery포트)에 접속해주면 아래와 같이 user-service가 등록된 것을 볼 수 있다.

 

 


이제 user service 하나 더 구동시킬 것이다. 즉 2개의 user service를 discovery service에 등록할 것이다.

 

하나의 user service를 더 만들기 위해 아래와 같이 한다.

인텔리제이에서 Edit Configuraion 클릭.

 

그리고 왼쪽 상단에서 UserServiceApplication을 클릭한 뒤, Copy 이모지를 클릭하여 UserServiceApplication을 복사한다.

 

그러고 나면 이렇게 하나의 UserServiceApplication이 UserServiceApplication(1)라는 이름으로 하나 더 생긴다.

그리고 이름을 UserServiceApplication-2라는 이름으로 바꿔줄 것이다.(필수 사항은 당연히 아님. 원하는 이름을 부여)

 

이제 2개의 UserService를 실행할 수 있다.

2개의 user service가 생긴 모습

하지만 현재 user service2 역시 포트가 9001로 되어 있기 때문에 이를 실행시키면 포트가 충돌하여 에러가 발생할 것이다. 하여 우리는 user service2의 포트 번호를 변경시켜야 한다. 

yml에서도 바꿀 수 있겠지만 하드 코딩된 코드를 직접 수정하면 다시 빌드하고, 다시 배포해야 한다. 하여 Configuration에서 포트 번호를 수정할 것이다.

 

UserServiceApplication-2를 선택한 후 EditConfiguration에 들어간다.

 

그리고 VM Option에 아래와 같이 추가한다.

이렇게 하면 UserServiceApplication-2를 실행시킬 때, 해당 옵션을 참고하여 포트번호 9002로 실행을 시킨다.

 

이제 한번 실행시켜보면 

yml에서는 9001이지만 실행된 로그는 9002로 실행된 것을 알 수 있다.

 

그리고 이제 discovertservice를 브라우저로 접속해보면

2개의 user-service가 각각 9002, 9001 포트로 등록된 것을 볼 수 있다.

 

 


다시 한개 더! user service를 구동해보자. 이번엔 터미널에서 mvn 명령어를 사용하여 9003포트로 user service를 구동시킬 것이다.

(물론 자바와 mvn이 설치되어 있어야 함)

 

인텔리제이의 터미널에서 user service(현재 다루고 있는 스프링 부트 프로젝트)의 위치에서 아래와 같은 명령어를 실행해주면 된다.

위의 명령어를 실행하면 아래와 같이 9003포트에서 user service가 구동되는 것을 볼 수 있다.

 

이제 다시 discovery service를 브라우저를 통해 접속하면 총 3개의 user service가 등록된 것을 볼 수 있다.

 

 

 


마지막으로 jar파일을 통해 하나의 user service를 하나 더 구동해보자.

 

먼저 이전에 빌드되어 생성된 target파일을 삭제한다. (mvn clean 명령어)

 

mvn clean을 하고 나면 target파일이 사라진 것을 볼 수 있다.

 

이제 다시 빌드하여 target파일을 만들어 보자.

target파일 생성됨

 

이제 9004 포트로 실행시켜보자.

 

discovery service 브라우저로 접속하면 4개의 user service가 등록되었다.

 


하지만 이번에는 스프링 부트가 제공하는 랜덤포트를 사용하여 더 쉽게 등록을 해보자.

아래와 같이 yml파일을 수정한다.

server:
  port: 0 # 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 #EUREKA 서버로부터 인스턴스들의 정보를 주기적으로 가져올 것이다. 즉 갱신된 정보를 받을 것임
    service-url:
      defaultZone: http://127.0.0.1:8761/eureka

이렇게 랜덤포트를 사용하면 스프링 부트가 랜덤한 포트를 지정해준다.

 

이제 두 개의 user service를 싱행시켜보자.

 

한개는 인텔리제이로 실행.

 

다른 한개는 아래와 같은 명령어로 터미널에서 실행

 

이렇게 하면 랜덤한 포트가 할당된다.

1번 userservice
2번 userservice

 

이제 discovery service 브라우저에 접속해보자.

2개의 user service가 등록된 것을 볼 수 있다.

 

 

 

출처 : 인프런 Lee Dowon님의 강의와 PDF 자료
https://www.inflearn.com/course/%EC%8A%A4%ED%94%84%EB%A7%81-%ED%81%B4%EB%9D%BC%EC%9A%B0%EB%93%9C-%EB%A7%88%EC%9D%B4%ED%81%AC%EB%A1%9C%EC%84%9C%EB%B9%84%EC%8A%A4