Skip to content

2025-Sejong-Hackathon/hackathon-backend

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 

History

47 Commits
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

🎯 μ„Έμ’…λŒ€ν•™κ΅ 해컀톀 λ°±μ—”λ“œ

μ„Έμ’…λŒ€ν•™κ΅ 해컀톀을 μœ„ν•œ Spring Boot 기반 REST API μ„œλ²„μž…λ‹ˆλ‹€.

πŸ“‹ λͺ©μ°¨

πŸ›  기술 μŠ€νƒ

Backend

  • Java 21
  • Spring Boot 3.5.5
  • Spring Security - JWT 기반 인증/인가
  • Spring Data JPA + QueryDSL - λ°μ΄ν„°λ² μ΄μŠ€ μ ‘κ·Ό
  • PostgreSQL - 메인 λ°μ΄ν„°λ² μ΄μŠ€
  • Redis - μ„Έμ…˜ 관리 (μ˜ˆμ •)

DevOps

  • Docker + Docker Compose - μ»¨ν…Œμ΄λ„ˆν™”
  • AWS ECR - Docker 이미지 μ €μž₯μ†Œ
  • AWS EC2 - μ„œλ²„ ν˜ΈμŠ€νŒ…
  • GitHub Actions - CI/CD νŒŒμ΄ν”„λΌμΈ

기타

  • Swagger/OpenAPI - API λ¬Έμ„œν™”
  • Lombok - μ½”λ“œ κ°„μ†Œν™”
  • P6Spy - SQL 쿼리 λ‘œκΉ…
  • Sejong Portal Login - μ„Έμ’…λŒ€ 포털 둜그인 연동

✨ μ£Όμš” κΈ°λŠ₯

πŸ” 인증 (Authentication)

  • μ„Έμ’…λŒ€ν•™κ΅ 포털 둜그인 연동
    • μ„Έμ’…λŒ€ 포털 κ³„μ •μœΌλ‘œ κ°„νŽΈ 둜그인
    • 졜초 둜그인 μ‹œ νšŒμ› 정보 μžλ™ 생성
  • JWT 기반 인증
    • Access Token / Refresh Token
    • Stateless 인증 방식

πŸ‘€ νšŒμ› 관리 (Member)

  • λ‚΄ 정보 쑰회
  • νšŒμ› 정보 μžλ™ 동기화 (포털 연동)
  • νšŒμ› μƒνƒœ 관리 (ACTIVE, INACTIVE, BANNED)

πŸ”’ λ³΄μ•ˆ

  • Spring Security 기반 λ³΄μ•ˆ μ„€μ •
  • JWT 토큰 인증/인가
  • CORS μ„€μ •
  • λΉ„λ°€λ²ˆν˜Έ μ•”ν˜Έν™” (BCrypt)

πŸš€ μ‹œμž‘ν•˜κΈ°

사전 μš”κ΅¬μ‚¬ν•­

  • Java 21
  • Docker & Docker Compose
  • PostgreSQL 14+
  • Redis (선택)

둜컬 개발 ν™˜κ²½ μ„€μ •

  1. λ ˆν¬μ§€ν† λ¦¬ 클둠
git clone https://github.com/2025-Sejong-Hackathon/hackathon-backend.git
cd hackathon-backend
  1. ν™˜κ²½ λ³€μˆ˜ μ„€μ •
# src/main/resources/application-dev.yml μ°Έκ³ 
# λ˜λŠ” ν™˜κ²½ λ³€μˆ˜λ‘œ μ„€μ •

export DATASOURCE_URL=jdbc:postgresql://localhost:5432/hackathon
export DATASOURCE_USERNAME=your_username
export DATASOURCE_PASSWORD=your_password
export REDIS_HOST=localhost
export REDIS_PORT=6379
export JWT_SECRET=your-secret-key-min-32-characters
export JWT_ACCESS_TOKEN_EXPIRATION=3600000
export JWT_REFRESH_TOKEN_EXPIRATION=604800000
  1. λ°μ΄ν„°λ² μ΄μŠ€ μ€€λΉ„
# Docker둜 PostgreSQL μ‹€ν–‰
docker run -d \
  --name hackathon-postgres \
  -e POSTGRES_DB=hackathon \
  -e POSTGRES_USER=hackathon \
  -e POSTGRES_PASSWORD=password \
  -p 5432:5432 \
  postgres:14
  1. μ• ν”Œλ¦¬μΌ€μ΄μ…˜ μ‹€ν–‰
