๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
  • ์žฅ์›์ต ๊ธฐ์ˆ ๋ธ”๋กœ๊ทธ
๐Ÿ’Š Java & Kotlin & Spring/- spring framework +

Spring Cloud Config ์—์„œ ๋Œ€์นญํ‚ค๋ฅผ ์ด์šฉํ•œ application.yml ์˜ ๋ฏผ๊ฐ ์ •๋ณด ์•”ํ˜ธํ™” ํ•˜๊ธฐ

by Wonit 2021. 4. 27.

ํ•ด๋‹น ๊ธ€์€ Spring Cloud Config์˜ name, profiles ๊ทธ๋ฆฌ๊ณ  Github ๋ฅผ ์—ฐ๋™ํ•ด์„œ ์„ค์ • ํŒŒ์ผ ๊ด€๋ฆฌํ•˜๊ธฐ์— ์˜์กดํ•˜๋Š” ๊ธ€์ž…๋‹ˆ๋‹ค. ์‹ค์Šต ํ™˜๊ฒฝ์„ ๋”ฐ๋ผํ•˜์‹œ๋ ค๋ฉด ์ด์ „ ๊ธ€์— ๋‚˜์˜จ ์‹ค์Šต์„ ๋”ฐ๋ผํ•˜์‹œ๊ธธ ๊ถŒ๊ณ ๋“œ๋ฆฝ๋‹ˆ๋‹ค.

๋ชฉ์ฐจ

  • ๊ธฐ์กด Config Server์˜ ๋ฌธ์ œ์ 
    • ์•”ํ˜ธํ™”๋ฅผ ํ•˜์ง€ ์•Š์€ ์ •๋ณด์˜ ํƒˆ์ทจ ๊ฐ€๋Šฅ์„ฑ
  • ์•”ํ˜ธํ™” ์ข…๋ฅ˜
    • ๋Œ€์นญํ‚ค
    • ๋น„๋Œ€์นญํ‚ค
  • Spring Cloud Config ์˜ encrypt, decrypt
    • encrypt
    • decrypt
  • ์‹ค์Šตํ•˜๊ธฐ
    • ๋Œ€์นญํ‚ค ์ด์šฉํ•˜๊ธฐ

๊ธฐ์กด Config Server์˜ ๋ฌธ์ œ์ 

์ง€๋‚œ ์‹œ๊ฐ„ ์šฐ๋ฆฌ๋Š” github๋ฅผ ์ด์šฉํ•ด์„œ ์›๊ฒฉ ์ €์žฅ์†Œ์— ์„ค์ • ํŒŒ์ผ๋“ค์„ ์ €์žฅํ•ด๋†“๊ณ  Config ์„œ๋ฒ„์—์„œ ๊ฐ€์ ธ๋‹ค๊ฐ€ ๋‹ค๋ฅธ ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค๋กœ ๋ฟŒ๋ ค์ฃผ๋Š” ๊ณผ์ •์„ ์•Œ์•„๋ณด๊ณ  ์ด๋ฅผ ๊ตฌํ˜„ํ•˜์˜€์—ˆ๋‹ค.

 

์šฐ๋ฆฌ์˜ ์›๊ฒฉ ๋ ˆํฌ์ง€ํ† ๋ฆฌ๋กœ ๋‹ค์‹œ ๋“ค์–ด๊ฐ€๋ณด์ž.

 

 

๊ทธ๋Ÿผ ์ด๋ ‡๊ฒŒ ํŒŒ์ผ ๋‚ด๋ถ€์— ์žˆ๋Š” ๋ฏผ๊ฐํ•œ ์ •๋ณด๊ฐ€ ๋ฐ”๋กœ ๋…ธ์ถœ๋œ๋‹ค.

 

๋ฌผ๋ก  ํ•ด๋‹น ๋ ˆํฌ์ง€ํ† ๋ฆฌ๋Š” public repository๋ผ์„œ ๊ทธ๋ ‡๋‹ค! ๋ผ๊ณ  ํ•  ์ˆ˜ ์žˆ๊ฒ ์ง€๋งŒ ๊ทธ๋Ÿผ private ์œผ๋กœ repository ๋ฅผ ๋ณ€๊ฒฝํ•œ๋‹ค๊ณ  ํ•ด์„œ ๋ณด์•ˆ ์œ„ํ˜‘์ด ์‚ฌ๋ผ์ง€๋Š”๊ฑธ๊นŒ?

 

