지난 포스팅에서 Spring Cloud Config 를 통해 설정 외부화를 하는 과정을 알아보았다. 설정 외부화의 수단은 Github이었고 public repository에 있는 설정 파일에 대해 알아보았다. 이번에는 Github의 private repository에 접근하여 설정값을 가져오는 방법에 대해 알아보겠다.
git private repository
Github에 private repository를 하나 생성했다. 그리고 branch는 master를 하나 생성했다. 또한 설정을 가지고 올 oingdaddy.properties 파일을 생성을 해 두었다.
private repository에 있는 값을 가지고 오는 방법은 크게 두가지가 있다.
첫번째는 ConfigServer application의 application.yml에서 직접 git 계정을 입력해 https로 가져오는 방법.
두번째는 ConfigServer application의 application.yml에서 공개키를 이용한 SSH로 가져오는 방법이다.
1. 직접 git 계정을 입력해 https로 가져오는 방법
ConfigServer application의 application.yml
spring:
application:
name: config-server
cloud:
config:
server:
git:
uri: https://github.com/oingdaddy/msastudy-private.git
username: git 계정명
password: git 패스워드
or application.properties
spring.cloud.config.server.git.uri=https://github.com/oingdaddy/msastudy-private
spring.cloud.config.server.git.username=git 계정명
spring.cloud.config.server.git.password=git 비밀번호
이렇게 입력해주면 끝! uri 부분을 보면 https://~~~ 로 시작을 한다. 하지만 회사에서 사용을 하는거라면 개인의 git 정보가 노출되기 때문에 많이 사용되지는 않을것 같다.
ConfigServer를 동작시키고 http://localhost:8200/oingdaddy/local 이라고 입력했을때 Github에 등록한 oingdaddy-local.properties 파일 안의 oingdaddy라는 key에 대한 value를 뿌려주면 정상 작동을 하는 것이다.
2. 공개키를 이용한 SSH로 가져오는 방법
일단 SSH Key가 없다면 새로운 SSH key를 생성을 해야 한다. cmd 창을 열고 다음과 같이 명령어를 입력해준다.
> ssh-keygen -m PEM -t rsa -b 4096 -C "git 계정"
new SSH key generate
위에서 지정한 경로로 들어가보면 아래와 같이 파일이 두개 생성되었을것이다. 열어보자.
rsa public key
rsa private key
temp.pub 파일에는 공개키가, temp 파일에는 개인키가 들어가있다.
공개키는 Github에서 사용을 하고 개인키는 ConfigServer에서 사용을 할 것이다.
(Github SSH Keys 등록
Github에서 User > Settings > SSH and GPG keys > New SSH key 를 눌러서 공개키(.pub)를 등록한다.
(Deploy Keys 로 하는 방식은 이제 안되는것 같다. )
추가시킬때 아래 빈칸이 있으면 등록이 안된다. 주의해서 등록하자.
Github SSH Keys
키 등록이 정상적으로 되었으면 위와 같은 모습으로 나타난다.
Git Clone 방식중 SSH를 선택한다. 그리고 URL을 복사를 한다. Github에서 할일은 끝났다.
ConfigServer application의 application.yml
spring:
application:
name: config-server
cloud:
config:
server:
git:
uri: git@github.com:oingdaddy/msastudy-private.git
ignoreLocalSshSettings: true
privateKey: |
-----BEGIN RSA PRIVATE KEY-----
MIIJKQIBAAKCAgEAoUtrD45Jz6uz31W/DNSj7p4p+2O3nomeLmsAN8WY4z7HLlOF
/hQxii+CSaMIZfmINdZSE+fctOJKFAnuWq8VG8N1ESExiBqFZMHpZqI390eVG/pb
sHMO8cPo/1+e+jKvL9VunGhiqenlNQRDALLPwlMQPKUIl3HKtDW3U9yrpWCPhcKI
Na1mn3yCzyXIjwLL4+4+q0JN214CVGmqzrwIfL450vIAhn7+qeZlT0Js7p3hT3JR
h/PZJKXJmHTYEFrZkf3ZSVd1JDjHIHrdoK+eXvFl5WpmUpcqIegox9qmQsVnZich
SIEqjAP1/DMqgV3jPsLEO1wZk5EG4OIn8vkwRSaLoaZ1/KF5laO+8V3DRyj5fVH2
hZT0ZL9Dfuqv/sMpM+M6aPT3XzPj+T7RPmedfiRgnfYI3qML1h3t+3baGPeVBtBP
uSCoO00ajiwFQN/d/Ce42dVhJkqP13WINJQh9ROQZOxV7X2+HxFjhRKp2oPkLabI
JGLHXJz9Oyd99+HjQUe2WwaW8zZ6UyZ3tRD52UCLoWc3zz7H3XrWUCgU2RRa1RQf
....
-----END RSA PRIVATE KEY-----
or application.properties
server.port=8200
spring.application.name=config-server
spring.cloud.config.server.git.uri=git@github.com:oingdaddy/msastudy-private.git
spring.cloud.config.server.git.ignoreLocalSshSettings=true
spring.cloud.config.server.git.privateKey=-----BEGIN RSA PRIVATE KEY-----\n\
MIIJKQIBAAKCAgEAoUtrD45Jz6uz31W/DNSj7p4p+2O3nomeLmsAN8WY4z7HLlOF\n\
/hQxii+CSaMIZfmINdZSE+fctOJKFAnuWq8VG8N1ESExiBqFZMHpZqI390eVG/pb\n\
sHMO8cPo/1+e+jKvL9VunGhiqenlNQRDALLPwlMQPKUIl3HKtDW3U9yrpWCPhcKI\n\
Na1mn3yCzyXIjwLL4+4+q0JN214CVGmqzrwIfL450vIAhn7+qeZlT0Js7p3hT3JR\n\
h/PZJKXJmHTYEFrZkf3ZSVd1JDjHIHrdoK+eXvFl5WpmUpcqIegox9qmQsVnZich\n\
SIEqjAP1/DMqgV3jPsLEO1wZk5EG4OIn8vkwRSaLoaZ1/KF5laO+8V3DRyj5fVH2\n\
hZT0ZL9Dfuqv/sMpM+M6aPT3XzPj+T7RPmedfiRgnfYI3qML1h3t+3baGPeVBtBP\n\
uSCoO00ajiwFQN/d/Ce42dVhJkqP13WINJQh9ROQZOxV7X2+HxFjhRKp2oPkLabI\n\
JGLHXJz9Oyd99+HjQUe2WwaW8zZ6UyZ3tRD52UCLoWc3zz7H3XrWUCgU2RRa1RQf\n\
....
-----END RSA PRIVATE KEY-----\n\
ConfigServer의 application.yml 파일에서는 위와 같이 작성을 한다. uri 부분은 반드시 ssh uri로 입력을 해주고 privateKey 부분에 개인키를 넣는다. 여기서 -----BEGIN RSA PRIVATE KEY----- 이부분은 빼면 안된다.
properties 파일은 잘 안되가지고 좀 고생했다.. 여러라인의 문자열을 하나의 key 값에 매핑을 시키려면 \n\을 문자열 뒤에 추가를 시켜줘야한다..
SSH 방식일때의 properties는 다음을 참고하자.
PropertyName | Remarks |
ignoreLocalSshSettings | If true, use property-based instead of file-based SSH config. Must be set at as spring.cloud.config.server.git.ignoreLocalSshSettings, not inside a repository definition. |
privateKey | Valid SSH private key. Must be set if ignoreLocalSshSettings is true and Git URI is SSH format. |
hostKey | Valid SSH host key. Must be set if hostKeyAlgorithm is also set. |
hostKeyAlgorithm | One of ssh-dss, ssh-rsa, ecdsa-sha2-nistp256, ecdsa-sha2-nistp384, or ecdsa-sha2-nistp521. Must be set if hostKey is also set. |
strictHostKeyChecking | true or false. If false, ignore errors with host key. |
knownHostsFile | Location of custom .known_hosts file. |
preferredAuthentications | Override server authentication method order. This should allow for evading login prompts if server has keyboard-interactive authentication before the publickey method. |
이렇게 했을때 결과는?
바뀐점은 propertySources.name 부분만 https에서 ssh로 변경이 되었고 아까 https 를 통해서 가져오는것과 동일하게 내용을 잘 가지고 오는것을 확인할 수 있다.
끝!
출처 : https://oingdaddy.tistory.com/188
'Back-End > Spring' 카테고리의 다른 글
[JPA] Spring Boot에서 다중 DB를 사용하기 (0) | 2023.03.02 |
---|---|
[Spring / Java] 이메일 인증 구현 (0) | 2023.02.20 |
[Spring Cloud] Application의 설정 정보 (application.yml) 를 중앙에서 관리하기 (0) | 2023.02.10 |
[Spring Boot] JPA를 활용하여 간단한 CRUD 게시판 만들기 ( 블로그 추천 ) (0) | 2023.02.10 |
[JPA] Spring JPA Batch Insert 과연 생각대로 동작할까? (0) | 2023.02.10 |