약 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: "*"
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)
'한이음 프로젝트' 카테고리의 다른 글
[한이음]Controller는 SRP(단일 책임 원칙)을 지키는걸까..? (1) | 2022.08.11 |
---|---|
[한이음]MSA프로젝트(3)- 서비스 호출 구현 (2) | 2022.08.03 |
[한이음] CI/CD 와 S3 (0) | 2022.07.27 |
[한이음] CI/CD (0) | 2022.07.27 |
[한이음] MSA 프로젝트 - (1)MSA가 무엇인가 (0) | 2022.06.18 |