์ด๋ ‡๊ฒŒ ๋‹จ์ง€ ์ˆจ๊ธฐ๋Š” ๋ฐฉ์‹์˜ ๋ณด์•ˆ์€ ์ „ํ˜€ ์•ˆ์ „ํ•˜์ง€ ์•Š๋‹ค.

๋ณด์•ˆ ์ฒ˜๋ฆฌ๋ฅผ ํ–ˆ๋‹ค๋Š” ๊ทธ ์ƒ๊ฐ ๋•Œ๋ฌธ์— ์‚ฌ๋žŒ๋“ค์€ ์•ˆ์‹ฌ์„ ํ•  ์ˆ˜ ์žˆ๋Š”๋ฐ, ์ด๋Š” ์˜คํžˆ๋ ค ์ด๋Ÿฐ ์ˆจ๊ธฐ๋Š” ๋ณด์•ˆ์„ ํ•˜์ง€ ์•Š๋Š” ๊ฒƒ ๋ณด๋‹ค ๋ชปํ•˜๋‹ค.

 

๊ทธ๋Ÿผ ์ด ๋ฌธ์ œ๋Š” ์–ด๋–ป๊ฒŒ ํ•ด๊ฒฐํ•ด์•ผ ํ• ๊นŒ?

 

๋ฐ”๋กœ yml์— ๋“ค์–ด๊ฐˆ ๋ฏผ๊ฐ ์ •๋ณด๋ฅผ ์•”ํ˜ธํ™” ํ•œ๋‹ค๋ฉด ํ•ด๊ฒฐ๋  ๊ฒƒ ๊ฐ™๋‹ค.

์•”ํ˜ธํ™” ์ข…๋ฅ˜

์•”ํ˜ธํ™” ์ข…๋ฅ˜์—๋Š” ํฌ๊ฒŒ 3๊ฐ€์ง€๊ฐ€ ์กด์žฌํ•œ๋‹ค.

  1. ๋Œ€์นญํ‚ค ์•”ํ˜ธ
  2. ๋น„๋Œ€์นญํ‚ค ์•”ํ˜ธ
  3. ๋‹จ๋ฐฉํ–ฅ ์•”ํ˜ธ

์—ฌ๊ธฐ์„œ ๋‹จ๋ฐฉํ–ฅ ์•”ํ˜ธ๋Š” ๋น„๋ฐ€๋ฒˆํ˜ธ๋ฅผ ์ €์žฅํ•  ๋•Œ ํ•ด์‹ฑ์„ ํ•˜์—ฌ ์•”ํ˜ธํ™”๋ฅผ ํ•˜๋Š” ๊ฒƒ์œผ๋กœ ๋‹จ์ง€ ํ‰๋ฌธ์„ ํ•ด๋…ํ•˜์ง€ ๋ชปํ•˜๋„๋กํ•˜๋Š” ๊ฒƒ์ด๋ผ ๋ณตํ˜ธํ™”๊ฐ€ ์‚ฌ์‹ค์ƒ ๋ถˆ๊ฐ€๋Šฅํ•˜๋‹ค๋Š” ์ ์œผ๋กœ ์ผ๋‹จ ์šฐ๋ฆฌ ๋…ผ์ ์—์„œ ๋น ์ง€๊ฒŒ ๋˜๊ณ  ๋Œ€์นญํ‚ค์™€ ๋น„๋Œ€์นญํ‚ค์— ๋Œ€ํ•ด์„œ๋งŒ ์ด์•ผ๊ธฐ๋ฅผ ํ•ด๋ณด์ž.

 

๋Œ€์นญํ‚ค ์•”ํ˜ธ

๋Œ€์นญํ‚ค ์•”ํ˜ธ๋Š” ์•”ํ˜ธํ™” ํ‚ค์™€ ๋ณตํ˜ธํ™” ํ‚ค๊ฐ€ ๊ฐ™์€ ์ ์œผ๋กœ ๊ฐ„ํŽธํ•˜๋‹ค.


