Skip to content

Commit 765a2ab

Browse files
authored
Merge pull request #191 from prgrms-web-devcourse-final-project/develop
chore[env]: env파일 정리
2 parents bee50ac + ea7d9f0 commit 765a2ab

File tree

54 files changed

+3105
-743
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

54 files changed

+3105
-743
lines changed

.github/workflows/CI-CD_Pipeline.yml

Lines changed: 14 additions & 72 deletions
Original file line numberDiff line numberDiff line change
@@ -80,36 +80,11 @@ jobs:
8080
- name: Create test .env file
8181
working-directory: backend
8282
run: |
83-
cat > .env << 'EOF'
84-
# Datasource 설정 (application-test.yml에서 참조)
85-
TEST_DATASOURCE_URL=jdbc:h2:mem:db_test;MODE=MySQL
86-
TEST_DATASOURCE_USERNAME=sa
87-
TEST_DATASOURCE_PASSWORD=
88-
TEST_DATASOURCE_DRIVER=org.h2.Driver
89-
90-
# JPA 설정 (application-test.yml에서 참조)
91-
TEST_JPA_HIBERNATE_DDL_AUTO=create-drop
92-
93-
email_address=${{ secrets.EMAIL_ADDRESS }}
94-
send_email_password=${{ secrets.EMAIL_PASSWORD }}
95-
send_email_address=${{ secrets.SEND_EMAIL_ADDRESS }}
96-
97-
# Redis 설정 (application-test.yml에서 참조, GitHub Actions 서비스 사용)
98-
TEST_REDIS_HOST=localhost
99-
TEST_REDIS_PORT=6379
100-
TEST_REDIS_PASSWORD=
101-
102-
# Qdrant
103-
TEST_QDRANT_HOST=localhost
104-
TEST_QDRANT_PORT=6333
105-
106-
# CI/CD 환경에서는 Embedded Redis 끄기
107-
SPRING_DATA_REDIS_EMBEDDED=false
108-
109-
# JWT 설정 (application-test.yml에서 참조)
110-
CUSTOM_JWT_SECRET_KEY=${{ secrets.JWT_SECRET_KEY }}
111-
CUSTOM_JWT_ACCESS_TOKEN_EXPIRATION_SECONDS=3600
112-
EOF
83+
set -euo pipefail
84+
install -d -m 700 .
85+
echo "${{ secrets.ENV_BASE64 }}" | base64 -d > .env
86+
chmod 600 .env
87+
test -s .env || { echo ".env is empty"; exit 1; }
11388
11489
- name: Run unit, and domain tests
11590
run: ${{ matrix.gradle_cmd }} clean test
@@ -219,19 +194,6 @@ jobs:
219194
run: |
220195
echo "IMAGE_PREFIX=$(echo $GITHUB_REPOSITORY | tr '[:upper:]' '[:lower:]')" >> $GITHUB_ENV
221196
222-
- name: Create prod .env file
223-
run: |
224-
cat > .env << 'EOF'
225-
SPRING_PROFILES_ACTIVE=prod
226-
PROD_DATASOURCE_URL=jdbc:mysql://mysql:3306/${{ secrets.DB_NAME }}
227-
PROD_DATASOURCE_USERNAME=${{ secrets.DB_USER }}
228-
PROD_DATASOURCE_PASSWORD=${{ secrets.DB_PASSWORD }}
229-
230-
PROD_REDIS_HOST=redis
231-
PROD_REDIS_PORT=6379
232-
PROD_REDIS_PASSWORD=${{ secrets.REDIS_PASSWORD }}
233-
EOF
234-
235197
- name: AWS SSM Send-Command
236198
uses: peterkimzz/aws-ssm-send-command@master
237199
id: ssm
@@ -243,44 +205,24 @@ jobs:
243205
working-directory: /
244206
comment: Deploy
245207
command: |
246-
set -xe
208+
set -euo pipefail
247209
echo "===== 현재 실행 중인 컨테이너 ====="
248210
docker ps -a || true
249211
250212
echo "===== 기존 컨테이너 종료 & 제거 ====="
251213
docker stop app 2>/dev/null || true
252214
docker rm app 2>/dev/null || true
253215
254-
# EC2 내부에서 prod.env 파일 생성 (기존 파일 있으면 덮어쓰기)
255-
mkdir -p /home/ec2-user/configs
256-
cat > /home/ec2-user/configs/prod.env << 'EOF'
257-
SPRING_PROFILES_ACTIVE=prod
258-
259-
CUSTOM_JWT_SECRET_KEY=${{ secrets.JWT_SECRET_KEY }}
260-
CUSTOM_JWT_ACCESS_TOKEN_EXPIRATION_SECONDS=3600
261-
262-
PROD_DATASOURCE_URL=jdbc:mysql://mysql:3306/${{ secrets.DB_NAME }}?createDatabaseIfNotExist=true&useSSL=false&allowPublicKeyRetrieval=true&serverTimezone=Asia/Seoul
263-
PROD_DATASOURCE_DRIVER=com.mysql.cj.jdbc.Driver
264-
PROD_DATASOURCE_USERNAME=root
265-
PROD_DATASOURCE_PASSWORD=${{ secrets.DB_PASSWORD }}
266-
PROD_JPA_HIBERNATE_DDL_AUTO=none
267-
268-
PROD_REDIS_HOST=redis
269-
PROD_REDIS_PORT=6379
270-
PROD_REDIS_PASSWORD=${{ secrets.REDIS_PASSWORD }}
216+
# EC2 내부에서 prod.env 복원 (ENV_BASE64 -> 디코드)
217+
install -d -m 700 /home/ec2-user/configs
218+
cat > /home/ec2-user/configs/prod.env.b64 <<'__B64__'
219+
${{ secrets.ENV_BASE64 }}
220+
__B64__
271221
272-
PROD_QDRANT_HOST=qdrant
273-
PROD_QDRANT_PORT=6334
274-
275-
send_email_address=${{ secrets.SEND_EMAIL_ADDRESS }}
276-
send_email_password=${{ secrets.SEND_EMAIL_PASSWORD }}
277-
278-
PROD_SENTRY_DSN=${{ secrets.SENTRY_DSN }}
279-
280-
EOF
281-
282-
# 파일 권한 최소화
222+
base64 -d /home/ec2-user/configs/prod.env.b64 > /home/ec2-user/configs/prod.env
283223
chmod 600 /home/ec2-user/configs/prod.env
224+
shred -u /home/ec2-user/configs/prod.env.b64 # 임시 파일 안전 삭제
225+
284226
285227
# EC2에서 GHCR 로그인
286228
echo "${{ secrets.GHCR_PAT }}" | docker login ghcr.io -u ${{ github.actor }} --password-stdin