# Gradle λΉŒλ“œ 및 μ‹€ν–‰
./gradlew bootRun --args='--spring.profiles.active=dev'
  1. API λ¬Έμ„œ 확인
http://localhost:8080/swagger-ui.html

πŸ“š API λ¬Έμ„œ

Swagger UI

개발 ν™˜κ²½μ—μ„œλŠ” Swagger UIλ₯Ό 톡해 APIλ₯Ό ν…ŒμŠ€νŠΈν•  수 μžˆμŠ΅λ‹ˆλ‹€.

  • URL: http://localhost:8080/swagger-ui.html
  • OpenAPI Spec: http://localhost:8080/api-docs

μ£Όμš” μ—”λ“œν¬μΈνŠΈ

인증 API

POST /api/v1/auth/login          # μ„Έμ’…λŒ€ 포털 둜그인
POST /api/v1/auth/refresh        # 토큰 κ°±μ‹ 

νšŒμ› API

GET  /api/v1/members/me          # λ‚΄ 정보 쑰회

ν—¬μŠ€μ²΄ν¬

GET  /actuator/health            # μ„œλ²„ μƒνƒœ 확인

🐳 Docker둜 μ‹€ν–‰

포트 ꡬ쑰

μ™ΈλΆ€ μš”μ²­ β†’ Nginx (80/443) β†’ Docker (8082:8080) β†’ Spring Boot (8080)
  • Nginx: λ¦¬λ²„μŠ€ ν”„λ‘μ‹œ, λ‘œλ“œλ°ΈλŸ°μ‹±
  • Docker: μ»¨ν…Œμ΄λ„ˆ 격리 ν™˜κ²½
  • Spring Boot: μ• ν”Œλ¦¬μΌ€μ΄μ…˜ μ„œλ²„

Docker Compose μ‚¬μš©

# ν™˜κ²½ λ³€μˆ˜ μ„€μ •
export ECR_REGISTRY=your-account.dkr.ecr.ap-northeast-2.amazonaws.com
export ECR_REPO=hackathon-backend

# .env 파일 생성 (docker-compose.ymlκ³Ό 같은 μœ„μΉ˜)
cat > .env << EOF
SPRING_PROFILES_ACTIVE=prod
DATASOURCE_URL=jdbc:postgresql://your-db-host:5432/hackathon
DATASOURCE_USERNAME=your_username
DATASOURCE_PASSWORD=your_password
REDIS_HOST=your-redis-host
REDIS_PORT=6379
JWT_SECRET=your-secret-key
JWT_ACCESS_EXPIRATION=3600000
JWT_REFRESH_EXPIRATION=604800000
EOF

# μ»¨ν…Œμ΄λ„ˆ μ‹€ν–‰
docker-compose up -d

Docker 직접 μ‚¬μš©

# 이미지 λΉŒλ“œ
docker build -t hackathon-backend .

# μ»¨ν…Œμ΄λ„ˆ μ‹€ν–‰
docker run -d \
  -p 8082:8080 \
  --env-file .env \
  --name hackathon-backend \
  hackathon-backend

🚒 배포

GitHub Actions CI/CD

μžλ™ 배포 νŒŒμ΄ν”„λΌμΈμ΄ κ΅¬μ„±λ˜μ–΄ μžˆμŠ΅λ‹ˆλ‹€.

  1. main λΈŒλžœμΉ˜μ— Push β†’ μžλ™ 배포 μ‹œμž‘
  2. λΉŒλ“œ β†’ Docker 이미지 생성
  3. Push to ECR β†’ AWS ECR에 이미지 μ—…λ‘œλ“œ
  4. Deploy to EC2 β†’ SSH둜 EC2 μ ‘μ†ν•˜μ—¬ 배포

배포 ν™˜κ²½ λ³€μˆ˜ (GitHub Secrets)

GitHub Repository β†’ Settings β†’ Secrets and variables β†’ Actions에 등둝:

AWS_ACCOUNT_ID       # AWS 계정 ID
EC2_HOST             # EC2 μΈμŠ€ν„΄μŠ€ IP/도메인
EC2_USER             # SSH μ‚¬μš©μžλͺ… (ubuntu)
EC2_KEY              # SSH 프라이빗 ν‚€ (PEM 파일 λ‚΄μš©)

μˆ˜λ™ 배포

# 1. 이미지 λΉŒλ“œ
./gradlew clean build -x test
docker build -t hackathon-backend .