๊ฒŒ๋‹ค๊ฐ€ ๋„๋ฆฌ ์“ฐ์ด๋Š” AES๋Š” 128 ~ 256 ๋น„ํŠธ์˜ ํ‚ค๋ฅผ ์ ์šฉํ•  ์ˆ˜ ์žˆ์–ด์„œ ๋ณด์•ˆ์„ฑ์ด ๋›ฐ์–ด๋‚จ๊ณผ ๋™์‹œ์— ๊ณต๊ฐœ๋œ ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด๋ผ ๋ˆ„๊ตฌ๋‚˜ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์ง€๋งŒ ๊ฐ€์žฅ ์น˜๋ช…์ ์ธ ๋‹จ์ ์ด ์กด์žฌํ•œ๋‹ค.

 

๋ฐ”๋กœ ํ‚ค๋ฅผ ์–ด๋–ป๊ฒŒ ๋ฐฐ์†กํ•  ๊ฒƒ์ธ์ง€์— ๋Œ€ํ•œ ๋…ผ์˜์ด๋‹ค.

 

์•„๋ฌด๋ฆฌ ํ›Œ๋ฅญํ•œ ๋ฐฉ์‹์œผ๋กœ ์•”ํ˜ธํ™”๊ฐ€ ๋˜์—ˆ๋‹ค๊ณ  ํ•˜๋”๋ผ๋„ ์•”ํ˜ธํ™”์™€ ๋ณตํ˜ธํ™”์˜ ํ‚ค๊ฐ€ ๋™์ผํ•˜๋ฏ€๋กœ ๋ณตํ˜ธํ™”ํ•˜๋Š” ์ชฝ์— ํ‚ค๋ฅผ ์ „๋‹ฌํ•ด์•ผ ํ•˜๋Š”๋ฐ, ์ด ๊ณผ์ •์—์„œ ํ‚ค๊ฐ€ ๋ˆ„์ถœ๋  ๊ฐ€๋Šฅ์„ฑ์ด ์žˆ๋‹ค.

 

๊ทธ๋Ÿผ ๊ฒฐ๊ตญ ์•”ํ˜ธํ™”๋ฅผ ํ•˜์ง€ ์•Š๋Š” ๊ฒƒ๊ณผ ๊ฐ™์œผ๋ฏ€๋กœ ๋ณด์•ˆ์„ฑ์ด ๋งค์šฐ ๋›ฐ์–ด๋‚˜๋‹ค๊ณ ๋Š” ํ•  ์ˆ˜ ์—†๋‹ค.

 

์ •๋ฆฌ

  • ์•”ํ˜ธํ™” ํ‚ค์™€ ๋ณตํ˜ธํ™”ํ‚ค๊ฐ€ ๊ฐ™๋‹ค
  • ํ‚ค ๋ฐฐ์†ก์— ๋ฌธ์ œ๊ฐ€ ์กด์žฌํ•œ๋‹ค.
  • AES, DES, ARIA

๋น„๋Œ€์นญํ‚ค ์•”ํ˜ธ

๋น„๋Œ€์นญํ‚ค ์•”ํ˜ธ๋Š” ์•”ํ˜ธํ™” ํ‚ค์™€ ๋ณตํ˜ธํ™” ํ‚ค๊ฐ€ ๋‹ค๋ฅธ ๋ฐฉ์‹์ด๋‹ค.

 

๋น„๋Œ€์นญํ‚ค๋Š” ๋ชจ๋‘์—๊ฒŒ ๊ณต๊ฐœ๋œ ๊ณต๊ฐœํ‚ค์™€ ๊ฐœ์ธ๋งŒ ์†Œ์ง€ํ•˜๋Š” ๊ฐœ์ธํ‚ค๋กœ ๊ตฌ์„ฑ๋˜์–ด ์žˆ๋Š”๋ฐ, ์•”ํ˜ธํ™”๋ฅผ ์ˆ˜ํ–‰ํ•  ๋•Œ ๊ณต๊ฐœํ‚ค๋‚˜ ๋น„๋ฐ€ํ‚ค ์ค‘ ํ•˜๋‚˜์˜ ํ‚ค๋กœ ์•”ํ˜ธํ™”๋ฅผ ์ˆ˜ํ–‰ํ•˜๊ณ  ๋ณตํ˜ธํ™”๋Š” ๋ฐ˜๋“œ์‹œ ๊ทธ์˜ ๋ฐ˜๋Œ€ ํ‚ค๋ฅผ ์ด์šฉํ•ด์•ผ ํ•œ๋‹ค.

 

