Spring Cloud Config를 배워서 남주자 - gae-jang-mo/app GitHub Wiki
implementation 'org.springframework.cloud:spring-cloud-config-server'
config server 의존성을 추가합니다.
@EnableConfigServer
@SpringBootApplication
public class ConfigServerApplication {
public static void main(String[] args) {
SpringApplication.run(ConfigServerApplication.class, args);
}
}
애플리케이션 실행 부분에 @EnableConfigServer를 달아주고,
application.yml을 다음과 같이 수정합니다.
spring:
cloud:
config:
server:
git:
uri: git@jay:JunHoPark93/gae-jang-mo-private-properties.git
skip-ssl-validation: true
server:
port: 8888
여기서 설정파일들을 관리하는 레포지토리를 적어주는데 이것은 private 레포지토리로 만들어보았습니다. 그래서 이 Spring Cloud Config 서버를 띄울려면 github 서버에게 공개키를 등록시켜주어서 서로 통신하게 만들어야 합니다. 포트는 8888에 띄워봅니다.
git uri에 대한 자세한 내용은 밑에서 설명하겠습니다.
github 에서 private 저장소를 만들고 yml 파일을 업로드 합니다.
여기서 주의 해야할 것은 yml 파일의 이름의 prefix에 application-name (즉 이 설정을 읽어올 애플리케이션의 이름)이 들어가야 합니다.
저는 productsearchapi라는 이름의 애플리케이션을 띄울 것이므로 productsearchapi-dev.yml 로 만들어 보았습니다. 참고로 대시(-)뒤에 나오는 것은 profile입니다.
productsearchapi-dev.yml
searchapi:
naverid: [아이디]
naversecret: [시크릿]
oauth:
key: [키]
password: [패스워드]
필요한 설정파일들을 알아서 넣어주면 됩니다. 위에는 단지 예시 일 뿐입니다.
ec2를 로드하고 해당 서버에서 ssh-keygen을 이용해서 공개키/비밀키를 생성해보겠습니다.
$ cd ~/.ssh
$ ls
authorized_keys2 id_dsa known_hosts
config id_dsa.pub
.pub의 확장자를 가진것이 공개키이고 나머지는 비밀키 입니다. 이 공개키를 Git 서버에 등록을 시켜주어야 합니다.
공개키/비밀키를 생성해보겠습니다.
$ ssh-keygen -t rsa -b 4096 -C "email주소"
깃허브 아이디로 email주소를 적어주었습니다.
그러면 파일 저장 위치를 결정하라는 말이 나오게 됩니다. 그 때 이름을 지정해주면 되는데 저는 제 레포지토리 이름으로 적어보았습니다.
Enter a file in which to save the key (/Users/<em>you</em>/.ssh/id_rsa):
이 칸에,
config-server.id_rsa
라고 적어주었습니다. 그 이후 패스워드를 입력하라고 하는데 그냥 엔터를 누르고 넘어갑니다.
$ cat ~/.ssh/config-server.pub
이제 다음과 같은 명령어로 공개키를 열어보면 공캐기가 나오게되는데 이것을 GitHub 레포지토리에 Deploy Keys에 들어가서 넣어주면 됩니다.

그리고 깃허브를 ec2에 등록시켜주기 위해서 config 파일을 만듭니다.
vim ~./ssh/config
HOST jay
HostName github.com
User git
IdentityFile ~/.ssh/config-server.id_rsa
IdentitiesOnly yes
그리고 다음과 같이 적어줍니다. HOST는 서버내에서 통용될 이름을 지정하는 것이고 HostName은 깃허브의 주소를 적어줍니다. 그리고 이것을 인증할 때에는 아까만든 config-server 비밀키를 이용한다고 명시해줍니다.
chmod 440 ~/.ssh/config
그리고 다음과 같이 권한을 변경해줍니다.
이제 이 서버에서는 private 레포지토리를 다룰 수 있게 되었습니다.
확인차 clone 을 해보면, 다음과 같이 할 수 있겠네요.
git clone git@jay:JunHoPark93/gae-jang-mo-config.git
git@ 뒤에 나오는 것이 아까 설정한 HOST이고 콜론 뒤에 등장하는 것은 [깃허브 아이디] 그리고 그 뒤 슬래시 다음에 나오는것이 레포지토리 이름입니다.
그리고 profile이 dev인 것을 요청해보면, 설정파일들이 로딩되는 것을 알 수 있습니다.

참고로 요청 url은 {application-name}-{profile}.yml 파일 기준으로 {ip}:{port}/{application-name}/{profile} 입니다. 대시 대신에 슬래시를 넣어서 컨피그 서버를 띄운 포트로 요청을 보내면 됩니다.
이번엔 이것을 사용할 client를 만들어보겠습니다. 사용하려는 애플리케이션 내의 설정을 바꾸면 됩니다.
implementation 'org.springframework.cloud:spring-cloud-starter-config:2.2.0.RELEASE'
implementation 'org.springframework.boot:spring-boot-starter-actuator'
사용하는 측에서 application.yml 이 아닌 bootstrap.yml 에 설정을 넣어줍니다. bootstrap.yml은 application.yml보다 먼저 로드되는 파일입니다.
server:
port: 8081
spring:
application:
name: productsearchapi
profiles:
active: local
---
spring:
profiles: local
cloud:
config:
enabled: false
---
spring:
profiles: dev
cloud:
config:
uri: http://[서버ip]:8888
서버는 8081에 띄우고 앱 이름을 productsearchapi로 해줍니다. 아까 위에서 만들었던 yml 파일의 prefix에 해당하는 이름입니다. 이름이 맞지 않으면 설정을 긁어 오지 못합니다.
저는 로컬 환경에서는 intellij의 Edit Configuration에서 직접 설정정보들을 입력해놓았기 때문에 local로 띄웠을 경우 cloud config 를 disabled 해놨습니다. dev 환경에서는 config uri 를 config server의 ip로 잡아 놓습니다.