# 2. ECR에 Push
aws ecr get-login-password --region ap-northeast-2 | \
  docker login --username AWS --password-stdin ${ECR_REGISTRY}
docker tag hackathon-backend:latest ${ECR_REGISTRY}/hackathon-backend:latest
docker push ${ECR_REGISTRY}/hackathon-backend:latest

# 3. EC2μ—μ„œ Pull & μ‹€ν–‰
ssh ubuntu@your-ec2-host
docker pull ${ECR_REGISTRY}/hackathon-backend:latest
docker-compose up -d

μžμ„Έν•œ 배포 κ°€μ΄λ“œλŠ” DEPLOYMENT_NOTES.mdλ₯Ό μ°Έκ³ ν•˜μ„Έμš”.

πŸ“ ν”„λ‘œμ νŠΈ ꡬ쑰

hackathon-backend/
β”œβ”€β”€ src/
β”‚   β”œβ”€β”€ main/
β”‚   β”‚   β”œβ”€β”€ java/com/hackathon/backend/
β”‚   β”‚   β”‚   β”œβ”€β”€ api/                    # API Layer (Controller, DTO)
β”‚   β”‚   β”‚   β”‚   β”œβ”€β”€ auth/              # 인증 API
β”‚   β”‚   β”‚   β”‚   └── member/            # νšŒμ› API
β”‚   β”‚   β”‚   β”œβ”€β”€ domain/                # Domain Layer (Service, Entity, Repository)
β”‚   β”‚   β”‚   β”‚   β”œβ”€β”€ auth/              # 인증 도메인
β”‚   β”‚   β”‚   β”‚   └── member/            # νšŒμ› 도메인
β”‚   β”‚   β”‚   β”œβ”€β”€ global/                # Global μ„€μ • 및 μœ ν‹Έλ¦¬ν‹°
β”‚   β”‚   β”‚   β”‚   β”œβ”€β”€ aop/               # AOP (λ‘œκΉ… λ“±)
β”‚   β”‚   β”‚   β”‚   β”œβ”€β”€ config/            # μ„€μ • 클래슀
β”‚   β”‚   β”‚   β”‚   β”œβ”€β”€ entity/            # BaseEntity λ“±
β”‚   β”‚   β”‚   β”‚   β”œβ”€β”€ exception/         # μ˜ˆμ™Έ 처리
β”‚   β”‚   β”‚   β”‚   β”œβ”€β”€ jwt/               # JWT μœ ν‹Έλ¦¬ν‹°
β”‚   β”‚   β”‚   β”‚   β”œβ”€β”€ response/          # 곡톡 응닡 ν˜•μ‹
β”‚   β”‚   β”‚   β”‚   └── security/          # Spring Security μ„€μ •
β”‚   β”‚   β”‚   └── config/                # 메인 μ„€μ • 파일
β”‚   β”‚   β”‚       β”œβ”€β”€ JwtProperties.java
β”‚   β”‚   β”‚       β”œβ”€β”€ SecurityConfig.java
β”‚   β”‚   β”‚       β”œβ”€β”€ SwaggerConfig.java
β”‚   β”‚   β”‚       └── WebMvcConfig.java
β”‚   β”‚   └── resources/
β”‚   β”‚       β”œβ”€β”€ application.yml         # 곡톡 μ„€μ •
β”‚   β”‚       β”œβ”€β”€ application-dev.yml     # 개발 ν™˜κ²½
β”‚   β”‚       β”œβ”€β”€ application-prod.yml    # 운영 ν™˜κ²½
β”‚   β”‚       └── spy.properties          # P6Spy μ„€μ •
β”‚   └── test/                           # ν…ŒμŠ€νŠΈ μ½”λ“œ
β”œβ”€β”€ infra/                              # 인프라 μ„€μ •
β”‚   β”œβ”€β”€ nginx/                          # Nginx λ¦¬λ²„μŠ€ ν”„λ‘μ‹œ μ„€μ •
β”‚   β”‚   β”œβ”€β”€ hackathon-backend.conf     # Nginx μ„€μ • 파일
β”‚   β”‚   └── README.md                  # Nginx μ„€μ • κ°€μ΄λ“œ
β”‚   └── postgres/                       # PostgreSQL μ„€μ •
β”‚       └── docker-compose.yml
β”œβ”€β”€ .github/
β”‚   └── workflows/
β”‚       └── deploy.yml                  # CI/CD νŒŒμ΄ν”„λΌμΈ
β”œβ”€β”€ Dockerfile
β”œβ”€β”€ docker-compose.yml
└── README.md

