Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
21 commits
Select commit Hold shift + click to select a range
3eb8281
backup: Spring Boot ๊ธฐ์กด Java ์ฝ”๋“œ๋ฅผ ๋ฐฑ์—… ๋””๋ ‰ํ† ๋ฆฌ๋กœ ์ด๋™
kez-lab Aug 3, 2025
ea7ac44
docs: Ktor ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ ์ „๋žต ๋ฐ ๋กœ๋“œ๋งต ๋ฌธ์„œํ™”
kez-lab Aug 3, 2025
c26aa84
build: Kotlin + Ktor ํ”„๋กœ์ ํŠธ ๋นŒ๋“œ ์‹œ์Šคํ…œ ๊ตฌ์„ฑ
kez-lab Aug 3, 2025
743981c
feat: Ktor ๋ฉ”์ธ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์—”ํŠธ๋ฆฌ ํฌ์ธํŠธ ๊ตฌ์„ฑ
kez-lab Aug 3, 2025
325c6a2
feat: Ktor ํ”Œ๋Ÿฌ๊ทธ์ธ ์‹œ์Šคํ…œ ๊ตฌ์„ฑ - ๋ชจ๋“ˆํ™”๋œ ์„œ๋ฒ„ ์„ค์ •
kez-lab Aug 3, 2025
c7a8507
feat: ๊ธ€๋กœ๋ฒŒ ๊ณตํ†ต ์ธํ”„๋ผ - ์‘๋‹ต ์ฒ˜๋ฆฌ ๋ฐ ์˜ˆ์™ธ ์‹œ์Šคํ…œ
kez-lab Aug 3, 2025
a890d79
feat: User ๋„๋ฉ”์ธ ์™„์ „ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ - Spring Data JPA to Exposed ORM
kez-lab Aug 3, 2025
bbb5ea3
feat: Challenge ๋„๋ฉ”์ธ ์™„์ „ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ - Spring Data JPA to Exposed ORM
kez-lab Aug 3, 2025
1a9291c
config: ์„œ๋ฒ„ ์šด์˜์„ ์œ„ํ•œ ์„ค์ • ํŒŒ์ผ ๊ตฌ์„ฑ
kez-lab Aug 3, 2025
2bce0a6
cleanup: Spring Boot Java ํŒŒ์ผ ์ •๋ฆฌ ๋ฐ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ ์™„๋ฃŒ
kez-lab Aug 3, 2025
7139de2
feat: JWT ์ธ์ฆ ์‹œ์Šคํ…œ ๊ตฌํ˜„ - Spring Security to Ktor Authentication
kez-lab Aug 3, 2025
ba10ba1
feat: ์†Œ์…œ ๋กœ๊ทธ์ธ ์‹œ์Šคํ…œ ๋ฐ Auth API ๊ตฌํ˜„ ์™„๋ฃŒ
kez-lab Aug 3, 2025
a9ae1a2
feat: DailyChallenge ๋„๋ฉ”์ธ ์™„์ „ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜
kez-lab Aug 4, 2025
d7997d2
feat: App ๋„๋ฉ”์ธ ์™„์ „ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜
kez-lab Aug 4, 2025
2cf19e8
feat: Point ์‹œ์Šคํ…œ ์™„์ „ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜
kez-lab Aug 4, 2025
695ce05
config: ๋ผ์šฐํŒ… ์„ค์ • ์—…๋ฐ์ดํŠธ
kez-lab Aug 4, 2025
33b8cd6
deploy: ๋ฐฐํฌ ํ™˜๊ฒฝ ๊ตฌ์„ฑ ์™„๋ฃŒ
kez-lab Aug 4, 2025
076b637
config: ์˜์กด์„ฑ ์ฃผ์ž… ์„ค์ • ์—…๋ฐ์ดํŠธ
kez-lab Aug 4, 2025
aafe88f
fix: JWT ์ธ์ฆ ์‹œ์Šคํ…œ ์•ˆ์ •์„ฑ ๊ฐœ์„ 
kez-lab Aug 4, 2025
f9f937e
feat: JWT ์˜ˆ์™ธ ์‹œ์Šคํ…œ ์™„์ „ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜
kez-lab Aug 4, 2025
a306943
docs: Spring Boot to Ktor ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ ๊ฐ€์ด๋“œ ๋ฌธ์„œ ์ž‘์„ฑ
kez-lab Aug 4, 2025
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
30 changes: 30 additions & 0 deletions .env.example
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
# ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์„ค์ •
DB_HOST=localhost
DB_USER=hmh_user
DB_PASSWORD=your_db_password
DB_NAME=hmh

