[Spring Cloud] Spring Cloud Config 연동

jsieon97·2023년 3월 15일
0

User Serivce 연동

Dependenies 추가 (User Service)

  • spring-cloud-starter-config
  • spring-cloud-starter-bootstrap
    • or) spring.cloud.bootstrap.enabled=true
application.yml에 token정보를 주석처리 or 삭제한다

UserService에서 resource에 bootstrap.yml 추가

bootstrap.yml은 application.yml보다 우선순위가 높다.
// bootstrap.yml

spring:
	cloud:
    	config:
        	uri:http://127.0.0.1:8888
            name: ecommerce

확인을 위한 Controller 수정

// UserController.java

@GetMapping("/health_check")
    public String status() {
        return String.format("It's Working in User Service"
                + ", port(local.server.port)=" + env.getProperty("local.server.port")
                + ", port(server.port)=" + env.getProperty("server.port")
                + ", token secret=" + env.getProperty("token.secret")
                + ", token expiration time=" + env.getProperty("token.expiration_time"));
    }

결과


ecommerce.yml에 작성된 정보를 뱉어내는 것을 볼 수 있다.

Configuration 변경 시 적용법

  • 서버 재기동
  • Auctuator refresh
    • Spring Boot Auctuator
      • Application 상태, 모니터링
      • Metric 수집을 위한 Http End Point 제공
      • 사용 시 Denpendencies 추가
  • Spring Cloud Bus 사용

API Gateway 연동

Dependenies 추가 (API Gateway)

  • spring-cloud-starter-config
  • spring-cloud-starter-bootstrap
  • spring-boot-starter-actuator

API Gateway에 resource에 bootstrap.yml 추가

// bootstrap.yml

spring:
	cloud:
    	config:
        	uri:http://127.0.0.1:8888
            name: ecommerce

application.yml에 추가

management:
  endpoint:
    web:
      exposure:
        include: refresh, health, beans, httptrace

확인을 위한 ServiceApplcation 수정

// ApigatewayServiceApplication.java

@SpringBootApplication
public class ApigatewayServiceApplication {

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

    @Bean
    public HttpTraceRepository httpTraceRepository() {
        return new InMemoryHttpTraceRepository();
    }
}

테스트

Profiles를 사용

ecommerce.yml파일 위치에 ecommerce-dev.yml, ecommerce-prod.yml 추가

// ecommerce-dev.yml

token:
  expiration_time: 86400000
  secret: my_token_dev

gateway:
  ip: {본인 ip}
// ecommerce-prod.yml

token:
  expiration_time: 86400000
  secret: my_token_prod

gateway:
  ip: {본인 ip}

UserService와 API Gateway의 profiles를 다르게 한다.

// UserService의 bootstrap.yml

spring:
  cloud:
    config:
      uri: http://127.0.0.1:8888
      name: ecommerce
  profiles:
    active: dev
// API Gateway의 bootstrap.yml

spring:
  cloud:
    config:
      uri: http://127.0.0.1:8888
      name: ecommerce
  profiles:
    active: prod

Test

현재는 active되는 토큰이 다르기 때문에 401 에러 발생

profile 세팅을 똑같이 dev로 하고 실행하면

200 OK를 반환하는 것을 볼 수 있다.

Remote Git Repository

로컬에서 경로를 지정해서 활용하는 것보다 git과 연결해서 활용하는 것이 더 사용하기 편하다.

  1. ecommerce.yml 파일들이 저장된 곳을 git에 올린다
  2. ConfigServiceApplication.yml 파일을 수정한다.
spring:
  application:
    name: config-service
  cloud:
    config:
      server:
        git:
          uri: [git repo주소]
          username: [your username] # private 일시 적용
          password: [your password] # private 일시 적용
profile
개발자로써 성장하는 방법

0개의 댓글