Spring Cloud Netflix Eureka

최준호·2021년 7월 6일
0

2021 msa

목록 보기
2/10

Spring Cloud Netflix Eureka

Spring Cloud Netflix Eureka는 Service Discovery를 수행해주는 제품이다. Service Discovery란 외부에서 마이크로 서비스의 위치를 찾아주기 위한 기능을 말하고 Netflix Eureka는 이를 위해 서비스들을 등록하고 검색하는 기능을 제공한다.

intellij를 통해 예제 만들기

  • Eureka Server 생성
  1. 프로젝트 생성

    이때 spring boot의 버전은 spring cloud가 지원하는 버전으로 pom이나 gradle에서 변경해줘야함.

  2. 서버 설정

    Eureka 서버로 설정하기 위해 내장 was가 실행되는 코드에 @EnableEurekaServer 어노테이션을 추가한다.

  3. yml 설정

  4. 실행

    실행 후 실제 접속하면 유레카에서 제공하는 화면을 확인할 수 있다.

  • 마이크로 서비스 생성
  1. 프로젝트 생성

    위 설정과 동일하나 Dependency가 조금 다르다.

  2. 서버 설정

    위 Eureka server에서는 server로 설정해주는 어노테이션을 사용했다면 이번에는 Client로 설정되는 @EnableDiscoveryClient 어노테이션을 사용해야한다. 이는 @EnableEurekaClient 어노테이션을 사용해도 무방하지만 Spring에서 표준으로 제공하는 @EnableDiscoveryClient를 사용하는것을 더 권장한다.

  3. yml 설정

  4. 실행

    유레카 서버를 띄워놓은 페이지로 접속하게 되면 현재 실행한 서버가 유레카에서 확인할 수 있다.

  • 마이크로 서비스를 2개 생성하여 확인하기
  1. 프로젝트에서 서버 추가

    이미 설정된 서버 설정정보를 복사하여 하나의 서버를 더 생성한다.

  2. 서버 설정
    하지만 이미 9001 포트번호는 사용중이기 때문에

    다음과 같은 설정으로 서버의 포트를 변경할 수 있다.

    • -D는 java에서 설정을 변경하는 옵션이다.
  3. 실행

    유레카를 확인하면 다음과 같이 마이크로 서비스가 2개로 증가된 것을 확인할 수 있다.(=scale up)

  • 서버의 포트번호를 변경하여 실행할 수 있는 다른 방법
    단 이 방법은 자바와 maven 혹은 gradle이 사용자 PC에 설치되어 있어야한다.

    다음 명령어를 intellij terminal에 입력해주면 된다.

    유레카 페이지에서 스케일업된 것을 확인 가능하다. 이 외에도 기존 maven을 이용하여 jar 파일을 생성한 뒤

    java -jar -Dserver.port=포트번호

    위 방법으로 여러 target 파일 내의 jar 파일들을 실행시켜서 확인할 수도 있다.

port 번호 자동 할당

port를 매번 서버를 띄울때마다 옵션을 주면서 띄우기에는 자동화의 개념이 적용되지 않는다. 그래서 spring에서는 port번호를 자동으로 할당하여 서버를 실행시킬 수 있는데

다음과 같이 port: 0 으로 설정하게 되면 스프링이 자동으로 포트번호를 할당하여 서버를 실행시키게된다.

실제로 서버를 실행 후 유레카에서 확인하게 되면

다음과 같이 인스턴스가 실행되어지며 해당 인스턴스 Status에 마우스 커서를 올리면 화면 하단에 포트번호를 확인할 수 있다.

그리고 위에서 학습한 내용 중 인텔리제이 터미널에서 mvn spring-boot:run 명령어로 새로 서버를 또 띄워보게되면 서버는 정상적으로 실행되는데 유레카에서는 서버가 1개로 표시되는 현상을 확인할 수 있다. 이 이유는 현재 작동중인 host address:spring application name:prot로 표시가되어지는데 yml에 포트가 0으로 지정되어 있어 인스턴스가 1개로만 인식되어진다. 그래서 yml에 추가 정보를 입력해야한다.

yml에 다음과 같은 설정을 해주고
${spring.cloud.client.hostname}:${spring.application.instance_id:${random.value}}

instance id값을 랜덤으로 설정할 수 있게 해준다. 그 이후 다시 두개의 서버를 띄워보자.

정상적으로 다른 아이디값과 포트값을 가지며 서버가 2대로 인식되는 것을 확인할 수 있다.

출처 : 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

profile
코딩을 깔끔하게 하고 싶어하는 초보 개발자 (편하게 글을 쓰기위해 반말체를 사용하고 있습니다! 양해 부탁드려요!) 현재 KakaoVX 근무중입니다!

0개의 댓글