# JWT ์„ค์ •
JWT_SECRET=your-super-secret-jwt-key-change-this-in-production-minimum-32-characters
JWT_ISSUER=hmh-server
JWT_AUDIENCE=hmh-client

# ์นด์นด์˜ค OAuth
KAKAO_CLIENT_ID=your_kakao_client_id
KAKAO_CLIENT_SECRET=your_kakao_client_secret
KAKAO_REDIRECT_URI=http://your-domain.com/auth/kakao/callback

# ์• ํ”Œ OAuth
APPLE_TEAM_ID=your_apple_team_id
APPLE_KEY_ID=your_apple_key_id
APPLE_CLIENT_ID=your_apple_client_id

# Slack ์›นํ›… (์„ ํƒ์‚ฌํ•ญ)
SLACK_ERROR_WEBHOOK_URL=https://hooks.slack.com/services/your/slack/webhook
SLACK_NEW_USER_WEBHOOK_URL=https://hooks.slack.com/services/your/slack/webhook

# CORS ์„ค์ •
ALLOWED_HOSTS=localhost:3000,your-domain.com,your-app-name.herokuapp.com

# ๋ฐฐํฌ ํ™˜๊ฒฝ
DEPLOYMENT_GROUP_NAME=hmh-dev-deploy-group
99 changes: 99 additions & 0 deletions CLAUDE.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,99 @@
# HMH ํ”„๋กœ์ ํŠธ - Spring Boot to Ktor ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜

## ํ”„๋กœ์ ํŠธ ๊ฐœ์š”
- **ํ”„๋กœ์ ํŠธ๋ช…**: HMH (Habit Making Helper)
- **ํ˜„์žฌ ์ƒํƒœ**: Spring Boot 3.2.1 + Java 17 ๊ธฐ๋ฐ˜
- **๋ชฉํ‘œ**: Ktor + Kotlin์œผ๋กœ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜
- **๊ทธ๋ฃนID**: sopt.org
- **๋ฒ„์ „**: 0.0.1-SNAPSHOT

## ํ˜„์žฌ ๊ธฐ์ˆ  ์Šคํƒ (Spring Boot)
- **์–ธ์–ด**: Java 17
- **ํ”„๋ ˆ์ž„์›Œํฌ**: Spring Boot 3.2.1
- **๋นŒ๋“œ ๋„๊ตฌ**: Gradle
- **๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค**: MySQL
- **ORM**: Spring Data JPA + QueryDSL
- **๋ณด์•ˆ**: Spring Security + JWT
- **API ๋ฌธ์„œ**: SpringDoc OpenAPI (Swagger)
- **์™ธ๋ถ€ ์—ฐ๋™**: OpenFeign (์นด์นด์˜ค, ์• ํ”Œ ๋กœ๊ทธ์ธ)
- **๋ชจ๋‹ˆํ„ฐ๋ง**: Slack API

## ๋„๋ฉ”์ธ ๊ตฌ์กฐ
ํ”„๋กœ์ ํŠธ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋„๋ฉ”์ธ์œผ๋กœ ๊ตฌ์„ฑ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค:

### ํ•ต์‹ฌ ๋„๋ฉ”์ธ
- **auth**: ์ธ์ฆ/์ธ๊ฐ€ (์†Œ์…œ ๋กœ๊ทธ์ธ, JWT)
- **user**: ์‚ฌ์šฉ์ž ๊ด€๋ฆฌ
- **challenge**: ์ฑŒ๋ฆฐ์ง€ ๊ด€๋ฆฌ
- **dailychallenge**: ์ผ์ผ ์ฑŒ๋ฆฐ์ง€
- **app**: ์•ฑ ๊ด€๋ฆฌ ๋ฐ ํžˆ์Šคํ† ๋ฆฌ
- **point**: ํฌ์ธํŠธ ์‹œ์Šคํ…œ
- **admin**: ๊ด€๋ฆฌ์ž ๊ธฐ๋Šฅ
- **banner**: ๋ฐฐ๋„ˆ ๊ด€๋ฆฌ