๊ทธ๋Ÿผ ์•ž์„œ ๋งํ•œ ๋Œ€์นญํ‚ค์˜ ๋ฌธ์ œ์ ์ธ ํ‚ค๋ฐฐ์†ก ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋˜์ง€๋งŒ ์ƒ๋Œ€์ ์œผ๋กœ ๋Š๋ฆฐ ๋‹จ์ ๋„ ์กด์žฌํ•œ๋‹ค.

 

๊ทธ๋ž˜์„œ ๋ช‡๋ช‡์˜ ์†”๋ฃจ์…˜์—์„œ๋Š” ๋น„๋Œ€์นญ ์•”ํ˜ธ๋ฅผ ์ด์šฉํ•ด์„œ ๋Œ€์นญ ํ‚ค๋ฅผ ๋ฐฐ์†กํ•˜๊ณ  ์‹ค์ œ ์•”ํ˜ธ๋ฌธ์€ ๋Œ€์นญํ‚ค ์•”ํ˜ธ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์‹์œผ๋กœ ์šด์˜ํ•˜๊ธฐ๋„ ํ•œ๋‹ค.

 

์šฐ๋ฆฌ ์‹ค์Šต์€ ๋น„๋Œ€์นญํ‚ค๋ฅผ ์ด์šฉํ•˜์ง€ ์•Š๊ณ  ๋Œ€์นญํ‚ค๋งŒ ์ด์šฉํ•˜๋Š” ๊ฒƒ์œผ๋กœ ๋ณด์—ฌ์ค„ ๊ฒƒ์ด๋‹ค. ๋น„๋Œ€์นญํ‚ค๋ฅผ ์ด์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•๋„ ๋Œ€์นญํ‚ค๋ฅผ ์ด์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•๊ณผ๋Š” ํฌ๊ฒŒ ๋ฒ—์–ด๋‚˜์ง€ ์•Š๋Š”๋‹ค.

 

์ •๋ฆฌ

  • ์•”ํ˜ธํ™” ํ‚ค์™€ ๋ณตํ™”ํ™”ํ‚ค๊ฐ€ ๋‹ค๋ฅธ ๊ณต๊ฐœํ‚ค ๋ฐฉ์‹์ด๋‹ค.
  • ์•”๋ณตํ˜ธ์— ์‹œ๊ฐ„์ด ์†Œ์š”๋œ๋‹ค.
  • RSA, DSS, Rabin

Spring Cloud Config ์˜ encrypt, decrypt

Spring Cloud Config ์—๋Š” ์—ฌ๋Ÿฌ ํŠน์ง•๋“ค์ด ์กด์žฌํ•˜๋Š”๋ฐ, ๊ทธ ์ค‘์—์„œ encrypt์™€ decrypt ์— ๋Œ€ํ•ด์„œ ์•Œ์•„๋ณด์ž.

 

 

Spring Cloud Config ์—์„œ๋Š” ์„ค์ • ํŒŒ์ผ ์›๋ณธ์— {cipher} ์ด๋ผ๋Š” ๋ฌธ์ž์—ด์ด ์กด์žฌํ•œ๋‹ค๋ฉด ํ•ด๋‹น ๋ฌธ์ž์—ด์€ ์•”ํ˜ธํ™” ๋œ ๊ฒƒ์œผ๋กœ ํŒ๋‹จํ•˜๊ณ  ๊ฐ๊ธฐ ๋‹ค๋ฅธ ์„œ๋ฒ„์— ์„ค์ • ์ •๋ณด๋ฅผ ๋‚ด๋ฆด ๋•Œ, ํ•ด๋‹น ์•”ํ˜ธ๋ฌธ์„ ๋ณตํ˜ธํ™”ํ•˜์—ฌ ๋‚ด๋ ค์ค€๋‹ค.

 