backend/.env.default

Lines changed: 45 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,25 @@
11
SPRING_PROFILES_ACTIVE=NEED_TO_SET
2-
32
SPRING_JPA_HIBERNATE_DDL_AUTO=NEED_TO_SET
43

5-
SPRING__SECURITY__OAUTH2__CLIENT__REGISTRATION__KAKAO__CLIENT_ID=NEED_TO_SET
6-
SPRING__SECURITY__OAUTH2__CLIENT__REGISTRATION__KAKAO__CLIENT_SECRET=NEED_TO_SET
7-
SPRING__SECURITY__OAUTH2__CLIENT__REGISTRATION__NAVER__CLIENT_ID=NEED_TO_SET
8-
SPRING__SECURITY__OAUTH2__CLIENT__REGISTRATION__NAVER__CLIENT_SECRET=NEED_TO_SET
4+
SPRING_SECURITY_OAUTH2_CLIENT_REGISTRATION_KAKAO_CLIENT_ID=NEED_TO_SET
5+
SPRING_SECURITY_OAUTH2_CLIENT_REGISTRATION_KAKAO_CLIENT_SECRET=NEED_TO_SET
6+
SPRING_SECURITY_OAUTH2_CLIENT_REGISTRATION_NAVER_CLIENT_ID=NEED_TO_SET
7+
SPRING_SECURITY_OAUTH2_CLIENT_REGISTRATION_NAVER_CLIENT_SECRET=NEED_TO_SET
98

109
CUSTOM_JWT_SECRET_KEY=NEED_TO_SET
1110
CUSTOM_JWT_ACCESS_TOKEN_EXPIRATION_SECONDS=NEED_TO_SET
1211

12+
# Email
13+
SEND_EMAIL_ADDRESS=NEED_TO_SET
14+
SEND_EMAIL_PASSWORD=NEED_TO_SET
15+
16+
# PROD
17+
PROD_FRONTEND_URL=NEED_TO_SET
18+
PROD_CORS_ALLOWED_ORIGINS=NEED_TO_SET
19+
PROD_OAUTH2_KAKAO_REDIRECT_URI=NEED_TO_SET
20+
PROD_OAUTH2_NAVER_REDIRECT_URI=NEED_TO_SET
21+
PROD_OAUTH2_SUCCESS_REDIRECT_URL=NEED_TO_SET
22+
PROD_OAUTH2_FAILURE_REDIRECT_URL=NEED_TO_SET
1323
PROD_DATASOURCE_URL=NEED_TO_SET
1424
PROD_DATASOURCE_DRIVER=NEED_TO_SET
1525
PROD_DATASOURCE_USERNAME=NEED_TO_SET
@@ -19,16 +29,32 @@ PROD_REDIS_HOST=NEED_TO_SET
1929
PROD_REDIS_PORT=NEED_TO_SET
2030
PROD_REDIS_PASSWORD=NEED_TO_SET
2131

