한이음 프로젝트

[한이음] MSA프로젝트- (2) Eureka 서버&클라이언트 설정

딤섬뮨 2022. 8. 2. 13:09
728x90

약 3달(?)정도 나는 스프링부트를 통해 서비스를 열심히 만들었다. 그래서 이제 이걸 가지고 본격적인 MSA 구축을 해보려고 한다.
첨부된 이미지 같은건 한이음 팀원 분의 코드인데 허락을 구하여 사용한다.

1. 유레카 서버

파일 구조이다.

MSA를 위해 서비스 디스커버리로 유레카 서버를 만들어줘야 한다.

다음 의존성을 다운 받아준다

  • 유레카 서버 - eureka-server
   implementation 'org.springframework.cloud:spring-cloud-starter-netflix-eureka-server'


유레카 서버는 서비스들과 별개의 모듈을 생성해주어야한다. 그 후 application.yml 속성을 정의해주어야한다.

server:
  port: 8761 // 접속할 포트 번호

spring:
  application:
    name: bbl-eureka

eureka:
  client:
    register-with-eureka: false # 유레카 서비스에 (자신을) 등록 여부
    fetch-registry: false  # 레지스트리 정보를 로컬에 캐싱하지 않는다. (유레카 클라이언트 기반) 로컬 캐싱 여부
    serviceUrl:
      defaultZone: http://localhost:8761/eureka/ # 설정을 하지 않으면 기본 http://localhost:8761/ 로 연동된다.
  server:
    wait-time-in-ms-when-sync-empty: 5  # 서버가 요청을 받기 전 대기할 초기 시간(ms) : 거의 대기 없음 (default 5분 : 상용에서는 모든 서비스가 등록 되길 기다리기 위해 5분 후 정보를 공유)
    response-cache-update-interval-ms: 3000 # 서비스에게 제공을 위해Eureka는 서비스들의 정보를 캐싱하며, 캐싱을 업데이트하는 주기를 설정한다.

management:
  endpoint:
    shutdown:
      enabled: true
  endpoints:
    web:
      exposure:
        include: "*"


그 후 application에 @EnableEurekaServer라고 어노테이션에 붙어주면 끝

@EnableEurekaServer
@SpringBootApplication
public class BblEurekaApplication {

    public static void main(String[] args) {
        SpringApplication.run(BblEurekaApplication.class, args);
    }

}




localhost:8761로 접속하면 성공 -> 근데 이거 주소를 분명 설정했는데 왜 디폴트로 들어가는지는 해결 못함

 

2. 서비스(유레카 클라이언트)

  • 서비스들 - eureka client
    implementation 'org.springframework.cloud:spring-cloud-starter-netflix-eureka-client'
  • application.yml
server:
  port: 8011
 
spring:
  application:
   name: bbl-career
eureka:
  instance:
    prefer-ip-address: true
  client:
    register-with-eureka: true # 유레카 서비스에 (자신을) 등록 여부
    fetch-registry: true
    serviceUrl:
      defaultZone: http://localhost:8761/eureka/
 
management:
  endpoints:
    web:
      exposure:
        include: "*"
 
spring.application.name :  통신을 할때는 IP:PORT 대신 각 서비스의 고유ID, 즉 어플리케이션 이름로 한다고 하였다.여기서 쓰이는 값

prefer-ip-address : 유레카서버에 어플리케이션이름에 매핑되는 호스트명이 기본적으로 등록되게 된다. 이 값의 설정으로 호스트명이 아닌 IP 주소를 대신 등록하겠다는 것.
그 이유는 컨테이너 기반의 MSA 환경에서 보통 DNS서버가 없기에 임의로 생성된 호스트 네임을 부여 받는다. 이는 결국 생성된 호스트 네임의 정상적인 위치를 얻지 못할수 있기에 명확한 IP로 등록해 달라고 지정하는 것.

defaultZone : 등록할 유레카 서버의 위치를 지정.

yml 파일을 설정한 뒤 서비스 애플리케이션에 @EnableEurekaClient를 붙여준다

@SpringBootApplication
@EnableJpaAuditing
@EnableFeignClients 
@EnableEurekaClient //유레카 클라이언트 설정
public class BblCareerApplication {

	public static void main(String[] args) {
		SpringApplication.run(BblCareerApplication.class, args);
	}

}


이렇게 유레카 서버와 클라이언트 설정은 끝
연동해서 데이터를 가져오는건 다음 장에..to be continue





출처 - 5. [MSA 구현 퀵스타트] 서비스 디스커버리 초간단 구현 (tistory.com)

728x90