Skip to content

Commit c9b30c0

Browse files
authored
refactor : secrets값 컨테이너 실행시 환경변수로 주입되도록 수정 (#120)
* refactor: 빌드 전 secrets.yml 파일 삭제 * refactor : 테스트 서버 환경변수 주입 설정 * refactor : 운영서버 환경변수 주입 설정 * refactor : 운영환경별 YML 분리 및 배포 환경 설정 구조 개선 * refactor : 로컬(dev,test).yml 복구 * refactor : 빌드전 테스트 secrets.yml V2로 변경 * refactor: gradle 테스트시 환경변수로 설정값 주입 * refactor: yml파일 들여쓰기 수정 * refactor: yml 플레이스홀더 네이밍 규칙 일관성 유지하도록 수정
1 parent e30fee8 commit c9b30c0

File tree

7 files changed

+210
-60
lines changed

7 files changed

+210
-60
lines changed

.github/workflows/prod-server.yml

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -82,12 +82,42 @@ jobs:
8282
-p $NEW_PORT:8080 \
8383
--name $NEW_CONTAINER \
8484
--network common \
85+
-e SPRING_PROFILES_ACTIVE=server \
8586
-e SPRING_DATASOURCE_URL="${{secrets.PROD_DB_URL}}" \
8687
-e SPRING_DATASOURCE_USERNAME="${{secrets.PROD_DB_USERNAME}}" \
8788
-e SPRING_DATASOURCE_PASSWORD="${{secrets.PROD_DB_PASSWORD}}" \
89+
# AWS
90+
-e AWS_ACCESS_KEY_ID="${{secrets.AWS_ACCESS_KEY_ID}}" \
91+
-e AWS_SECRET_ACCESS_KEY="${{secrets.AWS_SECRET_ACCESS_KEY}}" \
92+
-e AWS_S3_BUCKET_NAME="${{secrets.AWS_S3_BUCKET_NAME}}" \
93+
# RabbitMQ
8894
-e SPRING_RABBITMQ_HOST="${{secrets.PROD_RABBITMQ_HOST}}" \
8995
-e SPRING_RABBITMQ_USERNAME="${{secrets.PROD_RABBITMQ_USERNAME}}" \
9096
-e SPRING_RABBITMQ_PASSWORD="${{secrets.PROD_RABBITMQ_PASSWORD}}" \
97+
# Redis
98+
-e REDIS_HOST="${{secrets.PROD_REDIS_HOST}}" \
99+
-e REDIS_PASSWORD="${{secrets.PROD_REDIS_PASSWORD}}" \
100+
# OAuth2
101+
-e KAKAO_CLIENT_ID="${{secrets.OAUTH_KAKAO_CLIENT_ID}}" \
102+
-e GOOGLE_CLIENT_ID="${{secrets.OAUTH_GOOGLE_CLIENT_ID}}" \
103+
-e GOOGLE_CLIENT_SECRET="${{secrets.OAUTH_GOOGLE_CLIENT_SECRET}}" \
104+
-e KAKAO_REDIRECT_URI="${{PROD_OAUTH_KAKAO_REDIRECT_URI}}" \
105+
-e GOOGLE_REDIRECT_URI="${{PROD_OAUTH_GOOGLE_REDIRECT_URI}}" \
106+
# Sentry
107+
-e SENTRY_DSN="${{secrets.SENTRY_DSN}}" \
108+
# OpenAI
109+
-e OPENAI_API_KEY="${{secrets.OPENAI_API_KEY}}" \
110+
# Liveblocks
111+
-e LIVEBLOCKS_SECRET_KEY="${{secrets.LIVEBLOCKS_SECRET_KEY}}" \
112+
# naver
113+
-e NAVER_CLIENT_ID="${{secrets.NAVER_CLIENT_ID}}" \
114+
-e NAVER_CLIENT_SECRET="${{secrets.NAVER_CLIENT_SECRET}}" \
115+
# JWT
116+
-e JWT_SECRET_KEY="${{secrets.JWT_SECRET_KEY}}" \
117+
-e JWT_ACCESS_TOKEN_VALIDITY="${{secrets.JWT_ACCESS_TOKEN_VALIDITY}}" \
118+
-e JWT_REFRESH_TOKEN_VALIDITY="${{secrets.JWT_REFRESH_TOKEN_VALIDITY}}" \
119+
# Front
120+
-e FRONT_REDIRECT_DOMAIN="${{secrets.FRONT_REDIRECT_DOMAIN}}" \
91121
ghcr.io/${{ github.repository }}/zoopzoop:latest
92122
93123

.github/workflows/test-server-cd.yml

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -59,12 +59,43 @@ jobs:
5959
-p $NEW_PORT:8080 \
6060
--name $NEW_CONTAINER \
6161
--network common \
62+
-e SPRING_PROFILES_ACTIVE=server \
63+
# DB
6264
-e SPRING_DATASOURCE_URL="${{secrets.TEST_DB_URL}}" \
6365
-e SPRING_DATASOURCE_USERNAME="${{secrets.TEST_DB_USERNAME}}" \
6466
-e SPRING_DATASOURCE_PASSWORD="${{secrets.TEST_DB_PASSWORD}}" \
67+
# AWS
68+
-e AWS_ACCESS_KEY_ID="${{secrets.AWS_ACCESS_KEY_ID}}" \
69+
-e AWS_SECRET_ACCESS_KEY="${{secrets.AWS_SECRET_ACCESS_KEY}}" \
70+
-e AWS_S3_BUCKECT_NAME="${{secrets.AWS_S3_BUCKET_NAME}}" \
71+
# RabbitMQ
6572
-e SPRING_RABBITMQ_HOST="${{secrets.TEST_RABBITMQ_HOST}}" \
6673
-e SPRING_RABBITMQ_USERNAME="${{secrets.TEST_RABBITMQ_USERNAME}}" \
6774
-e SPRING_RABBITMQ_PASSWORD="${{secrets.TEST_RABBITMQ_PASSWORD}}" \
75+
# Redis
76+
-e REDIS_HOST="${{secrets.TEST_REDIS_HOST}}" \
77+
-e REDIS_PASSWORD="${{secrets.TEST_REDIS_PASSWORD}}" \
78+
# OAuth2
79+
-e KAKAO_CLIENT_ID="${{secrets.OAUTH_KAKAO_CLIENT_ID}}" \
80+
-e GOOGLE_CLIENT_ID="${{secrets.OAUTH_GOOGLE_CLIENT_ID}}" \
81+
-e GOOGLE_CLIENT_SECRET="${{secrets.OAUTH_GOOGLE_CLIENT_SECRET}}" \
82+
-e KAKAO_REDIRECT_URI="${{TEST_OAUTH_KAKAO_REDIRECT_URI}}" \
83+
-e GOOGLE_REDIRECT_URI="${{TEST_OAUTH_GOOGLE_REDIRECT_URI}}" \
84+
# Sentry
85+
-e SENTRY_DSN="${{secrets.SENTRY_DSN}}" \
86+
# OpenAI
87+
-e OPENAI_API_KEY="${{secrets.OPENAI_API_KEY}}" \
88+
# Liveblocks
89+
-e LIVEBLOCKS_SECRET_KEY="${{secrets.LIVEBLOCKS_SECRET_KEY}}" \
90+
# naver
91+
-e NAVER_CLIENT_ID="${{secrets.NAVER_CLIENT_ID}}" \
92+
-e NAVER_CLIENT_SECRET="${{secrets.NAVER_CLIENT_SECRET}}" \
93+
# JWT
94+
-e JWT_SECRET_KEY="${{secrets.JWT_SECRET_KEY}}" \
95+
-e JWT_ACCESS_TOKEN_VALIDITY="${{secrets.JWT_ACCESS_TOKEN_VALIDITY}}" \
96+
-e JWT_REFRESH_TOKEN_VALIDITY="${{secrets.JWT_REFRESH_TOKEN_VALIDITY}}" \
97+
# Front
98+
-e FRONT_REDIRECT_DOMAIN="${{secrets.FRONT_REDIRECT_DOMAIN}}" \
6899
ghcr.io/${{ github.repository }}/zoopzoop:latest
69100
70101
# 헬스체크

.github/workflows/test-server-ci.yml

Lines changed: 22 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -64,40 +64,32 @@ jobs:
6464
- name: Grant execute permission for gradlew
6565
run: chmod +x ./gradlew
6666

67-
# 5. application-secrets.yml 생성
68-
- name: Generate application-secrets.yml
69-
run: |
70-
mkdir -p src/main/resources
71-
echo "${{ secrets.APPLICATION_SECRET_YML }}" > src/main/resources/application-secrets.yml
72-
echo "OPENAI_API_KEY: ${{ secrets.OPENAI_API_KEY }}" >> src/main/resources/application-secrets.yml
73-
74-
echo "spring.cloud.aws.region.static: ${{ secrets.AWS_REGION }}" >> src/main/resources/application-secrets.yml
75-
echo "spring.cloud.aws.credentials.access-key: ${{ secrets.AWS_ACCESS_KEY_ID }}" >> src/main/resources/application-secrets.yml
76-
echo "spring.cloud.aws.credentials.secret-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}" >> src/main/resources/application-secrets.yml
77-
echo "spring.cloud.aws.s3.bucket: ${{ secrets.AWS_S3_BUCKET_NAME }}" >> src/main/resources/application-secrets.yml
78-
echo "spring.cloud.aws.stack.auto: false" >> src/main/resources/application-secrets.yml
79-
80-
echo "liveblocks.secret-key: ${{ secrets.LIVEBLOCKS_SECRET_KEY }}" >> src/main/resources/application-secrets.yml
81-
82-
# 6. application-secrets-server.yml 생성
83-
- name: Generate application-secrets-server.yml
84-
run: |
85-
mkdir -p src/main/resources
86-
echo "${{ secrets.APPLICATION_SECRET_SERVER_YML }}" > src/main/resources/application-secrets-server.yml
87-
echo "OPENAI_API_KEY: ${{ secrets.OPENAI_API_KEY }}" >> src/main/resources/application-secrets-server.yml
88-
89-
# 7. Gradle 테스트 실행
67+
# 5. Gradle 테스트 실행
9068
- name: Test with Gradle
9169
# 테스트 단계에서 RabbitMQ 연결을 위한 환경 변수 설정
9270
env:
71+
OPENAI_API_KEY: ${{ secrets.OPENAI_API_KEY }}
9372
SPRING_RABBITMQ_HOST: localhost
94-
SPRING_RABBITMQ_PORT: 5672
9573
SPRING_RABBITMQ_USERNAME: guest
9674
SPRING_RABBITMQ_PASSWORD: guest
97-
run: ./gradlew test
98-
99-
# 8. 테스트 결과 요약 출력
75+
KAKAO_CLIENT_ID: ${{ secrets.OAUTH_KAKAO_CLIENT_ID }}
76+
GOOGLE_CLIENT_ID: ${{ secrets.OAUTH_GOOGLE_CLIENT_ID }}
77+
GOOGLE_CLIENT_SECRET: ${{ secrets.OAUTH_GOOGLE_CLIENT_SECRET }}
78+
AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }}
79+
AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
80+
AWS_S3_BUCKET_NAME: ${{ secrets.AWS_S3_BUCKET_NAME }}
81+
SENTRY_DSN: ${{ secrets.SENTRY_DSN }}
82+
JWT_SECRET_KEY: ${{ secrets.JWT_SECRET_KEY }}
83+
JWT_ACCESS_TOKEN_VALIDITY: ${{ secrets.JWT_ACCESS_TOKEN_VALIDITY }}
84+
JWT_REFRESH_TOKEN_VALIDITY: ${{ secrets.JWT_REFRESH_TOKEN_VALIDITY }}
85+
NAVER_CLIENT_ID: ${{ secrets.NAVER_CLIENT_ID }}
86+
NAVER_CLIENT_SECRET: ${{ secrets.NAVER_CLIENT_SECRET }}
87+
LIVEBLOCKS_SECRET_KEY: ${{ secrets.LIVEBLOCKS_SECRET_KEY }}
88+
run: ./gradlew test --stacktrace
89+
90+
# 6. 테스트 결과 요약 출력
10091
- name: Show test results
92+
if: always() # 테스트 실패 여부와 상관없이 항상 실행
10193
run: |
10294
echo "==== Test Results ===="
10395
if compgen -G "build/test-results/test/TEST-*.xml" > /dev/null; then
@@ -113,28 +105,19 @@ jobs:
113105
echo "No test results found."
114106
fi
115107
116-
# 8-1. S3 자격 증명 제거 (빌드 전에만)
117-
- name: Remove only S3 credentials before building
118-
run: |
119-
CONFIG_FILE="src/main/resources/application-secrets.yml"
120-
sed -i '/spring.cloud.aws.credentials.access-key/d' $CONFIG_FILE
121-
sed -i '/spring.cloud.aws.credentials.secret-key/d' $CONFIG_FILE
122-
sed -i '/spring.cloud.aws.region.static/d' $CONFIG_FILE
123-
sed -i '/spring.cloud.aws.stack.auto/d' $CONFIG_FILE
124-
125-
# 9. Gradle 빌드 실행 (테스트 성공 시)
108+
# 7. Gradle 빌드 실행 (테스트 성공 시)
126109
- name: Build with Gradle
127110
run: ./gradlew build -x test
128111