์ฆ‰, git ์ €์žฅ์†Œ์— ๋‹ค์Œ๊ณผ ๊ฐ™์ด ํŒŒ์ผ์ด ์ €์žฅ๋˜์–ด ์žˆ๋‹ค๋ฉด

 

spring:
  datasource:
    username: test
    password: "{cipher}FKSAJDFGYOS8F7GLHAKERGFHLSAJ"

 

spring cloud config ๊ฐ€ ์ด ์•”ํ˜ธ๋ฌธ์„ ํ•ด๋…ํ•˜๊ธฐ ์‹œ์ž‘ํ•˜๋Š”๋ฐ, ๋งŒ์•ฝ ํ‚ค๊ฐ€ ์กด์žฌํ•˜๊ณ  ํ•ด๋‹น ์•”ํ˜ธ๋ฌธ์ด ๋ณตํ˜ธํ™”๊ฐ€ ๊ฐ€๋Šฅํ•˜๋‹ค๋ฉด ์•„๋ž˜์™€ ๊ฐ™์ด ์ •์ƒ์ ์ธ ๋ฌธ์ž์—ด๋กœ ๋ฐ˜ํ™˜ํ•ด์„œ ์‘๋‹ตํ•ด์ค€๋‹ค.

 

spring:
  datasource:
    username: test
    password: test1234

 

ํ•˜์ง€๋งŒ ํ•ด๋‹น ์•”ํ˜ธ๋ฌธ์ด ํ‚ค๊ฐ€ ์ผ์น˜ํ•˜์ง€ ์•Š๊ฑฐ๋‚˜ ํ•˜๋Š” ์ด์œ ๋กœ ๋ณตํ˜ธํ™”๊ฐ€ ๋ถˆ๊ฐ€๋Šฅํ•˜๋ฉด n/a ๋ผ๋Š” ๋ฌธ์ž์—ด์„ ๋ฐ˜ํ™˜์‹œ์ผœ์ค€๋‹ค.

 

/encrypt ์™€ /decrypt ์—”๋“œํฌ์ธํŠธ

์šฐ๋ฆฌ๋Š” ์ง์ ‘ ํ•ด๋‹น ์•”ํ˜ธํ™”์™€ ๋ณตํ˜ธํ™”๋ฅผ config ์„œ๋ฒ„๋ฅผ ํ†ตํ•ด์„œ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ๋Š”๋ฐ, ๊ธฐ๋ณธ์ ์œผ๋กœ ์ œ๊ณต๋˜๋Š” url ์„ ์ด์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

  • ์•”ํ˜ธํ™” : http://config-server.com/encrypt : POST
  • ๋ณตํ˜ธํ™” : http://config-server.com/decrypt : POST

ํ•˜์ง€๋งŒ ์ด ์—”๋“œํฌ์ธํŠธ๋Š” ๊ทธ๋ƒฅ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†๋‹ค.

 

์ ์ ˆํ•œ key store๊ฐ€ ์กด์žฌํ•ด์•ผ ํ•˜๋Š”๋ฐ, ๋งŒ์•ฝ key store์ด ์กด์žฌํ•˜์ง€ ์•Š๋‹ค๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์—๋Ÿฌ๋ฅผ ๋งŒ๋‚  ๊ฒƒ์ด๋‹ค.

 

์‹ค์Šตํ•˜๊ธฐ

๊ทธ๋Ÿผ ์šฐ๋ฆฌ๋Š” Config ์„œ๋ฒ„์— ์กด์žฌํ•˜๋Š” ์„ค์ • ํŒŒ์ผ์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์–ด๋–ป๊ฒŒ ๊ฐ๊ฐ ์•”ํ˜ธํ• ๊นŒ?

 

์šฐ์„  ์šฐ๋ฆฌ๋Š” ์ง€๋‚œ ์‹œ๊ฐ„๋™์•ˆ user-service ์—๊ฒŒ 2๊ฐœ์˜ ์„ค์ • ์ •๋ณด๋ฅผ ๋„˜๊ฒผ๋‹ค.


