😀 고민의 시작
이번 클라우드 서버 배포를 진행하게 되면서 배포 환경,
개발 환경에 대한 설정 변경에 있어 불편함을 느끼게 되었습니다.
크게 두 가지로 볼 수 있는데요.
- 매번 변경 해야 하는 yml 의 설정 ( 로컬 (dev) , 배포 (prod))
-
- 의 변경 과정 중 발생하는 실수
위의 두 가지 사항으로 인해 배포에 대한 피로감이 증가하게 되었습니다.
해결하기 위한 방법을 찾기 위해 yml 상황에 따른 활성화 방안을 찾게 되었습니다.
😀 현재 상황
현재 사용하는 yml 설정 파일 입니다.
아래와 같이 두 가지의 경우가 존재하였고
개발 환경에서는 로컬에 맞는 DB, file storage 의 설정을 변경 해야 하고
배포 환경에서는 prod 에 맞는 변경을 진행해야 했습니다.
이런 과정에서 잘못된 변경으로 인해 불필요한 시간 낭비가 되었습니다.
다음은 각 환경에 따른 설정 입니다.
# 배포 서버 개발 환경 설정
datasource:
driver-class-name: com.mysql.cj.jdbc.Driver
url: 배포 DB 서버 URL 을 넣습니다.
username: 배포 DB 서버 username
password: 배포 DB 서버 password
s3:
accessKey: object storage API accessKey
secretKey: object storage API secretKey
bucketName: bucketName
# 로컬 서버 개발 환경 설정
datasource:
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://localhost:3306/test
username: localname
password: localpassword
file:
dir:
😀해결 방법
생각보다 위의 문제 해결은? 간단했습니다.
많은 사람도 이러한 고민을 하고 있었고
이러한 문제를 해결하기 위한 방법이 스프링 설정에 존재했습니다.
각 문제에 따른 해결 방법을 작성해 보겠습니다.
- 매번 변경 해야 하는 yml 의 설정 ( 로컬 (dev) , 배포 (prod))
설정에 따른 환경 프로필을 작성 합니다.
spring:
config:
activate:
on-profile: prod #여기서는 prod를 배포할 설정으로 진행 하겠습니다.
datasource:
driver-class-name: com.mysql.cj.jdbc.Driver
url: 배포 DB 서버 URL 을 넣습니다.
username: 배포 DB 서버 username
password: 배포 DB 서버 password
s3:
accessKey: object storage API accessKey
secretKey: object storage API secretKey
bucketName: bucketName
다음으로는 dev 를 개발 환경을 설정하겠습니다.
# 로컬 서버 개발 환경 설정
spring:
config:
activate:
on-profile: dev
datasource:
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://localhost:3306/test
username:
password:
file:
dir:
-
- 의 변경 과정 중 발생하는 실수
- 사실 앞의 1까지만 진행하여도 문제는 없지만, 한 파일에 관리를 하게 되면서 좀 더 보기 좋게? 진행을 해보겠습니다.
- yml 의 특성 상 설정 파일에 대한 구분을 지을 수 있습니다.
---
이 마이너스 3개를 사용하면 각 설정을 분리 할 수 있습니다.
(참고로, application.properties 의 구분 선은 다를 수 있습니다.) - 이렇게 만들어진 yml 파일을 이제 한 파일에 관리하면서 상황에 따른 적용을 진행할 수 있는 환경은 갖춰지게 되었습니다.
- 의 변경 과정 중 발생하는 실수
# 배포 서버 개발 환경 설정
spring:
config:
activate:
on-profile: prod
datasource:
driver-class-name: com.mysql.cj.jdbc.Driver
url: 배포 DB 서버 URL 을 넣습니다.
username: 배포 DB 서버 username
password: 배포 DB 서버 password
s3:
accessKey: object storage API accessKey
secretKey: object storage API secretKey
bucketName: bucketName
---
# 로컬 서버 개발 환경 설정
spring:
config:
activate:
on-profile: dev
datasource:
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://localhost:3306/test
username:
password:
file:
dir:
그럼 이제 로컬 환경에서는 dev, 배포 환경에서는 prod 를 run
하는 방법을 설명하겠습니다.
- 로컬 환경
- 인텔리제이 유료 버전 사용 자라면 위 같은 빨간 부분을 클릭 후 아래의 이미지를 본다면
configuration
이 보이고edit
을 진행할 수 있습니다. - 다음에는 왼쪽의 밑줄을 클릭하고
active profile
에run
할 때 설정할 파일을 적어주면 끝입니다.
우리는dev
를 적용할 거기 때문에 dev 를 넣고 진행합니다.spring: config: activate: on-profile: dev
- 인텔리제이 유료 버전 사용 자라면 위 같은 빨간 부분을 클릭 후 아래의 이미지를 본다면
마지막으로 run
을 해보게 된다면, 실행이 되면서
The following 1 profile is active: "dev"
이라는 문구를 확인할 수 있습니다.
- 배포 환경
리눅스 서버는 조금 다릅니다. 일단 우리가 만든 서비스를 빌드를 진행하고 jar 파일로 만들어 리눅스 서버에 전달합니다. (여기서는 배포에 대한 전반적인 과정은 진행하지 않습니다.)
우리가 접속한 리눅스 서버에서 아래와 같은 명령어를 실행하게 된다면
java -Dspring.config.activate.on-profile=prod -jar your-application.jar
아래와 같이 prod 로 설정한 내용이 활성화 되는 것을 볼 수 있습니다.
The following 1 profile is active: "prod"
😀마무리
이런 과정을 진행하게 되면서 설정에 대한 불필요한 피로감을 줄일 수 있게 되었습니다.
각 설정 별로 분류 해 작성을 해두고, 상황에 맞는 설정을 적용하게 되면서 좀 더 효율적인 배포를 진행할 수 있게 되었습니다.
'프로젝트 기록 > Cloud' 카테고리의 다른 글
[Cloud] NCP (네이버 클라우드 플랫폼) 에 sourceDeploy 의 마무리 nohup 명령어 (0) | 2024.03.15 |
---|