[Spring Cloud] - 2. Github and Configuration Server

๋ฐ˜์‘ํ˜•

์•ˆ๋…•ํ•˜์„ธ์š”. ์ง€๋‚œ ์‹œ๊ฐ„์—๋Š” Spring Cloud์˜ Configuration Server๋ฅผ ๋กœ์ปฌ ํ™˜๊ฒฝ์˜ ์„ค์ • ํŒŒ์ผ์„ ํ†ตํ•˜์„œ ๊ตฌ์„ฑํ•˜๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•ด ์•Œ์•„๋ดค์Šต๋‹ˆ๋‹ค. 

๋กœ์ปฌ ๋‚ด์— ์žˆ๋Š” ์„ค์ • ํŒŒ์ผ์„ ์ง์ ‘ ์ž‘์„ฑํ•˜์—ฌ ์ด๋ฅผ Pull ๋ฐฉ์‹์œผ๋กœ ์ด์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ๋ณ„๋„์˜ ๊ตฌ์„ฑ ์„œ๋ฒ„๋ฅผ ์ž‘์„ฑํ•˜๋Š” ๊ฒƒ์€ ๋งค์šฐ ํšจ์œจ์ ์œผ๋กœ ์„œ๋ฒ„์˜ ๊ตฌ์„ฑ ์„ค์ •์„ ๋ณ€๊ฒฝํ•˜๊ณ  ์ƒˆ๋กœ์ด ์ž‘์„ฑํ•˜๋Š” ๋ฐ ์šฉ์ดํ•ฉ๋‹ˆ๋‹ค.

๊ทธ๋Ÿฐ๋ฐ, ์—ฌ๊ธฐ์— Git์„ ์ถ”๊ฐ€ํ•œ๋‹ค๋ฉด ์–ด๋–จ๊นŒ์š”? ๊ธฐ์กด์˜ ์„ค์ •์—์„œ ์ƒˆ๋กœ์šด ์„ค์ •์œผ๋กœ ๋ณ€๊ฒฝํ•œ ๋’ค, ์–ด๋– ํ•œ ๋ฌธ์ œ์ ์ด ์ƒ๊ฒผ๋‹ค๊ฑฐ๋‚˜ ์ด์Šˆ๊ฐ€ ๋ฐœ์ƒ๋œ๋‹ค๋ฉด ๋กค๋ฐฑ์„ ํ•˜์—ฌ์•ผ ํ•ฉ๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ํŒŒ์ผ ์‹œ์Šคํ…œ์—์„œ ๋กค๋ฐฑ์„ ํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์€ Volume Shadow Copy ์ •๋„๋‚˜ ํ˜น์€ RAID ๋ ˆ๋ฒจ์—์„œ ์ œ๊ณตํ•˜๋Š” Snapshot, BRTFS์—์„œ ์ œ๊ณตํ•˜๋Š” Snapshot์ผ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

ํ•˜์ง€๋งŒ Git์„ ์‚ฌ์šฉํ•˜๋ฉด Revert๋ฅผ ์ด์šฉํ•ด์„œ ์‰ฝ๊ฒŒ ์ด์ „ ์ปค๋ฐ‹์œผ๋กœ ๋Œ๋ฆด ์ˆ˜ ์žˆ๊ณ , ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ํŒ€ ๋‚ด์—์„œ ๊ณต์œ ํ•˜๋ฉฐ ์—ฌ๊ธฐ์— Github ๋“ฑ์˜ Pull Request ๊ธฐ๋Šฅ์„ ์ด์šฉํ•œ๋‹ค๋ฉด, ๋”์šฑ ํšจ์œจ์ ์œผ๋กœ ์„ค์ • ๊ด€๋ฆฌ๊ฐ€ ์ด๋ฃจ์–ด์งˆ ์ˆ˜ ์žˆ๊ฒ ์ฃ .

 

Create Github Repository

๋จผ์ € Github์— ๊ฐ API ์„œ๋ฒ„์—์„œ ์‚ฌ์šฉํ•  ์„ค์ • ํŒŒ์ผ์„ ์ €์žฅํ•  ์ˆ˜ ์žˆ๋„๋ก ์ƒˆ๋กœ์šด ๋ ˆํฌ์ง€ํ„ฐ๋ฆฌ๋ฅผ ํ•œ ๊ฐœ๋ฅผ ๋งŒ๋“ค์–ด์ค๋‹ˆ๋‹ค.

์ด๋ฆ„์€ ์งง๊ณ  ๊ฐ„๊ฒฐํ•˜๊ฒŒ ์ ๋Š” ๊ฒƒ์„ ๊ถŒ์žฅ๋“œ๋ฆฝ๋‹ˆ๋‹ค. ์ €๋Š” ์˜ˆ์‹œ๋กœ ์ž‘์„ฑํ•˜๋Š” ๊ฒƒ์ด๊ธฐ ๋–„๋ฌธ์— SpringCloud-config-example์ด๋ผ๋Š” ์ด๋ฆ„์„ ์‚ฌ์šฉํ•ด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

 

Push Configuration

๋ ˆํฌ๋ฅผ ๋งŒ๋“ค์—ˆ์œผ๋ฉด ์ด์ „ ๊ธ€์—์„œ ์‚ฌ์šฉํ–ˆ๋˜ ๊ตฌ์„ฑ์„ ๊ทธ๋Œ€๋กœ ์‚ฌ์šฉํ•ด ๋ณด๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค. ์ €๋Š” server-configs๋ผ๋Š” ํด๋”๋ฅผ ๋งŒ๋“ค์–ด์„œ MemberService์™€ NoteService ์„ค์ • ํŒŒ์ผ์„ dev์™€ prod๋กœ ๋‚˜๋ˆ„์–ด์„œ ๋งŒ๋“ค์–ด๋ณด๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

๊ฐ„๋‹จํ•˜๊ฒŒ ์„ค์ • ํŒŒ์ผ์„ ์ž˜ ๊ฐ€์ ธ์˜ค๋Š”์ง€ ํ™•์ธํ•˜๊ธฐ ์œ„ํ•ด์„œ Message๋ž€์— ์–ด๋–ค ์„ค์ • ํŒŒ์ผ์ธ์ง€๋งŒ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋„๋ก ์ ์Šต๋‹ˆ๋‹ค.

 

Run Configuration Server

์ด์ œ Configuration Server๋ฅผ ์‹คํ–‰ํ•ด๋ด…์‹œ๋‹ค. ๊ทธ๋Ÿฐ๋ฐ, ๊ทธ๋ƒฅ ์‹คํ–‰ํ•˜๋ฉด ์•ˆ๋ฉ๋‹ˆ๋‹ค. ์™œ๋ƒํ•˜๋ฉด, ์šฐ๋ฆฌ๋Š” ์ง€๋‚œ ๊ธ€์—์„œ Configuration Server์˜ ์„ค์ •์„ ๋กœ์ปฌ ํ™˜๊ฒฝ ์„ค์ •๋ฐ–์— ํ•˜์ง€ ์•Š์•˜๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. 

๋”ฐ๋ผ์„œ Github์— ์žˆ๋Š” ์„ค์ • ํŒŒ์ผ์„ ๊ฐ€์ ธ์˜ค๊ธฐ ์œ„ํ•ด ์ด ํŒŒ์ผ์ด ์–ด๋””์— ์žˆ๋Š”์ง€๋ฅผ ์„ค์ •ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

# Remote ํ™˜๊ฒฝ ๋ฐฐํฌ ์„ค์ •
spring:
  profiles: remote
  cloud:
    config:
      server:
        git:
          uri: https://github.com/NEONKID/SpringCloud-config-example
          search-paths: server-configs

resources/bootstrap-remote.yml

์œ„์˜ ํŒŒ์ผ์„ ์ƒ์„ฑํ•˜์—ฌ ์–ด๋Š ๋ ˆํฌ์ง€ํ„ฐ๋ฆฌ์— ์žˆ๋Š” ์–ด๋Š ํด๋”์˜ ์„ค์ • ํŒŒ์ผ์„ ๊ฐ€์ ธ์˜ฌ ๊ฒƒ์ธ์ง€๋ฅผ ์ž‘์„ฑํ•ด์ฃผ์‹œ๋ฉด ๋ฉ๋‹ˆ๋‹ค.

๊ทธ๋ฆฌ๊ณ , ๋งˆ์ง€๋ง‰์œผ๋กœ JVM Options์— spring.profiles.active ํŒŒ๋ผ๋ฏธํ„ฐ๋ฅผ ๋ฐ˜๋“œ์‹œ remote๋กœ ์žก์•„์ค˜์•ผ ํ•ฉ๋‹ˆ๋‹ค. IntelliJ IDEA์—์„œ๋Š” ์•„๋ž˜์™€ ๊ฐ™์ด ์„ค์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Run Configurations์—์„œ Active Profiles๋ฅผ remote๋กœ ๋ฐ”๊ฟ”์ฃผ์‹œ๋ฉด ๋ฉ๋‹ˆ๋‹ค.

 

Test 1 - CLI

ํ…Œ์ŠคํŠธ ์—ญ์‹œ ์ด์ „ ํฌ์ŠคํŠธ์—์„œ์™€ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ํ…Œ์ŠคํŠธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค

๊ฐœ๋ฐœ ์„œ๋ฒ„์— ๋Œ€ํ•œ ์„ค์ • ํŒŒ์ผ์„ ๊ฐ€์ ธ์˜ค๋Š” ๊ฒƒ์„ ์˜ˆ์‹œ๋กœ ์ž‘์„ฑํ•˜์˜€์Šต๋‹ˆ๋‹ค.

 

๋งˆ์น˜๋ฉฐ...

์—ฌ๊ธฐ๊นŒ์ง€ Configuration Server์— ๋Œ€ํ•œ ๊ตฌ์„ฑ์˜ ๋ชจ๋“  ๊ฒƒ์„ ์„ค๋ช…ํ•˜์˜€์Šต๋‹ˆ๋‹ค. ์ด ํŒŒํŠธ์—์„œ๋Š” ์˜ค์ง ์„œ๋ฒ„ ๊ตฌ์„ฑ์— ๋Œ€ํ•œ ๊ฒƒ๋งŒ ์ด์•ผ๊ธฐ ํ•˜์˜€์Šต๋‹ˆ๋‹ค. 

๋‹ค์Œ ํŒŒํŠธ์—์„œ๋Š” ์ง์ ‘ API ์„œ๋ฒ„๋ฅผ ๋งŒ๋“ค์–ด์„œ API ์„œ๋ฒ„์—์„œ ์„ค์ •์„ ๊ฐ€์ ธ์˜ค๋Š” ๊ฒƒ์— ๋Œ€ํ•œ ๊ธ€์„ ์ž‘์„ฑํ•ด๋ณด๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

๋ฐ˜์‘ํ˜•
TAGS.

Tistory Comments