์—ฌ๊ธฐ์„œ ์กฐ๊ธˆ ๋ณ€๊ฒฝํ•ด์„œ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์ •๋ณด๋ฅผ ๋„˜๊ธด๋‹ค๊ณ  ํ•ด๋ณด์ž.

 

# application.yml
default:
  owner: config-service's git folder
  content: :) ์•ˆ๋…•ํ•˜์„ธ์š” ๊ฐ๊ฐ์˜ ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค์—์„œ ์‚ฌ์šฉ๋  ๋ฐ์ดํ„ฐ์ž…๋‹ˆ๋‹ค.

# user-service.yml
jwt:
  token:
    key: my_token_secret_key

# user-service-test.yml
spring:
  datasource:
    driver: com.mysql.jdbc.Driver
    url: http://db.com
    username: test
    password: test

์•ž์„œ ์ด์•ผ๊ธฐํ–ˆ๋“ฏ, ํ•ด๋‹น ์‹ค์Šต์€ ์ง€๋‚œ ์‹œ๊ฐ„ Spring Cloud Config์˜ name, profiles ๊ทธ๋ฆฌ๊ณ  Github ๋ฅผ ์—ฐ๋™ํ•ด์„œ ์„ค์ • ํŒŒ์ผ ๊ด€๋ฆฌํ•˜๊ธฐ์— ์˜์กดํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ๋งŒ์•ฝ ์‹ค์Šต์„ ๋”ฐ๋ผํ•˜์‹œ๊ธธ ์›ํ•˜์‹ ๋‹ค๋ฉด ์ง€๋‚œ ์‹œ๊ฐ„์˜ ๊ธ€์„ ์ฐธ๊ณ ํ•ด์ฃผ์„ธ์š”

 

user-service ์—์„œ๋Š” http://config-servcer.com/user-service/test ๋ฅผ ํ˜ธ์ถœํ•˜์—ฌ yml ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐ›์•„์˜ฌ ๊ฒƒ์ธ๋ฐ, ์–ด๋–ค ๋ฐ์ดํ„ฐ๊ฐ€ ๋„˜์–ด์˜ค๋Š”์ง€ ํ™•์ธํ•ด๋ณด์ž.

 

 

์—ฌ๊ธฐ์„œ ๋ฏผ๊ฐ ์ •๋ณด๋ผ๊ณ  ํ•œ๋‹ค๋ฉด ๋ญ ๋‹ค์–‘ํ•œ ๊ฒƒ๋“ค์ด ๋ฏผ๊ฐํ•˜๊ฒ ์ง€๋งŒ ๊ทธ ์ค‘์—์„œ ํ† ํฐ ๊ฐ’๋งŒ ์•”ํ˜ธํ™”๋ฅผ ํ•ด๋ณด๋„๋ก ํ•˜์ž

 

  • user-service.yml์˜ jwt.token.key

๋Œ€์นญํ‚ค๋กœ ์„ค์ •์ •๋ณด ์•”ํ˜ธํ™” ํ•˜๊ธฐ

๋Œ€์นญํ‚ค๋กœ ์œ„์˜ ์ •๋ณด๋“ค์„ ์•”ํ˜ธํ™” ํ•ด๋ณด์ž.

 

์ˆœ์„œ

  1. bootstrap.yml์„ ์ด์šฉํ•ด key store ์ถ”๊ฐ€ํ•˜๊ธฐ
  2. bootstrap ์˜์กด์„ฑ ์ถ”๊ฐ€ํ•˜๊ธฐ
  3. bootstrap.yml์— ํ‚ค ์ €์žฅํ•˜๊ธฐ
  4. /encrypt, /decrypt ์—”๋“œํฌ์ธํŠธ ์‚ฌ์šฉํ•ด์„œ ์•”ํ˜ธํ™”ํ•˜๊ธฐ
  5. yml ํŒŒ์ผ์— ์•”ํ˜ธํ™”๋œ ๋ฌธ์ž์—ด์„ ๋„ฃ๊ณ  ์‘๋‹ต์œผ๋กœ ๋ณตํ˜ธํ™”๋œ ๋ฌธ์ž์—ด ๋ฐ›๊ธฐ