### ์ธํ”„๋ผ/๊ณตํ†ต
- **global/auth**: JWT, ์†Œ์…œ ๋กœ๊ทธ์ธ (์นด์นด์˜ค, ์• ํ”Œ)
- **global/common**: ๊ณตํ†ต ์˜ˆ์™ธ, ์‘๋‹ต ํฌ๋งท
- **global/config**: ์„ค์ • ํด๋ž˜์Šค๋“ค
- **slack**: ์Šฌ๋ž™ ์•Œ๋ฆผ

## ์ฃผ์š” ๊ธฐ๋Šฅ
1. **์†Œ์…œ ๋กœ๊ทธ์ธ**: ์นด์นด์˜ค, ์• ํ”Œ OAuth ์—ฐ๋™
2. **JWT ๊ธฐ๋ฐ˜ ์ธ์ฆ**: ํ† ํฐ ๋ฐœ๊ธ‰/์žฌ๋ฐœ๊ธ‰
3. **์ฑŒ๋ฆฐ์ง€ ์‹œ์Šคํ…œ**: ์‚ฌ์šฉ์ž ์Šต๊ด€ ๊ด€๋ฆฌ
4. **ํฌ์ธํŠธ ์‹œ์Šคํ…œ**: ์ฑŒ๋ฆฐ์ง€ ์™„๋ฃŒ ์‹œ ํฌ์ธํŠธ ์ ๋ฆฝ
5. **๊ด€๋ฆฌ์ž ๊ธฐ๋Šฅ**: ์‚ฌ์šฉ์ž ๋ฐ ์ฑŒ๋ฆฐ์ง€ ๊ด€๋ฆฌ
6. **์Šฌ๋ž™ ๋ชจ๋‹ˆํ„ฐ๋ง**: ์—๋Ÿฌ ๋ฐ ์‹ ๊ทœ ์œ ์ € ์•Œ๋ฆผ

## ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ ๊ณ ๋ ค์‚ฌํ•ญ

### ์˜์กด์„ฑ ๋งคํ•‘
- Spring Boot Web โ†’ Ktor Server
- Spring Data JPA โ†’ Exposed ORM ๋˜๋Š” Ktorm
- Spring Security โ†’ Ktor Authentication
- QueryDSL โ†’ Kotlin SQL DSL
- OpenFeign โ†’ Ktor Client
- SpringDoc โ†’ Ktor OpenAPI Plugin

### ์•„ํ‚คํ…์ฒ˜ ํŒจํ„ด
ํ˜„์žฌ ๊ณ„์ธตํ˜• ์•„ํ‚คํ…์ฒ˜ (Controller-Service-Repository)๋ฅผ ์œ ์ง€ํ•˜๋˜, Kotlin ๊ด€๋ก€์— ๋งž๊ฒŒ ์กฐ์ •

### ๋ณด์•ˆ ๊ณ ๋ ค์‚ฌํ•ญ
- JWT ์ฒ˜๋ฆฌ ๋ฐฉ์‹
- ์†Œ์…œ ๋กœ๊ทธ์ธ ์—ฐ๋™ ๋ฐฉ์‹
- CORS ์„ค์ •
- ์ธ์ฆ/์ธ๊ฐ€ ๋ฏธ๋“ค์›จ์–ด

## ๋นŒ๋“œ ๋ฐ ์‹คํ–‰

### ํ˜„์žฌ (Gradle)
```bash
./gradlew build
./gradlew test
./gradlew bootRun
```

### ๋ฐฐํฌ ์Šคํฌ๋ฆฝํŠธ
- `script/start.sh`: ์„œ๋ฒ„ ์‹œ์ž‘
- `script/stop.sh`: ์„œ๋ฒ„ ์ข…๋ฃŒ
- `appspec.yml`: AWS CodeDeploy ์„ค์ •

