Github에 DB 정보를 올리는 똥멍청이가 있다? (2) 해결방법 - Spring Cloud Config

두별·2022년 6월 18일
1

TIL

목록 보기
26/46
post-thumbnail

뭣도 모르고 DB 정보를 깃허브에 고대로 올렸던 지난 추억..

그 당시에는 레포지토리의 모든 커밋 기록을 날리는 걸로 해결을 했는데 이 문제를 해결하는 좋은 방법을 스승님께서 가르쳐주셔서 :) 블로그에 공유합니다.

Spring Cloud Config란?

분산 시스템 (서버/클라이언트) 구성에 필요한 설정 정보를 외부에 보관할 수 있도록 지원하는 서비스

local / dev / prod 서버 별로 프로퍼티 설정값을 따로 관리하는 것이 편리한데 Spring Cloud Config를 사용하면 하나의 중앙화된 저장소에서 이러한 구성요소 관리가 가능하다.

왜 쓸까?

이번에 적용해보면서 느꼈던 장점들은 어마어마 했다.

- public repository에 민감한 정보가 노출 될 수 있는 문제 해결

이렇게 민감한 정보를 따로 관리하기 위한 private 저장소를 사용하기 때문에
public 저장소에는 민감한 정보가 노출될 위험이 없어진다!
이전에 겪었던 public 저장소에 DB정보가 노출되는 문제도 이로써 해결할 수 있었음!


- 서버별로 config 설정을 편리하게 관리할 수 있음

배포시 빌드할때마다 로컬 / 개발 / 운영 서버에 대한 설정값을 수정해야할 필요가 없다. Spring Cloud Config를 사용하면 그런 과정 없이도 바로 적용이 되기 때문에! 어떻게 그게 가능하냐

설정값이 바뀌더라도 Git Repository에 반영하면 Spring Cloud Config 서버는 해당 Git Repository의 최신 설정값들을 읽어오기 때문에 변경사항을 갱신하는 /actuator/refresh API를 사용하면 바로 변경된 설정값들이 적용 가능하다.


Spring Cloud Config 적용해보기

- Spring Cloud Config Client 설정

  1. dependency 추가
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-config</artifactId>
            <version>3.1.3</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-bootstrap</artifactId>
            <version>3.1.3</version>
        </dependency>
  1. bootstrap.properties 생성
    applicatoin.properties와 같은 위치에 생성해주면 됨.
spring.application.name=prefix명
  1. VM 옵션 추가

-Dspring.profiles.active=local 
-Dspring.cloud.config.uri=http://IP주소:PORT/

이로써 Client 설정은 끝!


- Spring Cloud Config Server 설정

  1. porm.xml
	<dependencies>
		<dependency>
			<groupId>org.springframework.cloud</groupId>
			<artifactId>spring-cloud-config-server</artifactId>
		</dependency>
	</dependencies>

	<dependencyManagement>
		<dependencies>
			<dependency>
				<groupId>org.springframework.cloud</groupId>
				<artifactId>spring-cloud-dependencies</artifactId>
				<version>2020.0.1</version>
				<type>pom</type>
				<scope>import</scope>
			</dependency>
		</dependencies>
	</dependencyManagement>
  1. Spring Boot 의 Auto Configuration 을 이용해 @EnableConfigServer 어노테이션을 선언
@SpringBootApplication
@EnableConfigServer
public class ConfigApplication {

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

}
  1. applicatoin.yml 설정

password 부분에 깃 비밀번호를 넣으면 에러가 났는데 깃 access token 을 넣으니 해결되었다.

server:
  port: 포트번호

spring:
  cloud:
    config:
      server:
        git:
          uri: git 주소
          default-label: 
          username: git id
          password: git access token
          ignore-local-ssh-settings: true
  1. config 파일 생성
    노출되면 안되는 DB 정보라던지 secret 키값이라던지 그런 민감한 정보들은 이제 이곳에서 서버별로 관리하면 된다!

이로써 Cloud Config Server 설정도 끝 !

AWS에 서버 뛰우기

매번 config server를 직접 띄우기는 귀찮으므로 AWS에 서버를 올려서 사용할 것이다.

  1. 보안그룹에서 config server 인바운드 규칙 추가

  2. winSCP 설치
    https://winscp.softonic.kr/
    영어말고 한글로 된 곳에서 다운받을 것

  1. jar 파일을 드래그해서 올려줌

  1. putty에서 jar 파일 실행

나는 java가 안깔려있어서 java부터 먼저 설치해주었음

$ sudo apt-get update
$ sudo apt-get install openjdk-11-jdk

ubuntu 백그라운드 실행

nohup java -jar config-0.0.1-SNAPSHOT.jar &

서버가 잘 실행되는지 확인되었다면 Spring Cloud Config 적용하기 끝 !!!!!! ^-^



[참고 포스팅]
https://velog.io/@jjh5887/Spring-Cloud-Config
https://ch4njun.tistory.com/268

0개의 댓글