Service Discovery

용씨·2023년 1월 30일
0

Java 17
spring-cloud 2022.0.1
spring-boot 3.0.2
프로젝트 소스 링크

Service Discovery란

Service Discovery: Eureka 의 역할, 마이크로서비스를 검색하기 위해 사용, key-value

Eureka에 마이크로서비스들을 등록을 먼저 한다.
Client ➔ Load Balancer(API Gateway) ➔ Eureka

궁금한 점


왜 URL에 docker가 들어있을까?

강의는 192.168.0.8:user-service:9001
나는 host.docker.internal:user-service:9001

내가 쓰는 Spring Cloud 버전이 강의보다 높은데 어떤 업데이트가 있었나보다.

기억할 점

Application name

Application의 이름이 USER-SERVICE로 되어있다.
이것은 application.yml 파일에서 설정한 내용이다.

spring:
  application:
    name: user-service

대소문자 가리지않고 대문자로 표시된다.

VM options

-Dserver.port = [서버 포트 번호]

-D는 옵션을 추가한다는 의미이다. VM options에 적어준다.

이 방법은 application.yml 파일을 수정하고 빌드/배포하지 않고, 서버 포트 번호를 바꿀 수 있게 해준다.

이처럼 수정하고 서버를 2개 돌리면 다음과 같이 나온다.

터미널로 프로젝트 실행

cd [프로젝트 폴더]
# maven 설치 후
mvn spring-boot:run -Dspring-boot.run.jvmArguments='-Dserver.port=9003'

위에 2개 서버가 돌려져있는 상황에서 명령어를 실행하면 3개의 서버가 돌아가게 된다.(각 port는 9001, 9002, 9003)

mvn 명령어로 프로젝트 실행

pom.xml이 저장되어 있는 위치에서 명령어를 실행한다.

mvn clear
mvn compile package

target 폴더 안에 jar 파일이 만들어진다.

java -jar -Dserver.port=9004 ./target/user-service-0.0.1-SNAPSHOT.jar

maven lifecycle 명령어

명령어내용
process-resources/src/main/resources 디텍토리를 <outputDirectory>에 생성
compile소스코드를 컴파일해서 클래스를 <outputDirectory>에 생성
test-compile테스트 소스 코드(JUnit)를 컴파일
test테스트가 실패하면 빌드를 멈춘다. 테스트 코드가 깨져도 빌드를 성공시키려면 maven.test.skip속성을 true로 설정
packagecompile, test-compile, test순으로 실행 후 jar, war파일이 target 디렉토리 아래에 생성
install로컬 repository 에 패키지를 배포
의존성 있는 다른 프로젝트에서 local repository에 존재하는 패키지 참조할수 있게 됨
deploy원격 repository에 등록하며 다른 프로젝트에서 사용할수 있도록 한다.
cleantarget 디렉토리의 결과물을 모두 제거

port를 0으로 설정하면

server:
	port: 0

server 포트 번호가 랜덤으로 부여된다.
포트 번호 충돌을 신경쓰지 않아도 되는 장점이 있다.

다만 instance-id를 다르게 주어야 한다.

eureka:
  instance:
    instance-id: ${spring.cloud.client.hostname}:${spring.application.instance_id:${random.value}}

최종 applcation.yml

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 # EUREKA 서버로부터 인스턴스들의 정보를 주기적으로 가져온다고 설정
    fetch-registry: true
    service-url:
      defaultZone: http://172.30.1.43:8761/eureka
profile
아침형 인간이 목표

0개의 댓글