## ํ™˜๊ฒฝ ์„ค์ •
- `local.properties`: ๋กœ์ปฌ ํ™˜๊ฒฝ ๋ณ€์ˆ˜
- MySQL ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์—ฐ๊ฒฐ ํ•„์š”
- JWT ์‹œํฌ๋ฆฟ ํ‚ค ์„ค์ • ํ•„์š”
- ์นด์นด์˜ค/์• ํ”Œ OAuth ํด๋ผ์ด์–ธํŠธ ์ •๋ณด ํ•„์š”
- ์Šฌ๋ž™ ์›นํ›… URL ์„ค์ • ํ•„์š”

## ์ค‘์š” ๋…ธํŠธ
- ํ˜„์žฌ ํ”„๋กœ์ ํŠธ๋Š” ์‚ญ์ œ๋œ README.md๊ฐ€ ์žˆ์Œ (git status ํ™•์ธ)
- ํ…Œ์ŠคํŠธ ์ปค๋ฒ„๋ฆฌ์ง€ ํ™•์ธ ํ•„์š”
- API ๋ฌธ์„œ ํ˜ธํ™˜์„ฑ ํ™•์ธ ํ•„์š”
- ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ ์Šคํฌ๋ฆฝํŠธ ์ž‘์„ฑ ํ•„์š”

## ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ ์šฐ์„ ์ˆœ์œ„
1. ํ•ต์‹ฌ ์ธํ”„๋ผ (์„œ๋ฒ„, ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์—ฐ๊ฒฐ)
2. ์ธ์ฆ/์ธ๊ฐ€ ์‹œ์Šคํ…œ
3. ํ•ต์‹ฌ ๋„๋ฉ”์ธ (user, challenge)
4. ์™ธ๋ถ€ ์—ฐ๋™ (์†Œ์…œ ๋กœ๊ทธ์ธ)
5. ๋ถ€๊ฐ€ ๊ธฐ๋Šฅ (ํฌ์ธํŠธ, ๊ด€๋ฆฌ์ž, ๋ฐฐ๋„ˆ)
180 changes: 180 additions & 0 deletions DEPLOYMENT.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,180 @@
# HMH Ktor Server ๋ฐฐํฌ ๊ฐ€์ด๋“œ

## ๐Ÿš€ ๋ฐฐํฌ ๋ฐฉ๋ฒ• ์„ ํƒ

### ๋ฐฉ๋ฒ• 1: Docker๋ฅผ ์‚ฌ์šฉํ•œ ๋ฐฐํฌ (์ถ”์ฒœ)

#### 1.1 ์‚ฌ์ „ ์ค€๋น„
```bash
# Docker ๋ฐ Docker Compose ์„ค์น˜ ํ™•์ธ
docker --version
docker-compose --version
```

#### 1.2 ํ™˜๊ฒฝ ๋ณ€์ˆ˜ ์„ค์ •
```bash
# ํ™˜๊ฒฝ ๋ณ€์ˆ˜ ํŒŒ์ผ ๋ณต์‚ฌ ๋ฐ ์ˆ˜์ •
cp .env.example .env
vi .env # ์‹ค์ œ ๊ฐ’์œผ๋กœ ์ˆ˜์ •
```

#### 1.3 Docker๋กœ ์‹คํ–‰
```bash
# ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋นŒ๋“œ ๋ฐ ์‹คํ–‰
docker-compose up -d

# ๋กœ๊ทธ ํ™•์ธ
docker-compose logs -f hmh-server

# ์ƒํƒœ ํ™•์ธ
docker-compose ps
```

#### 1.4 ์ ‘์† ํ™•์ธ
```bash
# ํ—ฌ์Šค์ฒดํฌ
curl http://localhost:8080/health

# API ํ…Œ์ŠคํŠธ
curl http://localhost:8080/api/v1/point/earn
```

### ๋ฐฉ๋ฒ• 2: AWS EC2 ์ธ์Šคํ„ด์Šค ๋ฐฐํฌ

#### 2.1 EC2 ์ธ์Šคํ„ด์Šค ์ค€๋น„
```bash
# Ubuntu 20.04 LTS ์ถ”์ฒœ
# ์ธ์Šคํ„ด์Šค ํƒ€์ž…: t3.micro ์ด์ƒ
# ๋ณด์•ˆ ๊ทธ๋ฃน: 8080 ํฌํŠธ ๊ฐœ๋ฐฉ
```

