Skip to content

Commit 705e53a

Browse files
authored
#159 [CI/CD] 서버 메모리 제한
## #️⃣ 연관된 이슈 <!-- Ex) - #이슈번호 --> <!-- 연관된 이슈 번호를 링크 형태로 작성하세요 --> - closed #159 ## 📝 작업 내용 <!-- 이번 PR/이슈에서 실제 수행한 작업 내용을 작성하세요 --> ### 👷 Chore <!-- 새로운 기능 구현 내용 작성 --> | 내용 | 파일 | |------|------| | 서버 메모리 제한 | `deploy-dev.yml`, `deploy-main.yml` | | | | ## 📌 공유 사항 <!-- 팀원에게 공유할 내용이나 참고 사항 작성 --> <!-- 노션 환경 설정 파일 확인 부탁드립니다! --> > 1. 서버 메모리 제한했습니다. 나중에 개발 서버 및 배포 서버 데이터베이스 분리해야할 것 같은데 나중에 의논해보면 좋을 것 같습니다. ## ✅ 체크리스트 <!-- PR 제출 전에 체크해야 할 사항들 --> - [x] Reviewer에 팀원들을 선택했나요? - [x] Assignees에 본인을 선택했나요? - [x] 컨벤션에 맞는 Type을 선택했나요? - [x] Development에 이슈를 연동했나요? - [x] Merge 하려는 브랜치가 올바르게 설정되어 있나요? - [x] 컨벤션을 지키고 있나요? - [x] 로컬에서 실행했을 때 에러가 발생하지 않나요? - [x] 팀원들에게 PR 링크 공유를 했나요? ## 📸 스크린샷 <!-- Swagger, Postman, JUnit 테스트 화면 첨부 --> <!-- 기능 동작 화면이나 테스트 결과 캡처를 첨부하면 좋습니다 --> > 없음 ## 💬 리뷰 요구사항 <!-- 리뷰어에게 요청하는 구체적인 사항 작성 --> <!-- 종료 의도 판단을 Java 키워드 → AI 2차 검증 구조로 설계했는데 해당 구조가 유지보수 및 확장 측면에서 적절한지 의견 부탁드립니다. --> > 없음
1 parent 33b669c commit 705e53a

2 files changed

Lines changed: 32 additions & 30 deletions

File tree

.github/workflows/deploy-dev.yml

Lines changed: 16 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ name: Java CI/CD with Gradle (Dev Server)
22

33
on:
44
push:
5-
branches: [ "dev" ] # 1. 데브 브랜치 전용
5+
branches: [ "dev" ]
66
workflow_dispatch:
77

88
jobs:
@@ -23,42 +23,42 @@ jobs:
2323
chmod +x ./gradlew
2424
./gradlew build -x test
2525
26-
- name: Create .env file from Secret
27-
run: |
28-
cat <<'EOF' > .env
29-
${{ secrets.ENV_VARIABLES }}
30-
EOF
31-
32-
# // 1. 전송용 폴더를 만들어서 JAR와 .env를 한데 모으기
26+
# // 1. JAR 파일만 전송 준비 (환경변수는 서버에서 직접 생성하는게 더 깔끔해)
3327
- name: Prepare deployment files
3428
run: |
3529
mkdir -p deploy
3630
cp build/libs/*-SNAPSHOT.jar deploy/
37-
cp .env deploy/
3831
39-
# // 2. 모아둔 deploy 폴더의 내용물만 EC2로 전송
32+
# // 2. JAR 파일 EC2로 전송
4033
- name: Copy files to EC2
4134
uses: appleboy/scp-action@v0.1.7
4235
with:
4336
host: ${{ secrets.EC2_HOST }}
4437
username: ${{ secrets.EC2_USERNAME }}
4538
key: ${{ secrets.EC2_SSH_KEY }}
4639
source: "deploy/*"
47-
target: "~/dev-server" # 데브 전용 폴더
48-
strip_components: 1 # 'deploy' 폴더명만 깎아서 내용물(.jar, .env)만 전송
40+
target: "~/dev-server"
41+
strip_components: 1
4942

43+
# // 3. EC2 서버에서 실행 스크립트
5044
- name: Deploy to EC2
5145
uses: appleboy/ssh-action@v1.0.3
5246
with:
5347
host: ${{ secrets.EC2_HOST }}
5448
username: ${{ secrets.EC2_USERNAME }}
5549
key: ${{ secrets.EC2_SSH_KEY }}
5650
script: |
57-
# 3. 8081 포트만 종료
51+
# 1. 기존 8081 프로세스 종료
5852
fuser -k 8081/tcp || true
5953
6054
cd ~/dev-server
61-
chmod +x *.jar
6255
63-
# // 2. .env 파일을 읽어서 환경변수로 등록 후 8081 포트로 실행
64-
export $(grep -v '^#' .env | xargs) && nohup java -jar -Dserver.port=8081 *-SNAPSHOT.jar > dev-app.log 2>&1 &
56+
# 2. .env 파일 생성
57+
cat <<'EOF' > .env
58+
${{ secrets.ENV_VARIABLES }}
59+
EOF
60+
61+
# 3. 환경 변수 로드 및 메모리 제한 걸어서 실행
62+
# // 1. set -a로 .env 로드, -Xmx256m으로 메모리 방어
63+
set -a; source .env; set +a
64+
nohup java -Xmx256m -Dserver.port=8081 -jar *-SNAPSHOT.jar > dev-app.log 2>&1 &

.github/workflows/deploy-main.yml

Lines changed: 16 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ name: Java CI/CD with Gradle (Main Server)
22

33
on:
44
push:
5-
branches: [ "main" ] # 1. 메인 브랜치 전용
5+
branches: [ "main" ]
66
workflow_dispatch:
77

88
jobs:
@@ -23,20 +23,13 @@ jobs:
2323
chmod +x ./gradlew
2424
./gradlew build -x test
2525
26-
- name: Create .env file from Secret
27-
run: |
28-
cat <<'EOF' > .env
29-
${{ secrets.ENV_VARIABLES }}
30-
EOF
31-
32-
# // 1. 전송용 폴더 준비
26+
# // 1. 전송용 폴더에 JAR 파일만 준비 (환경변수는 보안상 서버에서 직접 생성)
3327
- name: Prepare deployment files
3428
run: |
3529
mkdir -p deploy
3630
cp build/libs/*-SNAPSHOT.jar deploy/
37-
cp .env deploy/
3831
39-
# // 2. 메인 서버 폴더로 전송
32+
# // 2. 메인 서버 폴더로 JAR 전송
4033
- name: Copy files to EC2
4134
uses: appleboy/scp-action@v0.1.7
4235
with:
@@ -47,18 +40,27 @@ jobs:
4740
target: "~/main-server"
4841
strip_components: 1
4942

43+
# // 3. 운영 서버 실행 스크립트
5044
- name: Deploy to EC2
5145
uses: appleboy/ssh-action@v1.0.3
5246
with:
5347
host: ${{ secrets.EC2_HOST }}
5448
username: ${{ secrets.EC2_USERNAME }}
5549
key: ${{ secrets.EC2_SSH_KEY }}
5650
script: |
57-
# 3. 8080 포트 종료
51+
# 1. 기존 8080 프로세스 종료
5852
fuser -k 8080/tcp || true
5953
54+
# 2. 운영 서버 폴더 이동
6055
cd ~/main-server
61-
chmod +x *.jar
6256
63-
# // 2. 환경변수 등록 후 8080 포트로 실행
64-
export $(grep -v '^#' .env | xargs) && nohup java -jar -Dserver.port=8080 *-SNAPSHOT.jar > main-app.log 2>&1 &
57+
# 3. .env 파일 생성 (운영 전용 Secrets 사용)
58+
# // 1. EOF를 써서 특수문자 깨짐 없이 안전하게 저장
59+
cat <<'EOF' > .env
60+
${{ secrets.ENV_VARIABLES }}
61+
EOF
62+
63+
# 4. 환경 변수 로드 및 운영 서버 실행
64+
# // 2. 운영은 400MB 제한으로 안정성 확보
65+
set -a; source .env; set +a
66+
nohup java -Xmx400m -Dserver.port=8080 -jar *-SNAPSHOT.jar > server.log 2>&1 &

0 commit comments

Comments
 (0)