2 분 소요

1. UserService

이번에는 유레카 서버에 등록할 수 있는 샘플 마이크로 서비스를 만들어보자.

프로젝트 생성

스크린샷 2022-09-24 오전 3 31 44
디스커버리 서비스를 생성할 때와 마찬가지로 이름만 user-service로 생성해준다.

Dependencies

디펜던시는 유레카 서버보다 많은 항목을 선택해야 한다.
지금 만들려고 하는 것은 디스커버리 서버에 등록될 마이크로 서비스(유레카 서버의 클라이언트 역할)이다.
스크린샷 2022-09-24 오전 3 35 14

  • Spring Boot > 2.4.1 (pom.xml에서 변경해주었다.)
  • Spring Cloud Discovery > Eureka Discovery Client
  • Developer Tools > Spring Boot DevTools
  • Developer Tools > Lombok
  • Web > Spring Web

EcommerApplication.java

해당 마이크로 서비스를 유레카 서버에 등록하기 위해 @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 # 갱신된 인스턴스 정보가 있을 때, 유레카 서버로부터 주기적으로 가져오겠다
    service-url:
      defaultZone: http://127.0.0.1:8761/eureka # 해당 마이크로 서비스를 등록 할 유레카 서버의 위치 값 지정

실행

🌟 유레카 서버를 먼저 실행한 뒤, user-service를 실행한다. user-service 실행 후 다시 http://localhost:8761에 접속하면 아래와 같이 user-service라는 이름의 어플리케이션이 유레카 서버에 등록된 것을 확인할 수 있다.
스크린샷 2022-09-24 오전 3 57 51
참고로, 이 때 어플리케이션의 이름이 USER-SERVICE로 나오는 것은,
이전에 application.yml에서 spring.application.nameuser-service로 지정했기 때문이다.

2. UserService 2 - 인텔리제이에서 실행하기

이번에는 하나의 유레카 서버에서 구동될 또 다른 user service 를 생성해보자.
현재 유레카 서버는 작동 중인 상태이다.
기존의 user service에서 아래 사진에 보이는 순서로 진행한다.

Edit Configurations

스크린샷 2022-09-25 오후 6 19 36
사진에 보이는 것처럼 콤보박스를 클릭한 뒤, Edit Configurations를 클릭한다.

스크린샷 2022-09-25 오후 6 19 48
추가하려는 user-service가 기존의 user-service와 같은 내용이기 때문에 + 버튼 말고, Copy Configurations를 클릭한다.

스크린샷 2022-09-25 오후 7 14 00
기존에 UserServiceApplication(1)로 되어있을텐데, 이를 UserServiceApplication - 2로 변경한다.

스크린샷 2022-09-25 오후 7 19 21
이제 콤보박스를 클릭하게되면, 두 가지 아이템이 보일 것이고
첫 번째 서비스는 현재 작동중이기 때문에 작게 초록색 점으로 표시되어있음을 알 수 있다.
이제 UserServiceApplication - 2를 실행해보자.

스크린샷 2022-09-25 오후 7 23 38
그럼 위와 같은 에러 메시지가 뜨는 것을 확인할 수 있는데,
이는 9001번 포트를 기존의 UserServiceApplication이 이미 사용중이기 때문에 발생하는 에러이다.
이를 해결하기 위해 application.yml에서 코드 자체에 하드코딩 되어있는 9001번을 바꾸는 것은 좋지 않은 방법이다.
(한번 작성되어진 코드가 다시 빌드되고 배포되어야 하기 때문이다.)

VM Options 설정

스크린샷 2022-09-25 오후 7 28 54
아까처럼 Edit Configurations로 들어간 뒤에
VM options-Dserver.port=9002를 입력한다. (이는 application.yml에서 포트 번호를 설정하는 것과 유사하다.)
이런식으로 설정하면, 서버를 기동할 때 부가적인 파라미터를 전달함으로써, 동적으로 변경될 수 있는 서버 포트를 지정할 수 있다.

유레카 서버 확인

UserServiceApplication - 2를 다시 실행한 뒤, 유레카에 접속하게 되면 아래와 같이 확인할 수 있다.
스크린샷 2022-09-25 오후 7 43 26

3. UserService 3 - 인텔리제이 터미널로 실행하기

이번에는 세 번째 방법으로 서비스를 하나 더 기동시켜보자.
세 번째 방법은,
가지고 있는 어플리케이션을 빌드한 뒤, 패키징하고, 그 자체를 커맨드 라인에서 직접 식행하는 것이다.

코드를 빌드하기

빌드는 인텔리제이 터미널에 직접 커맨드를 입력하여 실행할 것이다.
코드를 빌드하기 전에, 아래 커맨드로 설치를 확인한다.

java -version
javac -version
mvn --version

나는 mvn이 설치되어 있지 않아서 brew install mvn 커맨드로 설치했다.
이제 spring boot 코드를 빌드 해보자.

mvn spring-boot:run -Dspring-boot.run.jvmArguments='-Dserver.port=9003'

스크린샷 2022-09-26 오전 12 20 23

유레카 서버 확인

스크린샷 2022-09-26 오전 12 23 02

4. UserService 4 - iterm으로 실행하기 (java -jar)

iterm 혹은 terminal에서 user-service 프로젝트가 있는 디렉터리로 이동한다.

mvn clean # 기존에 빌드된 정보를 삭제한다. (target 디렉터리가 삭제된다.)
mvn compile package # 컴파일 후 패키지를 만든다. (target 디렉터리가 생성된다.)
java -jar -Dserver.port=9004 ./target/user-service-0.0.1-SNAPSHOT.jar # 서버를 9004번 포트로 실행한다.

유레카 서버 확인

유레카 서버에 접속해보면, 아래 사진과 같이 총 4가지 인스턴스가 작동되고 있음을 확인할 수 있다.
스크린샷 2022-09-26 오전 12 35 01

하지만 매번 실행할 때마다 포트 번호를 부여한다는 것은 썩 달가운 작업은 아니다.
spring boot에서 이 작업을 간단히 처리하는 방법에 대해 다음 글에서 알아보자.

5. 4가지 user-service 인스턴스 종료

  • iterm & 인텔리제이 터미널 이용한 방식
    - ctrl+c 입력
  • 인텔리제이를 이용한 방식
    - 상단 빨간색 네모 버튼 누르기 > Stop All 클릭

유레카 서버 확인

아래와 같이 모든 인스턴스가 삭제되었음을 확인할 수 있다.
스크린샷 2022-09-26 오전 12 40 28



💛 개인 공부 기록용 블로그입니다. 👻

맨 위로 이동하기