#### 2.2 ์„œ๋ฒ„ ํ™˜๊ฒฝ ์„ค์ •
```bash
# Java 17 ์„ค์น˜
sudo apt update
sudo apt install openjdk-17-jdk -y

# MySQL ์„ค์น˜ (๋˜๋Š” RDS ์‚ฌ์šฉ)
sudo apt install mysql-server -y

# Git ์„ค์น˜
sudo apt install git -y
```

#### 2.3 ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋ฐฐํฌ
```bash
# ํ”„๋กœ์ ํŠธ ํด๋ก 
git clone <your-repository-url> /home/ubuntu/app
cd /home/ubuntu/app

# ํ™˜๊ฒฝ ๋ณ€์ˆ˜ ์„ค์ •
cp .env.example .env
sudo vi .env # ์‹ค์ œ ๊ฐ’์œผ๋กœ ์ˆ˜์ •

# ๋ฐฐํฌ ์Šคํฌ๋ฆฝํŠธ ์‹คํ–‰
./script/ktor-start.sh
```

### ๋ฐฉ๋ฒ• 3: Heroku ๋ฐฐํฌ (๊ฐ„๋‹จํ•œ ํ…Œ์ŠคํŠธ์šฉ)

#### 3.1 Heroku CLI ์„ค์น˜ ๋ฐ ๋กœ๊ทธ์ธ
```bash
# Heroku CLI ์„ค์น˜
# https://devcenter.heroku.com/articles/heroku-cli

heroku login
```

#### 3.2 Heroku ์•ฑ ์ƒ์„ฑ
```bash
heroku create your-app-name
```

#### 3.3 ํ™˜๊ฒฝ ๋ณ€์ˆ˜ ์„ค์ •
```bash
heroku config:set JWT_SECRET=your-secret-key
heroku config:set DB_HOST=your-db-host
heroku config:set DB_USER=your-db-user
heroku config:set DB_PASSWORD=your-db-password
# ... ๊ธฐํƒ€ ํ™˜๊ฒฝ ๋ณ€์ˆ˜๋“ค
```

#### 3.4 ๋ฐฐํฌ
```bash
git add .
git commit -m "Deploy to Heroku"
git push heroku main
```

## ๐Ÿ”ง ์šด์˜ ํ™˜๊ฒฝ ์„ค์ •

### ํ™˜๊ฒฝ ๋ณ€์ˆ˜ ํ•„์ˆ˜ ์„ค์ •

1. **๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์„ค์ •**
- `DB_HOST`: ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ํ˜ธ์ŠคํŠธ
- `DB_USER`: ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์‚ฌ์šฉ์ž
- `DB_PASSWORD`: ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๋น„๋ฐ€๋ฒˆํ˜ธ

2. **๋ณด์•ˆ ์„ค์ •**
- `JWT_SECRET`: 32์ž ์ด์ƒ์˜ ์•ˆ์ „ํ•œ ๋น„๋ฐ€ํ‚ค
- `ALLOWED_HOSTS`: ํ—ˆ์šฉํ•  ๋„๋ฉ”์ธ ๋ชฉ๋ก

3. **OAuth ์„ค์ • (์„ ํƒ์‚ฌํ•ญ)**
- `KAKAO_CLIENT_ID`, `KAKAO_CLIENT_SECRET`
- `APPLE_TEAM_ID`, `APPLE_KEY_ID`, `APPLE_CLIENT_ID`

### ๋กœ๊ทธ ๋ชจ๋‹ˆํ„ฐ๋ง

```bash
# Docker ํ™˜๊ฒฝ
docker-compose logs -f hmh-server

# ์ผ๋ฐ˜ ํ™˜๊ฒฝ
tail -f logs/application.log
```

### ํ—ฌ์Šค์ฒดํฌ ์—”๋“œํฌ์ธํŠธ

- `GET /health` - ๊ธฐ๋ณธ ์ƒํƒœ ํ™•์ธ
- `GET /health/ready` - ์ค€๋น„ ์ƒํƒœ ํ™•์ธ
- `GET /health/live` - ์ƒ์กด ์ƒํƒœ ํ™•์ธ

## ๐Ÿ› ํŠธ๋Ÿฌ๋ธ”์ŠˆํŒ…