πŸ— μ•„ν‚€ν…μ²˜

전체 μ‹œμŠ€ν…œ ꡬ쑰

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚                   ν΄λΌμ΄μ–ΈνŠΈ                          β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
                  β”‚ HTTP/HTTPS
                  ↓
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚         Nginx (λ¦¬λ²„μŠ€ ν”„λ‘μ‹œ & λ‘œλ“œλ°ΈλŸ°μ‹±)             β”‚
β”‚         - 포트: 80 (HTTP), 443 (HTTPS)               β”‚
β”‚         - λ‘œλ“œλ°ΈλŸ°μ‹± μ•Œκ³ λ¦¬μ¦˜: least_conn              β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
                  β”‚ 8082
                  ↓
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚         Docker Container (격리된 ν™˜κ²½)               β”‚
β”‚         - μ™ΈλΆ€: 8082 / λ‚΄λΆ€: 8080                    β”‚
β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”  β”‚
β”‚  β”‚         Spring Boot Application              β”‚  β”‚
β”‚  β”‚         - 포트: 8080                          β”‚  β”‚
β”‚  β”‚         - Spring Security + JWT              β”‚  β”‚
β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜  β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
                  β”‚
        β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
        ↓                   ↓
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚   PostgreSQL    β”‚  β”‚     Redis       β”‚
β”‚   (Database)    β”‚  β”‚   (Cache/Session)β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

λ ˆμ΄μ–΄ ꡬ쑰 (Layered Architecture)

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚     API Layer (Controller)      β”‚  ← HTTP μš”μ²­/응닡 처리
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚   Domain Layer (Service)        β”‚  ← λΉ„μ¦ˆλ‹ˆμŠ€ 둜직
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚ Infrastructure Layer (Repository)β”‚  ← 데이터 μ ‘κ·Ό
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

인증 흐름

Client β†’ Controller β†’ Security Filter β†’ JWT Validation 
  ↓                                           ↓
Response ← Service ← Repository ← Load User Data

🌐 Nginx λ¦¬λ²„μŠ€ ν”„λ‘μ‹œ μ„€μ •

μ„€μΉ˜ 및 μ„€μ •

μžμ„Έν•œ κ°€μ΄λ“œ: infra/nginx/README.md

# 1. Nginx μ„€μΉ˜
sudo apt install nginx -y

# 2. μ„€μ • 파일 볡사
sudo cp infra/nginx/hackathon-backend.conf /etc/nginx/sites-available/
sudo ln -s /etc/nginx/sites-available/hackathon-backend.conf /etc/nginx/sites-enabled/

# 3. μ„€μ • ν…ŒμŠ€νŠΈ
sudo nginx -t

# 4. Nginx μž¬μ‹œμž‘
sudo systemctl restart nginx

λ‘œλ“œλ°ΈλŸ°μ‹± (닀쀑 μ„œλ²„ 운영 μ‹œ)

단일 μ„œλ²„μ—μ„œ μ‹œμž‘ν•˜μ§€λ§Œ, νŠΈλž˜ν”½μ΄ μ¦κ°€ν•˜λ©΄ λ‹€μŒκ³Ό 같이 ν™•μž₯ κ°€λŠ₯:

upstream hackathon_backend {
    least_conn;  # μ—°κ²° μˆ˜κ°€ 적은 μ„œλ²„λ‘œ λΆ„μ‚°
    
    server localhost:8082 weight=1;
    server localhost:8083 weight=1;
    server localhost:8084 weight=1;
}

