카테고리 없음

[MSA] Spring Cloud Config - Spring Cloud Gateway 연동하기 (2)

jimkwon 2022. 7. 20. 16:42
반응형

https://born2bedeveloper.tistory.com/61

 

[MSA] Spring Cloud Config - MicroService 연동하기 (1)

++) Spring Cloud Config 에 대한 기본 개념 정리 링크 https://born2bedeveloper.tistory.com/60 [MSA] Spring Cloud Config - (5) 이전에는 MSA구조 중 API Gateway Service에 대해 다뤘다. 이번에는 Config 정..

born2bedeveloper.tistory.com

++) 이전 포스팅 링크

 

이전 포스팅에서는 Spring Cloud Config를 Eureka에 등록된 MicroService와 직접적으로 연결했다.

이번에는 Gateway를 통해 적용하는 방법을 다뤄보고자 한다.

 

 Spring Cloud Gateway 프로젝트 수정

 

해당 Gateway 프로젝트는 이곳 을 참고할 수 있다. 각자가 만든 gateway 프로젝트를 참고해도 상관없다.

 

		<dependency>
			<groupId>org.springframework.cloud</groupId>
			<artifactId>spring-cloud-starter-config</artifactId>
		</dependency>
		<dependency>
			<groupId>org.springframework.cloud</groupId>
			<artifactId>spring-cloud-starter-bootstrap</artifactId>
		</dependency>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-actuator</artifactId>
		</dependency>

Gateway 프로젝트 pom.xml 파일에 다음 세 가지 dependency를 추가하자.

그 후 main/java/resources에 bootstrap.yml 파일을 만든다.

uri의 경우 여러분들이 추가한 spring cloud config 서버의 주소를 기입하고,

name의 경우 외부에서 만든 설정파일의 이름을 기입하자.

아직 config 서비스를 만들지 못했다면 이곳을 참고할 것

 

기존 api gateway의 설정파일과 application 컨트롤러를 아래와 같이 설정하자

아래에 해당 Bean을 추가시키는 이유는 httptrace 기능을 사용하기 위함이다.

 

이제 routes에 Config Server를 연결해주자!

참고로 id 상위구조는 

spring:
  cloud:
    gateway:
      routes:

아래와 같은 계층으로 되어있음

위 내용은 필자가 만든 user-service로 actuator관련 요청을 보내는 길을 mapping해주고, user-service 단어는 uri에 같이 넘어가지 않도록 처리해준 것이다.

즉, user-service/actuator/beans 요청을 보내면 gateway가 user-service로 /actuator/beans요청을 전달해준다.

 

이제 설정파일을 다음과 같이 변경해주고

git에 add, commit을 해준 뒤

eureka, user-serivce, cofig-service, apigateway-service를 모두 구동해주자.

 

Postman을 통해 actuator로 추가한 기능 health, beans가 gateway에서도 잘 돌아가는지 실험해보자.

굿!

 

 profile 적용 - Multiple environments

 

지금까지는 ecommerce.yml 파일을 공통적으로 user-service, geteway에 적용했다.

만약 각 서비스마다 다른 설정파일을 지정하고 싶다면?

각각 프로젝트에 직접 넣을수도 있겠지만, 뭔가 비효율적이다.

 

이 때, 사용할 수 있는것이 profile이다.

 

3 가지의 yml 파일을 profile에 따라 나눠보자

  • ecommerce-dev.yml
  • ecommerce-uat.yml
  • ecommerce-prod.yml

각 파일들의 profile에 따라 구분해서 서비스에 각각 적용시킬 수 있다.

한번 적용해보자.

 

 

 

왼쪽과 같이 같은 내용의 yml파일을 만들고, profile대로 구분하여

token-secret값을 작성했다.

 

profile을 선정하지 않는다면 기본적으로 default값을 따라

ecommerce.yml을 선택할 것이다.

 

저장을 위해 git add, commit 과정을 수행하는 것을 잊지 말것!

(vscode 내에서도 파일을 저장하지 않으면 갱신이 되지 않으니 주의하자)

 

 

 

 

 

 

 

해당 profile를 위에 같이 등록하자. 필자는 user-service를 dev로, api gateway는 prod로 등록했다.

이제 다시 프로젝트를 구동하고 debugger로 살펴보자!

 

 

잘 보면 token.secret값이 Apigateway에서는 token_prod로 무사히 잘 설정되어있음을 알 수 있다!

 

이렇게 다양한 형태의 profile 설정을 통해 서비스에 각각 다른 설정 정보를 적용할 수 있다.

bootstrap.yml -> application.yml 순으로 우선적으로 적용될것이다.

 

 

[참고 레퍼런스]

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/