### ์ผ๋ฐ˜์ ์ธ ๋ฌธ์ œ๋“ค

1. **ํฌํŠธ ์ถฉ๋Œ**
```bash
# 8080 ํฌํŠธ ์‚ฌ์šฉ ์ค‘์ธ ํ”„๋กœ์„ธ์Šค ํ™•์ธ
lsof -i :8080

# ํ”„๋กœ์„ธ์Šค ์ข…๋ฃŒ
sudo kill -9 <PID>
```

2. **๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์—ฐ๊ฒฐ ์‹คํŒจ**
- DB ํ˜ธ์ŠคํŠธ, ํฌํŠธ, ์‚ฌ์šฉ์ž ์ •๋ณด ํ™•์ธ
- ๋ฐฉํ™”๋ฒฝ ์„ค์ • ํ™•์ธ
- MySQL ์„œ๋น„์Šค ์ƒํƒœ ํ™•์ธ

3. **JWT ์˜ค๋ฅ˜**
- JWT_SECRET ํ™˜๊ฒฝ ๋ณ€์ˆ˜ ์„ค์ • ํ™•์ธ
- 32์ž ์ด์ƒ์˜ ์•ˆ์ „ํ•œ ํ‚ค ์‚ฌ์šฉ

4. **๋ฉ”๋ชจ๋ฆฌ ๋ถ€์กฑ**
```bash
# Java ํž™ ๋ฉ”๋ชจ๋ฆฌ ์ œํ•œ ์„ค์ •
export JAVA_OPTS="-Xmx512m -Xms256m"
```

## ๐Ÿ“Š ๋ชจ๋‹ˆํ„ฐ๋ง

### ๊ถŒ์žฅ ๋ชจ๋‹ˆํ„ฐ๋ง ๋„๊ตฌ
- **๋กœ๊ทธ**: ELK Stack ๋˜๋Š” CloudWatch
- **๋ฉ”ํŠธ๋ฆญ**: Prometheus + Grafana
- **์•Œ๋ฆผ**: Slack ์›นํ›… ํ™œ์šฉ

### ์„ฑ๋Šฅ ์ตœ์ ํ™”
- DB ์ปค๋„ฅ์…˜ ํ’€ ํฌ๊ธฐ ์กฐ์ •
- JVM ํž™ ๋ฉ”๋ชจ๋ฆฌ ํŠœ๋‹
- Nginx ๋ฆฌ๋ฒ„์Šค ํ”„๋ก์‹œ ์‚ฌ์šฉ
38 changes: 38 additions & 0 deletions Dockerfile
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
# HMH Ktor Server Dockerfile
FROM openjdk:17-jdk-slim

# ์ž‘์—… ๋””๋ ‰ํ† ๋ฆฌ ์„ค์ •
WORKDIR /app

# ์‹œ์Šคํ…œ ํŒจํ‚ค์ง€ ์—…๋ฐ์ดํŠธ ๋ฐ ํ•„์š”ํ•œ ๋„๊ตฌ ์„ค์น˜
RUN apt-get update && apt-get install -y \
curl \
&& rm -rf /var/lib/apt/lists/*

# Gradle Wrapper์™€ ์†Œ์Šค ์ฝ”๋“œ ๋ณต์‚ฌ
COPY gradlew .
COPY gradle gradle
COPY build.gradle.kts .
COPY settings.gradle .
COPY gradle.properties .
COPY src src

# ๋นŒ๋“œ ๊ถŒํ•œ ์„ค์ •
RUN chmod +x ./gradlew

# ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋นŒ๋“œ
RUN ./gradlew build -x test

# ํฌํŠธ ๋…ธ์ถœ
EXPOSE 8080

# ํ™˜๊ฒฝ ๋ณ€์ˆ˜ ์„ค์ •
ENV KTOR_ENV=prod
ENV KTOR_PORT=8080

# ํ—ฌ์Šค์ฒดํฌ ์„ค์ •
HEALTHCHECK --interval=30s --timeout=3s --start-period=30s --retries=3 \
CMD curl -f http://localhost:8080/health || exit 1

# ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์‹คํ–‰
CMD ["./gradlew", "run"]
Loading