secret 변수는 -secret.yml 에서 관리하고 나머지는 .yml 에서 프로파일별로 나누어서 작성해주면 된다.
그러면 spring.profiles.active 와 include 차이가 뭘까?
- active는 활성화할 프로파일을 지정하는 데 사용됨.
- include는 @Configuration 클래스에서 프로파일을 조건부로 적용하기 위해 사용된다.
include 예제
@Configuration
@Profile("dev")
public class DevConfiguration {
// Dev 환경에서만 필요한 설정
}
일반적으로는 ‘spring.profiles.active’를 사용하여 프로파일을 지정하고 필요한 설정을 관리하는 것이 일반적이다. ‘include’는 주로 ‘.yml’로 분리된 설정을 관리하고자 할 때 유용하다.
spring:
profiles:
active: dev, secret
---
# 개발 환경 설정 파일
spring:
config:
activate:
on-profile: dev
jpa:
show_sql: true
hibernate:
ddl-auto: create-drop
---
# 배포 환경 설정 파일
spring:
config:
activate:
on-profile: prod
jpa:
show_sql: true
hibernate:
ddl-auto: update
이런 식으로 나눠서 사용하려는데 문제가 있다. secret도 dev용, prod용으로 나누고 싶은데 어떻게 해야할까?
공식 문서를 확인해보자.
Spring Boot Reference Documentation
- resources
- application.yml
- application-dev-secret.yml
- application-prod-secret.yml
이렇게 나누어서 java jar 실행할 때, -Dspring.profiles.active=prod,prod-secret 붙여서 실행시켜야겠다.
로컬에서 먼저 테스트
java -jar -Dspring.profiles.active=prod,prod-secret build/libs/dadamda-0.0.1-SNAPSHOT.jar
prod, prod-secret 정확히 실행되는 것 확인
scripts/deploy.sh 변경해주기
#!/usr/bin/env bash
REPOSITORY=/home/ubuntu/app
echo "> 현재 구동 중인 애플리케이션 pid 확인"
CURRENT_PID=$(pgrep -fla java | grep dadamda | awk '{print $1}')
echo "현재 구동 중인 애플리케이션 pid: $CURRENT_PID"
if [ -z "$CURRENT_PID" ]; then
echo "현재 구동 중인 애플리케이션이 없으므로 종료하지 않습니다."
else
echo "> kill -15 $CURRENT_PID"
kill -15 $CURRENT_PID
sleep 5
fi
echo "> 새 애플리케이션 배포"
JAR_NAME=$(ls -tr $REPOSITORY/*SNAPSHOT.jar | tail -n 1)
echo "> JAR NAME: $JAR_NAME"
echo "> $JAR_NAME 에 실행권한 추가"
chmod +x $JAR_NAME
echo "> $JAR_NAME 실행"
nohup java -jar -Dspring.profiles.active=prod,prod-secret -Duser.timezone=Asia/Seoul $JAR_NAME >> $REPOSITORY/nohup.out 2>&1 &
분리한 application-prod-secret.yml 파일을 base64로 인코딩해 github secrets에 넣어주고
github actions .yml파일을 변경
- name: properties 파일 복사
run: |
echo "${{ secrets.APPLICATION_PROD_SECRET_YML }}" | base64 --decode > src/main/resources/application-prod-secret.yml
참고 자료
Spring Profile: yml 파일 하나로 프로퍼티 관리하기
원하는 yml파일이 정확하게 복사 됐고 prod, prod-secret profile들이 적용된 것을 볼 수 있다.
'정기간행물 > daily' 카테고리의 다른 글
사용자 수에 따른 규모 확장성 (대규모 시스템 설계 기초) (1) | 2023.09.18 |
---|---|
Filter vs Interceptor vs AOP (0) | 2023.09.08 |
Composite 패턴 (0) | 2023.09.03 |
ALB health check unhealty 이슈 (0) | 2023.09.02 |
우리 팀의 코드 품질 향상을 위한 Code Review - 홍승환 (0) | 2023.09.01 |