๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

๐Ÿ“”๊ฐ•์˜ ์ •๋ฆฌ ๋…ธํŠธ

[Spring Cloud๋กœ ๊ตฌํ˜„ํ•˜๋Š” ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค]Section.7 Configuration Service

application๋‚ด๋ถ€์—์„œ ๊ตฌ์„ฑ์ •๋ณด๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ๊ฒƒ์ด ์•„๋‹Œ ์™ธ๋ถ€ ์‹œ์Šคํ…œ์„ ํ†ตํ•ด์„œ ๊ตฌ์„ฑ์ •๋ณด๋ฅผ ๊ด€๋ฆฌํ•˜๋„๋ก ํ•จ.

Spring Cloud Config

  • ๋ถ„์‚ฐ ์‹œ์Šคํ…œ์—์„œ ์„œ๋ฒ„, ํด๋ผ์ด์–ธํŠธ ๊ตฌ์„ฑ์— ํ•„์š”ํ•œ ์ •๋ณด๋ฅผ ์™ธ๋ถ€ ์‹œ์Šคํ…œ์—์„œ ๊ด€๋ฆฌ
  • ํ•˜๋‚˜์˜ ์ค‘์•™ํ™” ๋œ ์ €์žฅ์†Œ์—์„œ ๊ตฌ์„ฑ์š”์†Œ ๊ด€๋ฆฌ ๊ธฐ๋Šฅ
  • ๊ฐ ์„œ๋น„์Šค๋ฅผ ๋‹ค์‹œ ๋นŒ๋“œํ•˜์ง€ ์•Š๊ณ , ๋ฐ”๋กœ ์ ์‘ ๊ฐ€๋Šฅ
  • ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋ฐฐํฌ ํŒŒ์ดํ”„๋ผ์ธ์„ ํ†ตํ•ด DEV-UAT-PRODํ™˜๊ฒฝ์— ๋งž๋Š” ๊ตฌ์„ฑ ์ •๋ณด ์‚ฌ์šฉ

ํ˜•์ƒ๊ด€๋ฆฌ, ์•”ํ˜ธํ™”๋œ ๋ฐ์ดํ„ฐ, ํŒŒ์ผ์ €์žฅ์†Œ ๊ฐ๊ฐ์— ์„ค์ • ์ •๋ณด๋ฅผ ํ•œ๋ฐ ๋ชจ์•„ ์ ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

๋˜ํ•œ ๋ชจ์•„์ง„ ์„ค์ • ์ •๋ณด๋ฅผ DEV, PROD ํ™˜๊ฒฝ์— ๋งž๊ฒŒ ์„ค์ •ํ•  ์ˆ˜๋„ ์žˆ๋‹ค. (application-dev.yml, application-prod.yml)

Changed configuration values (๋ณ€๊ฒฝ๋œ Configuration ์ •๋ณด ์ ์šฉ)

  • ์„œ๋ฒ„ ์žฌ๊ธฐ๋™
  • Actuator refresh (Spring Boot Actuator ์‚ฌ์šฉ, Application ์ƒํƒœ, ๋ชจ๋‹ˆํ„ฐ๋ง)
  • Spring Cloud bus ์‚ฌ์šฉ

 

Spring Cloud Config ์„ค์ •

<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-config-server</artifactId>
</dependency>

spring-cloud-config ๋””ํŽœ๋˜์‹œ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” config ์„œ๋ฒ„๋ฅผ ๊ตฌ์„ฑํ•œ๋‹ค.

์„œ๋ฒ„์˜ application.yml ํŒŒ์ผ์€ ์•„๋ž˜ ์ •๋ณด๋“ค์„ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค.

  • config์„œ๋ฒ„ ํฌํŠธ์ •๋ณด, ์ด๋ฆ„
  • cloud.config.server.native.uri ์ •๋ณด (์„ค์ •ํŒŒ์ผ ์œ„์น˜)
server:
  port: 8888

spring:
  application:
    name: config-service
  profiles:
    active: native
  cloud:
    config:
      server:
        native:
          search-locations: file://${user.home}/Desktop/inflearn/leedowon/SpringCloud/native-file-repo
        git:
#          uri: file:///Users/yunhwan/Desktop/inflearn/leedowon/SpringCloud/git-local-repo
          uri: https://github.com/Parkyunhwan/spring-cloud-config.git
#          username: private repo ์‚ฌ์šฉ ์‹œ
#          password:

uri์ •๋ณด์— ๋‹ด๊ธด ์œ„์น˜์— ์›ํ•˜๋Š” ์„ค์ •ํŒŒ์ผ๋“ค์„ ์ €์žฅํ•ด๋‘˜ ์ˆ˜ ์žˆ๋‹ค.

 

์œ„ ๊ทธ๋ฆผ์ฒ˜๋Ÿผ ํ•ด๋‹น์œ„์น˜์— dev, prod, (default) ์ƒํ™ฉ์— ๋งž์ถฐ์„œ ์„ค์ •ํŒŒ์ผ์„ ์„ค์ •ํ•  ์ˆ˜ ์žˆ๋‹ค.

๊ฐ๊ฐ์˜ ํŒŒ์ผ ๋‚ด๋ถ€์˜ ์„ค์ •๊ฐ’์€ ๋‹ฌ๋ผ์งˆ ์ˆ˜ ์žˆ๋‹ค.

Actuator Refresh ์‚ฌ์šฉํ•˜๊ธฐ

User-service ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค์— ๋””ํŽœ๋˜์‹œ๋ฅผ ์ถ”๊ฐ€ํ•˜์ž.

config, actuator, bootstrap์ถ”๊ฐ€.

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

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

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

 

bootstrap.yml ํŒŒ์ผ์— ์„ค์ • ์ •๋ณด๋ฅผ ์ถ”๊ฐ€ํ•˜์ž.

config-server์˜ ์ฃผ์†Œ์™€ ๊ฐ€์ ธ์˜ฌ ์„ค์ •์ •๋ณดํŒŒ์ผ ์ด๋ฆ„๊ณผ profile์ •๋ณด๊ฐ€ ์„ค์ •๋˜์–ด์žˆ๋‹ค.

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

 

์ด์ œ user-service์—์„œ๋Š” confing์„œ๋ฒ„์— ์„ค์ •๋œ ํŒŒ์ผ์ •๋ณด๋ฅผ ๊ฐ€์ ธ์™€์„œ config์— ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

๋˜ํ•œ, actuator๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

management:
  endpoints:
    web:
      exposure:
        include: refresh, health, beans # actuator ๋“ฑ๋ก

๋จผ์ € health, beans ์—”๋“œํฌ์ธํŠธ์— ์ ‘๊ทผํ•ด ์ •๋ณด๋ฅผ ์–ป์„ ์ˆ˜ ์žˆ๋‹ค.

 

 

* GET /user-service/actuator/health

   {
      "status": "UP"
   }
 
 
  • GET /user-service/actuator/beans
๋ชจ๋“  ๋นˆ ์ •๋ณด๋“ค..
  • POST /user-service/actuator/refresh

refresh๋ฅผ ํ†ตํ•ด์„œ config์„œ๋ฒ„์—์„œ ๋ฐ”๋€ ์„ค์ • ์ •๋ณด๋ฅผ ํ˜„์žฌ ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค์— ์ ์šฉ์‹œํ‚จ๋‹ค.

 

 

Multiple environments

์‹คํ–‰ํ™˜๊ฒฝ์— ๋”ฐ๋ผ ๋‹ค๋ฅธ ์„ค์ •์ •๋ณด๋ฅผ ์ฐธ์กฐํ•˜๋„๋ก ํ•  ์ˆ˜ ์žˆ๋‹ค.

-> application-dev.yml, application-prod-yml ...๋“ฑ

spring.profiles.active: [value] ๋กœ ์„ค์ •๊ฐ€๋Šฅํ•˜๋ฉฐ active์ƒํƒœ์ธ ์„ค์ •์ •๋ณด๋ฅผ ๊ฐ€์ ธ์™€์„œ ์‚ฌ์šฉํ•˜๊ฒŒ ๋œ๋‹ค.