129-
# 10. GHCR 로그인
112+
# 8. GHCR 로그인
130113
- name: Log in to GHCR
131114
uses: docker/login-action@v2
132115
with:
133116
registry: ghcr.io
134117
username: ${{ github.repository_owner }}
135118
password: ${{ secrets.GITHUB_TOKEN }}
136119

137-
# 11. Docker 이미지 빌드 & 푸시
120+
# 9. Docker 이미지 빌드 & 푸시
138121
- name: Build & Push Docker Image
139122
run: |
140123
IMAGE_NAME=ghcr.io/${{ github.repository }}/zoopzoop

src/main/resources/application-dev.yml

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -15,20 +15,20 @@ spring:
1515
host: localhost
1616
port: 6379
1717
timeout: 6000
18-
cache: #Spring Cache를 사용하기 위한 Redis
19-
type: redis
20-
redis:
21-
time-to-live: 300000
22-
cache-null-values: false
2318

19+
security:
20+
oauth2:
21+
client:
22+
registration:
23+
kakao:
24+
redirect-uri: http://localhost:8080/login/oauth2/code/kakao
25+
google:
26+
redirect-uri: http://localhost:8080/login/oauth2/code/google
2427
app:
2528
seed:
2629
enabled: true
2730

2831
sentry:
29-
dsn: https://60f1acad189d2994353d59b7895076ee@o4510100579155968.ingest.us.sentry.io/4510100584923136
30-
# Add data like request headers and IP for users,
31-
# see https://docs.sentry.io/platforms/java/guides/spring-boot/data-management/data-collected/ for more info
3232
send-default-pii: true
3333
environment: local
34-
traces-sample-rate: 0.0
34+
traces-sample-rate: 0.0

src/main/resources/application-server.yml

Lines changed: 15 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -10,29 +10,33 @@ spring:
1010

1111
data: #RedisTemplate 등을 사용하기 위한 직접 연결용
1212
redis:
13-
host: 10.0.1.246
13+
host: ${REDIS_HOST}
1414
port: 6379
1515
timeout: 6000
16-
password: zoopzoopRedisTest!
16+
password: ${REDIS_PASSWORD}
17+
1718
cache: #Spring Cache를 사용하기 위한 Redis
1819
type: redis
1920
redis:
2021
time-to-live: 300000
2122
cache-null-values: false
2223

23-
management:
24-
endpoints:
25-
web:
26-
exposure:
27-
include: health,info
28-
endpoint:
29-
health:
30-
show-details: always
24+
security:
25+
oauth2:
26+
client:
27+
registration:
28+
kakao:
29+
redirect-uri: ${KAKAO_REDIRECT_URI}
30+
google:
31+
redirect-uri: ${GOOGLE_REDIRECT_URI}
32+
33+
front:
34+
redirect_domain: ${FRONT_REDIRECT_DOMAIN}
3135

3236
sentry:
33-
dsn: https://60f1acad189d2994353d59b7895076ee@o4510100579155968.ingest.us.sentry.io/4510100584923136
3437
# Add data like request headers and IP for users,
3538
# see https://docs.sentry.io/platforms/java/guides/spring-boot/data-management/data-collected/ for more info
3639
send-default-pii: true
3740
environment: prod
3841
traces-sample-rate: 0.2
42+

src/main/resources/application-test.yml

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,27 @@ spring:
1313
ddl-auto: create-drop
1414
show-sql: true
1515

16+
security:
17+
oauth2:
18+
client:
19+
registration:
20+
kakao:
21+
redirect-uri: http://localhost:3000/oauth/callback/kakao
22+
google:
23+
redirect-uri: http://localhost:3000/oauth/callback/google
24+
25+
front:
26+
redirect_domain: http://localhost:3000
27+
28+
app:
29+
seed:
30+
enabled: false
31+
32+
sentry:
33+
send-default-pii: true
34+
environment: local
35+
traces-sample-rate: 0.0
36+
1637
sql:
1738
init:
1839
mode: never

0 commit comments

Comments
 (0)