Skip to content

Commit b74e9cd

Browse files
committed
feat: 세종대 포털 로그인 기능 구현
1 parent e9da858 commit b74e9cd

Some content is hidden

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

49 files changed

+2822
-97
lines changed

.dockerignore

Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,53 @@
1+
# Git
2+
.git
3+
.gitignore
4+
.gitattributes
5+
6+
# GitHub
7+
.github
8+
9+
# IDE
10+
.idea
11+
.vscode
12+
*.iml
13+
*.iws
14+
*.ipr
15+
16+
# Gradle
17+
.gradle
18+
gradle
19+
gradlew
20+
gradlew.bat
21+
22+
# Build
23+
build
24+
target
25+
out
26+
27+
# Docs
28+
*.md
29+
README.md
30+
HELP.md
31+
docs/
32+
FIX_*.md
33+
34+
# Tests
35+
src/test
36+
37+
# Mac
38+
.DS_Store
39+
40+
# 환경 파일
41+
.env
42+
.env.*
43+
!.env.example
44+
45+
# 로그
46+
*.log
47+
logs
48+
49+
# 임시 파일
50+
*.tmp
51+
*.swp
52+
*~
53+

.env.example

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
# =============================================
2+
# Christmas Backend 프로덕션 환경 변수
3+
# =============================================
4+
# 이 파일을 EC2의 /home/ubuntu/apps/christmas/prod/.env 경로에 생성하세요
5+
6+
# =============================================
7+
# Docker Compose 설정
8+
# =============================================
9+
ECR_REGISTRY=430118840639.dkr.ecr.ap-northeast-2.amazonaws.com
10+
ECR_REPO=christmas-backend
11+
12+
# =============================================
13+
# 데이터베이스 설정
14+
# =============================================
15+
DATASOURCE_URL=jdbc:postgresql://your-db-host:5432/christmas
16+
DATASOURCE_USERNAME=your_db_user
17+
DATASOURCE_PASSWORD=your_db_password
18+
19+
# =============================================
20+
# Redis 설정
21+
# =============================================
22+
REDIS_HOST=localhost
23+
REDIS_PORT=6379
24+
25+
# =============================================
26+
# JWT 설정 (보안 주의!)
27+
# =============================================
28+
# 64바이트 이상의 랜덤 문자열 사용 (openssl rand -base64 64)
29+
JWT_SECRET=your-super-secure-random-key-at-least-64-bytes-long-for-hs512-algorithm-production-environment
30+
JWT_ACCESS_EXPIRATION=3600000
31+
JWT_REFRESH_EXPIRATION=604800000
32+
33+
# =============================================
34+
# 로깅 설정
35+
# =============================================
36+
LOG_LEVEL=INFO
37+
38+
# =============================================
39+
# 기타 설정
40+
# =============================================
41+
TZ=Asia/Seoul
42+

.github/workflows/deploy.yml

Lines changed: 117 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,117 @@
1+
name: Deploy Christmas Backend to EC2
2+
3+
on:
4+
push:
5+
branches: [ "main" ]
6+
workflow_dispatch:
7+
8+
env:
9+
AWS_REGION: ap-northeast-2
10+
AWS_ACCOUNT_ID: ${{ secrets.AWS_ACCOUNT_ID }}
11+
ECR_REPO: christmas-backend
12+
IMAGE_URI: ${{ secrets.AWS_ACCOUNT_ID }}.dkr.ecr.ap-northeast-2.amazonaws.com/christmas-backend
13+
14+
permissions:
15+
id-token: write
16+
contents: read
17+
18+
jobs:
19+
deploy:
20+
runs-on: ubuntu-latest
21+
steps:
22+
- name: Checkout
23+
uses: actions/checkout@v4
24+
25+
- name: JDK 21 설치
26+
uses: actions/setup-java@v4
27+
with:
28+
distribution: temurin
29+
java-version: 21
30+
31+
- name: gradlew 실행 권한 추가
32+
run: chmod +x ./gradlew
33+
34+
- name: AWS Role 설정
35+
uses: aws-actions/configure-aws-credentials@v4
36+
with:
37+
role-to-assume: arn:aws:iam::${{ secrets.AWS_ACCOUNT_ID }}:role/GitHubActionsECRDeployRole
38+
aws-region: ${{ env.AWS_REGION }}
39+
40+
- name: ECR에 로그인
41+
id: login-ecr
42+
uses: aws-actions/amazon-ecr-login@v2
43+
44+
- name: Docker metadata 설정
45+
id: meta
46+
uses: docker/metadata-action@v5
47+
with:
48+
images: ${{ env.IMAGE_URI }}
49+
tags: |
50+
type=raw,value=latest
51+
type=sha
52+
53+
- name: Docker Buildx 설정
54+
uses: docker/setup-buildx-action@v3
55+
with:
56+
driver: docker-container
57+
58+
- name: Docker 이미지 빌드 및 ECR에 Push
59+
uses: docker/build-push-action@v6
60+
with:
61+
context: .
62+
push: true
63+
tags: ${{ steps.meta.outputs.tags }}
64+
cache-from: type=gha
65+
cache-to: type=gha,mode=max
66+
platforms: linux/amd64
67+
68+
- name: EC2 접속 및 배포
69+
uses: appleboy/ssh-action@v1.0.3
70+
with:
71+
host: ${{ secrets.EC2_HOST }}
72+
username: ${{ secrets.EC2_USER }}
73+
key: ${{ secrets.EC2_KEY }}
74+
script: |
75+
set -e
76+
77+
# 환경 변수 설정
78+
AWS_REGION=ap-northeast-2
79+
ECR_REGISTRY=${{ steps.login-ecr.outputs.registry }}
80+
ECR_REPO=christmas-backend
81+
82+
# ECR 로그인
83+
aws ecr get-login-password --region ${AWS_REGION} \
84+
| docker login --username AWS --password-stdin ${ECR_REGISTRY}
85+
86+
# 배포 디렉토리로 이동 (없으면 생성)
87+
mkdir -p /home/ubuntu/apps/christmas/prod
88+
cd /home/ubuntu/apps/christmas/prod
89+
90+
# .env 파일이 없으면 경고
91+
if [ ! -f .env ]; then
92+
echo "Warning: .env file not found. Please create it with required environment variables."
93+
fi
94+
95+
# 기존 컨테이너 중지 및 제거
96+
docker stop christmas-backend || true
97+
docker rm christmas-backend || true
98+
docker pull ${ECR_REGISTRY}/${ECR_REPO}:latest
99+
docker compose up -d christmas-backend
100+
docker image prune -f
101+
sleep 10
102+
docker ps | grep christmas-backend || echo "Container not running!"
103+
104+
# 헬스체크
105+
for i in {1..30}; do
106+
if docker exec christmas-backend wget --spider -q http://localhost:8080/actuator/health 2>/dev/null; then
107+
echo "Health check passed!"
108+
exit 0
109+
fi
110+
echo "Waiting for health check... ($i/30)"
111+
sleep 2
112+
done
113+
114+
echo "Health check failed!"
115+
docker logs christmas-backend --tail 50
116+
exit 1
117+

.gitignore

Lines changed: 51 additions & 61 deletions
Original file line numberDiff line numberDiff line change
@@ -1,77 +1,67 @@
1-
############################
2-
# OS
3-
############################
4-
.DS_Store
5-
Thumbs.db
1+
# Gradle
2+
.gradle/
3+
build/
4+
!gradle/wrapper/gradle-wrapper.jar
5+
!**/src/main/**/build/
6+
!**/src/test/**/build/
67

7-
############################
8-
# IntelliJ / JetBrains
9-
############################
8+
# IntelliJ IDEA
109
.idea/
11-
*.iml
1210
*.iws
11+
*.iml
1312
*.ipr
1413
out/
14+
!**/src/main/**/out/
15+
!**/src/test/**/out/
1516

16-
############################
17-
# Java / Gradle
18-
############################
19-
*.class
20-
*.log
17+
# Eclipse
18+
.apt_generated
19+
.classpath
20+
.factorypath
21+
.project
22+
.settings
23+
.springBeans
24+
.sts4-cache
25+
bin/
26+
!**/src/main/**/bin/
27+
!**/src/test/**/bin/
2128

22-
.gradle/
23-
build/
24-
target/
29+
# NetBeans
30+
/nbproject/private/
31+
/nbbuild/
32+
/dist/
33+
/nbdist/
34+
/.nb-gradle/
2535

26-
############################
27-
# Maven
28-
############################
29-
/target/
30-
pom.xml.tag
31-
pom.xml.releaseBackup
32-
pom.xml.versionsBackup
33-
pom.xml.next
34-
release.properties
35-
dependency-reduced-pom.xml
36+
# VS Code
37+
.vscode/
3638

37-
############################
38-
# Environment variables
39-
############################
40-
.env
41-
.env.*
42-
!.env.example
39+
# Mac
40+
.DS_Store
4341

44-
############################
45-
# Docker
46-
############################
47-
docker-compose.override.yml
48-
*.env.docker
42+
# Windows
43+
Thumbs.db
4944

50-
############################
51-
# Logs
52-
############################
53-
logs/
45+
# 환경 변수
46+
.env
47+
.env.local
48+
.env.*.local
49+
50+
# 로그
5451
*.log
52+
logs/
5553

56-
############################
57-
# Test / Coverage
58-
############################
59-
coverage/
60-
*.lcov
54+
# 임시 파일
55+
*.tmp
56+
*.swp
57+
*~
6158

62-
############################
63-
# IDE / Tooling
64-
############################
65-
.sonar/
66-
.cache/
67-
tmp/
59+
# 데이터베이스
60+
*.db
61+
*.sqlite
6862

69-
############################
70-
# 기타
71-
############################
72-
*.swp
73-
*.swo
74-
*.bak
63+
# 보안 파일
64+
application-secret.yml
65+
application-local.yml
7566

76-
/infra
77-
/.env
67+
docs/

Dockerfile

Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
# 멀티 스테이지 빌드를 사용한 최적화된 Dockerfile
2+
FROM gradle:8.5-jdk21 AS builder
3+
WORKDIR /app
4+
# Gradle 캐시를 위한 의존성 파일 복사
5+
COPY build.gradle settings.gradle ./
6+
COPY gradle ./gradle
7+
# 의존성 다운로드 (캐시 활용)
8+
RUN gradle dependencies --no-daemon || true
9+
# 소스 코드 복사
10+
COPY src ./src
11+
# 애플리케이션 빌드 (테스트 제외)
12+
RUN gradle clean build -x test --no-daemon
13+
14+
# 실행 스테이지
15+
FROM eclipse-temurin:21-jre-alpine
16+
17+
WORKDIR /app
18+
19+
# 타임존 설정
20+
RUN apk add --no-cache tzdata && \
21+
cp /usr/share/zoneinfo/Asia/Seoul /etc/localtime && \
22+
echo "Asia/Seoul" > /etc/timezone && \
23+
apk del tzdata
24+
25+
# 보안을 위한 사용자 생성
26+
RUN addgroup -S spring && adduser -S spring -G spring
27+
USER spring:spring
28+
29+
# 빌드된 JAR 파일 복사
30+
COPY --from=builder /app/build/libs/*.jar app.jar
31+
32+
# 헬스체크
33+
HEALTHCHECK --interval=30s --timeout=3s --start-period=60s --retries=3 \
34+
CMD wget --no-verbose --tries=1 --spider http://localhost:8080/actuator/health || exit 1
35+
36+
# JVM 옵션 설정
37+
ENV JAVA_OPTS="-Xms512m -Xmx1024m -XX:+UseContainerSupport -XX:MaxRAMPercentage=75.0"
38+
39+
# 포트 노출
40+
EXPOSE 8080
41+
42+
# 애플리케이션 실행
43+
ENTRYPOINT ["java","-jar","/app/app.jar"]
44+

0 commit comments

Comments
 (0)