32+
PROD_QDRANT_HOST=NEED_TO_SET
33+
PROD_QDRANT_PORT=NEED_TO_SET
34+
35+
# DEV
36+
DEV_FRONTEND_URL=NEED_TO_SET
37+
DEV_CORS_ALLOWED_ORIGINS=NEED_TO_SET
38+
DEV_OAUTH2_KAKAO_REDIRECT_URI=NEED_TO_SET
39+
DEV_OAUTH2_NAVER_REDIRECT_URI=NEED_TO_SET
40+
DEV_OAUTH2_SUCCESS_REDIRECT_URL=NEED_TO_SET
41+
DEV_OAUTH2_FAILURE_REDIRECT_URL=NEED_TO_SET
2242
DEV_DATASOURCE_URL=NEED_TO_SET
2343
DEV_DATASOURCE_USERNAME=NEED_TO_SET
2444
DEV_DATASOURCE_PASSWORD=NEED_TO_SET
2545
DEV_DATASOURCE_DRIVER=NEED_TO_SET
2646
DEV_JPA_HIBERNATE_DDL_AUTO=NEED_TO_SET
47+
DEV_DATASOURCE_PORT=NEED_TO_SET
48+
DEV_DB_ROOT_PASSWORD=NEED_TO_SET
2749

2850
DEV_REDIS_HOST=NEED_TO_SET
2951
DEV_REDIS_PORT=NEED_TO_SET
3052
DEV_REDIS_PASSWORD=NEED_TO_SET
3153

54+
DEV_QDRANT_HOST=NEED_TO_SET
55+
DEV_QDRANT_PORT=NEED_TO_SET
56+
57+
# TEST
3258
TEST_DATASOURCE_URL=NEED_TO_SET
3359
TEST_DATASOURCE_USERNAME=NEED_TO_SET
3460
TEST_DATASOURCE_PASSWORD=NEED_TO_SET
@@ -37,4 +63,17 @@ TEST_JPA_HIBERNATE_DDL_AUTO=NEED_TO_SET
3763

3864
TEST_REDIS_HOST=NEED_TO_SET
3965
TEST_REDIS_PORT=NEED_TO_SET
40-
TEST_REDIS_PASSWORD=NEED_TO_SET
66+
TEST_REDIS_PASSWORD=NEED_TO_SET
67+
68+
# AI
69+
OPENAI_API_KEY=NEED_TO_SET
70+
71+
# Base application.yml variables (no profile-specific prefix)
72+
SPRING_AI_VECTORSTORE_QDRANT_HOST=NEED_TO_SET
73+
SPRING_AI_VECTORSTORE_QDRANT_PORT=NEED_TO_SET
74+
SPRING_SECURITY_OAUTH2_CLIENT_REGISTRATION_KAKAO_REDIRECT_URI=NEED_TO_SET
75+
SPRING_SECURITY_OAUTH2_CLIENT_REGISTRATION_NAVER_REDIRECT_URI=NEED_TO_SET
76+
CUSTOM_CORS_ALLOWED_ORIGINS=NEED_TO_SET
77+
CUSTOM_OAUTH2_REDIRECT_URL=NEED_TO_SET
78+
CUSTOM_OAUTH2_FAILURE_URL=NEED_TO_SET
79+
CUSTOM_FRONTEND_URL=NEED_TO_SET

backend/build.gradle

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,7 @@ dependencies {
3838
implementation 'org.springframework.boot:spring-boot-starter-validation'
3939
implementation 'org.springframework.boot:spring-boot-starter-web'
4040
implementation 'org.springframework.boot:spring-boot-starter-actuator'
41+
implementation 'org.springframework.boot:spring-boot-starter-oauth2-client'
4142
implementation group: 'org.springframework.boot', name: 'spring-boot-starter-mail', version: '3.0.5'
4243

4344
// API Documentation (문서화)
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
package com.ai.lawyer.domain.auth.dto;
2+
3+
import lombok.Builder;
4+
import lombok.Getter;
5+
6+
@Getter
7+
@Builder
8+
public class OAuth2LoginResponse {
9+
private boolean success;
10+
private String message;
11+
}

backend/src/main/java/com/ai/lawyer/domain/law/dto/LawSearchRequestDto.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,17 @@
11
package com.ai.lawyer.domain.law.dto;
22

33
import io.swagger.v3.oas.annotations.media.Schema;
4+
import lombok.AllArgsConstructor;
45
import lombok.Builder;
56
import lombok.Data;
7+
import lombok.NoArgsConstructor;
68

79
import java.time.LocalDate;
810

911
@Data
1012
@Builder
13+
@NoArgsConstructor
14+
@AllArgsConstructor
1115
public class LawSearchRequestDto {
1216

1317
@Schema(description = "법령명", example = "형사")

backend/src/main/java/com/ai/lawyer/domain/law/dto/LawsDto.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,12 +3,14 @@
33
import lombok.AllArgsConstructor;
44
import lombok.Builder;
55
import lombok.Data;
6+
import lombok.NoArgsConstructor;
67

78
import java.time.LocalDate;
89

910
@Data
1011
@Builder
1112
@AllArgsConstructor
13+
@NoArgsConstructor
1214
public class LawsDto {
1315
private Long id;
1416

0 commit comments

Comments
 (0)