bootstrap.yml์„ ์ด์šฉํ•ด key store ์ถ”๊ฐ€ํ•˜๊ธฐ

์šฐ์„  ๋Œ€์นญํ‚ค๋กœ ์•”ํ˜ธํ™”๋ฅผ ์ˆ˜ํ–‰ํ•˜์—ฌ /encrypt, /decrypt ๋ฅผ ์ด์šฉํ•œ๋‹ค๋ฉด ์•ž์„œ ๋ณธ๊ฒƒ์ฒ˜๋Ÿผ key store ์ด ์กด์žฌํ•ด์•ผ ํ•œ๋‹ค.

 

๋จผ์ € bootstrap.yml ์„ application.yml๊ณผ ๊ฐ™์€ depth ์— ์ƒ์„ฑํ•ด์ฃผ์ž.


์šฐ๋ฆฌ๋Š” bootstrap.yml์— ์šฐ๋ฆฌ์˜ ๋Œ€์นญ ํ‚ค๋ฅผ ๋„ฃ์–ด์ค„ ๊ฒƒ์ด๋‹ค.

 

์˜์กด์„ฑ ์ถ”๊ฐ€ํ•˜๊ธฐ

์ง€๋‚œ๋ฒˆ ์–ธ๊ธ‰ํ–ˆ์ง€๋งŒ bootstrap.yml์€ application.yml ๋ณด๋‹ค ๋จผ์ € ๋กœ๋“œ๋˜๊ธฐ ์ „์— ์–ด๋– ํ•œ ์„ค์ • ์ •๋ณด๋ฅผ ์ฃผ์ž…ํ•˜๊ธฐ ์œ„ํ•ด์„œ ์‚ฌ์šฉ๋œ๋‹ค.


ํ•˜์ง€๋งŒ Spring Cloud ์—์„œ๋Š” bootstrap.yml ์˜์กด์„ฑ์ด ๊ธฐ๋ณธ์ ์œผ๋กœ ๋“ค์–ด์žˆ์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— build.gradle ์— ๋‹ค์Œ ์ •๋ณด๋ฅผ ์ถ”๊ฐ€ํ•ด์ฃผ์ž.

 

implementation 'org.springframework.cloud:spring-cloud-starter-bootstrap'

bootstrap.yml์— ํ‚ค ์ €์žฅํ•˜๊ธฐ

๊ทธ๋ฆฌ๊ณ  bootstrap.yml ์— ๋‹ค์Œ๊ณผ ๊ฐ™์ด ํ‚ค๋ฅผ ์ €์žฅํ•ด์ฃผ์ž.

 

encrypt:
  key: my_symmetric_key

 

IDE ์—์„œ ํ•ด๋‹น ์„ค์ •์„ ํ•œ๋‹ค๋ฉด symmetric (๋Œ€์นญํ‚ค)๋ฅผ ์ด์šฉํ•œ๋‹ค๊ณ  ์•Œ๋ ค์ค€๋‹ค.

 

/encrypt, /decrypt ์—”๋“œํฌ์ธํŠธ ์‚ฌ์šฉํ•˜๊ธฐ

  • ์•”ํ˜ธํ™” : http://config-server.com/encrypt POST
  • ๋ณตํ˜ธํ™” : http://config-server.com/decrypt POST

๋ฅผ ์ด์šฉํ•ด์„œ body ์— ์•”ํ˜ธํ™”๋ฅผ ํ•  ๋ฐ์ดํ„ฐ๋ฅผ ๋„ฃ๊ณ  ์š”์ฒญ์„ ๋ณด๋‚ด๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์•”ํ˜ธํ™”๋œ ๋ฌธ์ž์—ด์„ ๋ฐ˜ํ™˜ํ•ด์ฃผ๋Š”๋ฐ, ์šฐ๋ฆฌ์˜ user-service.yml ์— ์žˆ๋Š” ํ† ํฐ ๊ฐ’์„ ์•”ํ˜ธํ™” ํ•ด๋ณด์ž.

 

๊ทธ๋Ÿผ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์•”ํ˜ธํ™”๋œ ๋ฐ์ดํ„ฐ๊ฐ€ ๋‚˜์˜ค๊ฒŒ ๋œ๋‹ค.

 

์šฐ๋ฆฌ๋Š” Config ์„œ๋ฒ„์—์„œ ํ•ด๋‹น ๋ฌธ์ž์—ด์„ ์ฝ์„ ๋•Œ ๋ณตํ™”๋ฅผ ํ•  ๊ฒƒ์ด๋ผ๊ณ  ์ƒ๊ฐํ•˜๊ณ  ์‚ฌ์šฉ์ž, ์ฆ‰ Config ์ •๋ณด๋ฅผ ๋ฐ›๋Š” ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค์—๊ฒŒ ์ „๋‹ฌ๋  ๋•Œ๋Š” ๋ณตํ˜ธํ™” ๋œ ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐ›๋Š”๋‹ค๊ณ  ์˜ˆ์ƒํ•œ๋‹ค.

 

yml ํŒŒ์ผ์— ์•”ํ˜ธํ™”๋œ ๋ฌธ์ž์—ด์„ ๋„ฃ๊ณ  Config ์„œ๋ฒ„์˜ ์‘๋‹ต์œผ๋กœ ๋ณตํ˜ธํ™”๋œ ๋ฌธ์ž์—ด ๋ฐ›๊ธฐ

์ด์ œ ์šฐ๋ฆฌ์˜ Config ์„œ๋ฒ„๊ฐ€ ๋ณตํ˜ธํ™”๋œ ๋ฌธ์ž์—ด์„ ์ž˜ ์‚ฌ์šฉํ•˜๋Š”์ง€ ์•Œ์•„๋ณด๊ธฐ ์œ„ํ•ด์„œ ์‹ค์ œ ์š”์ฒญ์„ ๋ณด๋‚ด๋ณด์ž.

 

yml ํŒŒ์ผ์—๋Š” {cipher} ๋ผ๋Š” ์ ‘๋‘์‚ฌ๋ฅผ ํฌํ•จ์‹œ์ผœ ํ•ด๋‹น ๋ฌธ์ž์—ด์ด ์•”ํ˜ธํ™”๋˜์—ˆ๋‹ค๋Š” ๊ฒƒ์„ ์•Œ๋ ค์ค˜์•ผ ํ•œ๋‹ค.

 

jwt:
  token:
    key: "{cipher}8fe09399c96cdc1bee0cc3dafea404335a5bdd879e4cd85547fd1e7fbe774e11b3adc2c20634d16501be77987bbc210f"

 

์ด๋ ‡๊ฒŒ ์ €์žฅํ•˜๊ณ  ์›๊ฒฉ ์ €์žฅ์†Œ๋กœ push ํ•˜์ž.

 

์ž˜ ์ €์žฅ๋œ ๊ฒƒ์„ ๋ณผ ์ˆ˜ ์žˆ๋‹ค.

 

์ด์ œ config ์„œ๋ฒ„๋ฅผ ์žฌ๊ธฐ๋™ ์‹œํ‚ค๊ณ  user-service ์„ค์ • ์ •๋ณด๋ฅผ ๋ฐ›๋Š” ์š”์ฒญ์„ ๋ณด๋‚ด๋ณด์ž.

 

 

๊ทธ๋Ÿผ ์œ„์™€ ๊ฐ™์ด ์ €์žฅ์†Œ์—๋Š” ์•”ํ˜ธ๋ฌธ์œผ๋กœ ์ €์žฅ๋˜์—ˆ์ง€๋งŒ ์‹ค์ œ config ์„œ๋ฒ„์˜ ์„ค์ • ํŒŒ์ผ ์‘๋‹ต์€ ๋ณตํ˜ธํ™”๋œ ๊ฐ’์œผ๋กœ ๋ฐ˜ํ™˜ํ•˜๋Š” ๊ฒƒ์„ ๋ณผ ์ˆ˜ ์žˆ๋‹ค.

 

๋Œ“๊ธ€