spring 을 사용하면서 MSA로 전환한다면 Spring Cloud 를 활용 할 수 있다.
Spring cloud 를 사용하면 다음과 같은 MSA의 단점을 극복 할 수 있다.
MSA는 다음과같이 클라이언트의 요청을 받으면 API Gateway를 통해
각 서비스를 이용할 수 있다.
다수의 MS 가 가지고있는 환경들을 중앙집중 형태로 관리하기 위해서 Spring Cloud Config를 사용한다.
config 또한 하나의 MicroService이다. 설정 방법은 아래 와같다
github repository에 원하는 yml 설정을 세팅해준다.
spring cloud server 의존성 주입을 해주고 프로젝트 생성
application.yml 설정을 아래와 같이 해준다
server:
port: 9900
spring:
cloud:
config:
server:
git:
uri: https://github.com/choideakook/CloudConfig
config server의 포트는 9900 이고 spring cloud config로 동작하는데 git을 사용하고 해당 uri는 다음과 같다는 의미
응답에 성공했다는 메시지와 config server log 상에서 아래와 같이
2023-05-13T16:28:42.367+09:00 INFO 44400 --- [nio-9900-exec-7] o.s.c.c.s.e.NativeEnvironmentRepository : Adding property source: Config resource 'file [/var/folders/dm/kzd96t2j09j627t49wk7rhqw0000gn/T/config-repo-16754938457828452995/config-view-dev.yml]' via location 'file:/var/folders/dm/kzd96t2j09j627t49wk7rhqw0000gn/T/config-repo-16754938457828452995/'
Adding property source: Config resource 'file [/var/folders/dm/kzd96t2j09j627t49wk7rhqw0000gn/T/config-repo-16754938457828452995/config-view-dev.yml]'
라는 메시지를 확인 할 수있다.
디펜던시에 추가
implementation 'org.springframework.cloud:spring-cloud-starter-config'
implementation 'org.springframework.boot:spring-boot-starter-actuator'
application.yml 설정
server:
port: 9991
spring:
application:
name: config-view-dev [해당 yml 이름]
config:
import: optional:configserver: [configserver] 주소
테스트를위한 controller
@RestController
public class ConfigController {
@Value("${custom.con}")
private String name;
@GetMapping("/test")
public String test() {
return name;
}
}
custom.con 값은 config-view-dev.yml 에서 설정 했음
spring:
mvc:
hidden-method:
filter:
enabled: true
jasypt:
encryptor:
bean: jasyptStringEncryptor
custom:
con: connection success!
연결 성공된걸 확인 할 수있다.
MSA를 적용할때 공통된 yml를 관리할때 중앙집중식으로 관리 할 수있다는 것.
yml 을 저장소에 모아두고 관리하니 정말 편리했다. 실제 프로젝트에 전환중에 문제점이 있었는데 Spring Cloud Config 적용시 문제점 에 정리를 해놨다. 편리한 기술은 그만큼 알아야 적용할 수 있는거고 자세한 동작과정 을 알아야 문제 해결능력을 향상 시킬 수 있다는걸 느꼈다.
참조
https://www.youtube.com/watch?v=utpU00trFb8&list=PLOSNUO27qFbv95vD0Cc5Vwtro4vcMZGiy&index=16