κΈ°λŠ₯

  • βœ… λ¦¬λ²„μŠ€ ν”„λ‘μ‹œ: μ™ΈλΆ€ μš”μ²­μ„ λ°±μ—”λ“œλ‘œ 전달
  • βœ… λ‘œλ“œλ°ΈλŸ°μ‹±: 닀쀑 μ„œλ²„ λΆ€ν•˜ λΆ„μ‚° (ν™•μž₯ μ‹œ)
  • βœ… SSL/TLS: HTTPS 지원 (Let's Encrypt)
  • βœ… Rate Limiting: DDoS λ°©μ–΄
  • βœ… 캐싱: API 응닡 캐싱 (선택적)
  • βœ… Gzip μ••μΆ•: 응닡 크기 μ΅œμ ν™”

πŸ”§ μ„€μ • 파일

application.yml

  • 곡톡 μ„€μ •: λͺ¨λ“  ν”„λ‘œνŒŒμΌμ— 적용
  • JWT μ„€μ •: 토큰 만료 μ‹œκ°„ λ“±
  • Logging μ„€μ •: 둜그 레벨

application-dev.yml

  • 개발 ν™˜κ²½ μ„€μ •
  • ddl-auto: update - μŠ€ν‚€λ§ˆ μžλ™ μ—…λ°μ΄νŠΈ
  • show-sql: true - SQL 쿼리 λ‘œκΉ…
  • Swagger UI ν™œμ„±ν™”

application-prod.yml

  • 운영 ν™˜κ²½ μ„€μ •
  • ddl-auto: validate - μŠ€ν‚€λ§ˆ κ²€μ¦λ§Œ μˆ˜ν–‰
  • show-sql: false - SQL 쿼리 λ‘œκΉ… λΉ„ν™œμ„±ν™”
  • Swagger UI λΉ„ν™œμ„±ν™”
  • Connection Pool μ΅œμ ν™”

πŸ§ͺ ν…ŒμŠ€νŠΈ

# 전체 ν…ŒμŠ€νŠΈ μ‹€ν–‰
./gradlew test

# νŠΉμ • ν…ŒμŠ€νŠΈ μ‹€ν–‰
./gradlew test --tests com.hackathon.backend.domain.auth.service.AuthServiceTest

# ν…ŒμŠ€νŠΈ 리포트 확인
open build/reports/tests/test/index.html

πŸ“ 개발 κ°€μ΄λ“œ

μ½”λ“œ μŠ€νƒ€μΌ

  • Lombok ν™œμš©μœΌλ‘œ λ³΄μΌλŸ¬ν”Œλ ˆμ΄νŠΈ μ½”λ“œ μ΅œμ†Œν™”
  • Builder νŒ¨ν„΄ μ‚¬μš© (Entity 생성)
  • LayeredArchitecture μ€€μˆ˜
  • RESTful API 섀계 원칙 μ€€μˆ˜

브랜치 μ „λž΅

  • main: 운영 ν™˜κ²½ (μžλ™ 배포)
  • develop: 개발 ν™˜κ²½
  • feature/*: κΈ°λŠ₯ 개발
  • hotfix/*: κΈ΄κΈ‰ μˆ˜μ •

컀밋 λ©”μ‹œμ§€ μ»¨λ²€μ…˜

feat: μƒˆλ‘œμš΄ κΈ°λŠ₯ μΆ”κ°€
fix: 버그 μˆ˜μ •
docs: λ¬Έμ„œ μˆ˜μ •
refactor: μ½”λ“œ λ¦¬νŒ©ν† λ§
test: ν…ŒμŠ€νŠΈ μ½”λ“œ μΆ”κ°€
chore: λΉŒλ“œ μ„€μ •, νŒ¨ν‚€μ§€ λ§€λ‹ˆμ € μˆ˜μ •

πŸ› νŠΈλŸ¬λΈ”μŠˆνŒ…

자주 λ°œμƒν•˜λŠ” 문제

  1. λ°μ΄ν„°λ² μ΄μŠ€ μ—°κ²° μ‹€νŒ¨

    • PostgreSQL이 μ‹€ν–‰ 쀑인지 확인
    • DATASOURCE_URL ν™˜κ²½ λ³€μˆ˜ 확인
  2. JWT 토큰 였λ₯˜

    • JWT_SECRET이 μ΅œμ†Œ 32자 이상인지 확인
    • 토큰 만료 μ‹œκ°„ 확인
  3. μ„Έμ’…λŒ€ 포털 둜그인 μ‹€νŒ¨

    • μ„Έμ’…λŒ€ 포털 μ„œλ²„ μƒνƒœ 확인
    • ν•™λ²ˆ/λΉ„λ°€λ²ˆν˜Έ μ •ν™•μ„± 확인

μžμ„Έν•œ 문제 해결은 DEPLOYMENT_NOTES.mdλ₯Ό μ°Έκ³ ν•˜μ„Έμš”.

πŸ‘₯ νŒ€

2025 μ„Έμ’…λŒ€ν•™κ΅ 해컀톀 λ°±μ—”λ“œ νŒ€

πŸ“„ λΌμ΄μ„ μŠ€

This project is licensed under the MIT License.

πŸ”— κ΄€λ ¨ 링크


Made with ❀️ by Sejong Hackathon Team

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors