1HOON
논리적 코딩
1HOON
전체 방문자
오늘
어제
  • HOME (187)
    • ☕️ JAVA (28)
      • WhiteShip Java LIVE Study (6)
      • Effective JAVA (10)
    • 🔮 KOTLIN (4)
    • 🌱 SPRING (51)
      • 스프링 인 액션 (22)
      • JPA (18)
    • ☕️ JAVASCRIPT (6)
    • 📃 DATABASE (40)
      • ORACLE (37)
      • MSSQL (2)
    • 🐧 LINUX (4)
    • 🐳 DOCKER (5)
    • 🐙 KUBERNETES (4)
    • 🏗️ ARCHITECTURE (8)
    • 📦 ETC (27)
      • TOY PROJECT (5)
      • RECRUIT (1)
      • 그냥 쓰고 싶어서요 (14)
      • TIL (1)
    • 🤿 DEEP DIVE (1)
    • 🚽 Deprecated (9)
      • PYTHON (3)
      • AWS (2)
      • HTTP 완벽가이드 (3)
      • WEB (1)

블로그 메뉴

  • 홈
  • 방명록
  • 관리

인기 글

최근 글

티스토리

hELLO · Designed By 정상우.
1HOON

논리적 코딩

[Spring Cloud Config] 설정값을 외부에서 관리하자! - 실습
🌱 SPRING

[Spring Cloud Config] 설정값을 외부에서 관리하자! - 실습

2021. 10. 10. 15:42

 

앞선 포스트 기본편에서 이어집니다!

 

[Spring Cloud Config] 설정값을 외부에서 관리하자! - 기본

시작하기 전에 스프링 또는 스프링 부트 개발을 하다 보면 *.properties 혹은 *.yml로 관리되는 환경설정 값이 필연적으로 존재할 수밖에 없습니다. 그리고 이러한 설정 값 중에서는 노출되어서는 안

logical-code.tistory.com

 

Vault 컨테이너 생성


Docker Image Pull


 

docker pull vault

 

 

Docker Container 생성


이 포스팅에서는 개발용 설정으로 도커 컨테이너를 구동하며, 운영 환경에서 권장되지 않습니다.

개발용 설정에서는 인메모리로 저장소가 생성되며, 개발용 루트 계정 토큰을 설정할 수 있습니다.

docker run –cap-add=IPC_LOCK –e ‘VAULT_DEV_ROOT_TOKEN_ID=myroot’ –p 8200:8200 vault

컨테이너 생성 및 구동 후 http://localhost:8200 으로 접속합니다.

로그인 창이 뜨면 Method를 Token으로 선택하고, 앞서 컨테이너 생성시 설정한 루트 토큰 아이디를 입력합니다.(myroot)

 

 

Secret 작성


로그인 후 Enable new engine을 클릭합니다.

 

Generic > KV를 선택하고 Next 버튼을 클릭합니다.

 

Path에 test-app을 입력하고 Enable Engine 버튼을 클릭합니다.

 

생성한 Secret Engine(test-app)에 들어가서 Create secret 버튼을 클릭합니다.

 

Path for this secret에 설정의 Profile명(local)을 입력하고 Secret data에 설정 값을 입력한 뒤 Save 버튼을 클릭합니다.

 

같은 방법으로 dev, prod secrets를 추가합니다.

 

 

Policy 작성


상단 메뉴에서 Policies를 클릭하고, Create ACL policy를 클릭합니다.

 

Name에 Policy명(sample-acl)을, Policy에는 권한 내용을 작성하고 Create policy 버튼을 클릭합니다.

(권한 설정 방법 : https://www.vaultproject.io/docs/concepts/policies)

path "test-app/**" {
  capabilities = [ "read" ]
}

 

 

Authentication Methods 작성


상단 메뉴에서 Access를 클릭하고, Enable new method 버튼을 클릭합니다.

 

Generic > Username & Password를 선택하고 Next 버튼을 클릭합니다.

 

Enable Method 버튼을 클릭합니다.

 

다시 Access 메뉴에서 앞서 추가한 userpass를 클릭하고, Create user 버튼을 클릭합니다.

 

Username과 Password는 자유롭게 입력하고, 아래 Generated Token's Policies에 앞서 작성한 Policy명(sample-acl)을 입력합니다.

 

로그아웃 후 앞서 생성한 Username & Password 정보로 로그인합니다.

 

우측 상단의 사용자 정보 드롭다운을 클릭하고 Copy token을 클릭합니다.

 

 

 

Config Server 생성


스프링 부트 애플리케이션 생성


아래 의존성으로 Config Server 스프링 부트 애플리케이션을 생성합니다.

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.5.4</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.example</groupId>
    <artifactId>server</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>server</name>
    <description>server</description>
    <properties>
        <java.version>11</java.version>
        <spring-cloud.version>2020.0.3</spring-cloud.version>
    </properties>
    <dependencies>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-config-server</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>
    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-dependencies</artifactId>
                <version>${spring-cloud.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

</project>

 

@EnableConfigServer 설정


@EnableConfigServer
@SpringBootApplication
public class ServerApplication {

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

}

 

application.properties 작성


server.port=8888

spring.profiles.active=vault
spring.cloud.config.server.vault.kv-version=2
spring.cloud.config.server.vault.profile-separator=/

 

 

 

Config Client 생성


스프링 부트 애플리케이션 생성


아래 의존성으로 Config Client 스프링 부트 애플리케이션을 생성합니다.

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.5.4</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.example</groupId>
    <artifactId>client</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>client</name>
    <description>client</description>
    <properties>
        <java.version>11</java.version>
        <spring-cloud.version>2020.0.3</spring-cloud.version>
    </properties>
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-config</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>
    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-dependencies</artifactId>
                <version>${spring-cloud.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

</project>

 

application.properties 작성


server.port=9999

spring.config.import=configserver:http://localhost:8888
spring.cloud.config.name=test-app
spring.cloud.config.profile=${spring.profiles.active}
spring.cloud.config.token=[앞서 복사한 사용자 토큰]

 

 

 

샘플 코드


https://github.com/ParkIlHoon/logical-code/tree/study/spring/spring-cloud-config/springboot-cloud-config

 

반응형
저작자표시 비영리 변경금지 (새창열림)

'🌱 SPRING' 카테고리의 다른 글

[Spring Security] 스프링 시큐리티 주요 아키텍쳐 2 - 인증(Authentication)  (0) 2021.12.10
[Spring Security] 스프링 시큐리티 주요 아키텍쳐 1 - DelegatingFilterProxy, FilterChainProxy  (0) 2021.12.06
[Spring Cloud Config] 설정값을 외부에서 관리하자! - 기본  (0) 2021.10.10
[SpringCloud] Resilience4j와 Spring Cloud Circuit Breaker  (0) 2021.05.16
[SpringBoot] 컨트롤러, View(JSP) 작성하기  (0) 2020.05.30
    '🌱 SPRING' 카테고리의 다른 글
    • [Spring Security] 스프링 시큐리티 주요 아키텍쳐 2 - 인증(Authentication)
    • [Spring Security] 스프링 시큐리티 주요 아키텍쳐 1 - DelegatingFilterProxy, FilterChainProxy
    • [Spring Cloud Config] 설정값을 외부에서 관리하자! - 기본
    • [SpringCloud] Resilience4j와 Spring Cloud Circuit Breaker
    1HOON
    1HOON

    티스토리툴바