Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
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
23 changes: 23 additions & 0 deletions .dockerignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
node_modules
npm-debug.log
.git
.gitignore
.env
.env.*
!.env.example
coverage
.nyc_output
*.log
build
dist
.vscode
.idea
*.swp
*.swo
*~
.DS_Store
README.md
docker-compose.yml
Dockerfile
.dockerignore

8 changes: 8 additions & 0 deletions .env.example
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
# 서버 설정
PORT=3000

# 데이터베이스
DATABASE_URL=mysql://user:password@localhost:5432/mydb

# JWT 보안
JWT_SECRET=your_jwt_secret_key_here_please_match_with_team
37 changes: 37 additions & 0 deletions .github/ISSUE_TEMPLATE/기능-요청.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
---
name: 기능 요청
about: 새로운 기능을 추가하거나 기존 기능(성능 포함)을 개선할 때 사용해주세요.
title: "[FEATURE] "
labels: feat
assignees: ''

---

## #️⃣ 요청 유형

> 해당되는 항목을 선택해주세요.
- [ ] 새로운 기능 추가
- [ ] 기존 기능 개선
- [ ] 성능 개선

## #️⃣ 어떤 기능인가요?

> 추가하려는 기능 또는 개선하려는 부분에 대해 간결하게 설명해주세요.

## #️⃣ 이 기능이 필요한 이유는 무엇인가요?

> 이 기능이 왜 필요한지, 또는 개선/성능 향상이 필요한 이유에 대해 설명해주세요.

## 구현 방안 (선택)

> 이 기능을 어떻게 구현할 수 있을지에 대한 아이디어를 간단히 설명해주세요.

## #️⃣ 작업 상세 내용

- [ ] TODO
- [ ] TODO
- [ ] TODO

## 📎 참고할만한 자료 (선택)

> 관련 문서, 스크린샷, 또는 예시 등이 있다면 여기에 첨부해주세요.
28 changes: 28 additions & 0 deletions .github/ISSUE_TEMPLATE/버그-리포트.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
---
name: 버그 리포트
about: 버그 발생 시 이 템플릿을 사용해 주세요
title: "[BUG] "
labels: bug
assignees: ''

---

## #️⃣ 어떤 버그인가요?

> #어떤 버그인지 간결하게 설명해주세요.

## #️⃣ 어떤 상황에서 발생한 버그인가요?

> (가능하면) Given-When-Then 형식으로 서술해주세요.

## #️⃣ 예상 결과

> 예상했던 정상적인 결과가 어떤 것이었는지 설명해주세요.

## #️⃣ 실제 결과

> 실제로 어떤 결과가 발생했는지 설명해주세요.

## 📎 참고할만한 자료(선택)

> 관련 문서, 스크린샷, 또는 예시 등이 있다면 여기에 첨부해주세요
26 changes: 26 additions & 0 deletions .github/ISSUE_TEMPLATE/유지-보수-이슈.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
---
name: 유지 보수 이슈
about: 코드 리팩토링, 스타일 수정, 문서 작업 등 기능/성능 개선을 목적으로 하지 않는 유지 보수 작업에 사용해주세요.
title: "[MAINTENANCE] "
labels: ''
assignees: ''

---

## #️⃣ 작업 내용

> 수행해야 할 작업 내용을 간략하게 설명해주세요.

## #️⃣ 작업이 필요한 이유

> 왜 이 작업이 필요한지 설명해주세요. 유지 보수 작업의 목적과 기대 효과를 기술해주세요.

## #️⃣ 작업 상세 내용

- [ ] TODO
- [ ] TODO
- [ ] TODO

## 📎 참고 자료 (선택)

> 관련 문서, 스크린샷, 또는 예시 등이 있다면 여기에 첨부해주세요
45 changes: 45 additions & 0 deletions .github/PULL_REQUEST_TEMPLATE.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
---
name: PR 템플릿
about: PR 생성 시 이 템플릿을 사용해 주세요.
title: "[PR] "
---

## #️⃣ PR 제목
> [Type] 작업 요약 (예: [Feat] 카카오 로그인 기능 구현)

## #️⃣ 연관된 이슈

> 관련된 이슈 번호를 적어주세요. 예: #이슈번호

## #️⃣ 작업 내용

> 이번 PR에서 작업한 내용을 간략히 설명해주세요. (이미지 첨부 가능)

## #️⃣ 테스트 결과

> 코드 변경에 대해 테스트를 수행한 결과를 요약해주세요.

### 통과한 테스트 케이스
- 전화번호 중복 검증
- 8자 미만의 비밀번호 입력
- 이메일 형식 검증

## #️⃣ 변경 사항 체크리스트

- [ ] 코드에 영향이 있는 모든 부분에 대한 테스트를 작성하고 실행했나요?
- [ ] 문서를 작성하거나 수정했나요? (필요한 경우)
- [ ] 코드 컨벤션에 따라 코드를 작성했나요?
- [ ] 본 PR에서 발생할 수 있는 모든 의존성 문제가 해결되었나요?

## #️⃣ 스크린샷

> 관련된 스크린샷이 있다면 여기에 첨부해주세요. (예 : 성공 응답 - 스웨거, 포스트맨 등)

## #️⃣ 리뷰 요구사항 (선택)

> 리뷰어가 특별히 봐주었으면 하는 부분이 있다면 작성해주세요.
> 예시: 이 부분의 코드가 잘 작동하는지 테스트해 주실 수 있나요?

## 📎 참고 자료 (선택)

> 관련 문서, 스크린샷, 또는 예시 등이 있다면 여기에 첨부해주세요
3 changes: 3 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -139,3 +139,6 @@ vite.config.js.timestamp-*
vite.config.ts.timestamp-*

/generated/prisma

# macOS system files
.DS_Store
27 changes: 27 additions & 0 deletions Dockerfile
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
FROM node:20-alpine

WORKDIR /app

# Copy package files
COPY package*.json ./
COPY prisma ./prisma/

# Install dependencies
RUN npm ci

# Copy source code
COPY . .

# Generate Prisma Client and build
RUN npx prisma generate && npm run build

# Expose port
EXPOSE 3000

# Health check
HEALTHCHECK --interval=30s --timeout=3s --start-period=40s --retries=3 \
CMD node -e "require('http').get('http://localhost:3000/health', (r) => {process.exit(r.statusCode === 200 ? 0 : 1)})" || exit 1

# Start the application
CMD ["npm", "start"]

26 changes: 26 additions & 0 deletions Dockerfile.dev
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
# Development Dockerfile
FROM node:20-alpine

WORKDIR /app

# Copy package files
COPY package*.json ./

# Install all dependencies (including dev dependencies)
RUN npm ci

# Copy Prisma schema
COPY prisma ./prisma/

# Generate Prisma Client
RUN npx prisma generate

# Install nodemon globally for hot reload
RUN npm install -g nodemon

# Expose port
EXPOSE 3000

# Default command (will be overridden by docker-compose)
CMD ["npm", "run", "dev"]

93 changes: 92 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
@@ -1 +1,92 @@
# Playproof-Backend
# Playproof-Backend
Playproof 백엔드 레포지토리입니다.
본 문서는 프로젝트 협업 가이드라인과 컨벤션 등을 포함합니다.

👉 깃 협업 가이드라인 상세 [확인하기](https://www.notion.so/Git-2d6ddc51f5c680e39e1df9094fef07ae?source=copy_link)<br/>
👉 코드 컨벤션 상세 [확인하기](https://www.notion.so/2d6ddc51f5c68096800ce2e4207911f9?source=copy_link)

## 기술 스택
- Node.js Runtime (v22 LTS 이상)
- Typescript
- Prisma
- Mysql

## 실행 방법
### 1. 클론
```bash
git clone https://github.com/Playproof-Umc/Playproof-Backend.git
```
### 2. 패키지 설치
```bash
npm install
```
### 3. 환경변수 설정 (.env)
루트 디렉토리에 .env 파일을 생성
```env
DATABASE_URL="mysql://root:비밀번호@localhost:3306/playproof"
```
### 4. 서버 실행
```bash
npm run dev
```
실행 후 http://localhost:3000 접속

## 브랜치 전략: main / dev / feature
1. 이슈 생성
2. dev 브랜치에서 최신 코드를 pull 받기
3. 새로운 feature 브랜치를 생성
4. 작업 후 commit & push
5. Pull Request로 코드 리뷰 및 승인
6. dev에 머지
7. 기능 개발 완료 후 main에 머지

- **main 브랜치**
- 실제 제품이 배포되는 기준 브랜치입니다.
- 항상 **배포 가능한 안정 상태**를 유지해야 합니다.
- `dev` 브랜치에서 충분히 검증된 코드만 병합됩니다.
- **dev 브랜치**
- 기능 개발이 완료된 브랜치들이 **통합되는 개발 브랜치**입니다.
- 여러 feature 브랜치를 병합하여 테스트 및 검증을 진행합니다.
- 배포 준비가 완료되면 `main` 브랜치로 병합됩니다.
- **feature 브랜치**
- 새로운 기능 개발, 버그 수정 등 **개별 작업 단위 브랜치**입니다.
- `dev` 브랜치에서 분기하여 작업합니다.
- 작업 완료 후 PR을 통해 `dev` 브랜치로 병합합니다.
- **명명 규칙**: `type/#number`
- *예시: `feat/#1`, `fix/#22`*

### 1. 커밋 메시지 컨벤션
| Tag Name | Description |
|----------------|------------------------------------------------|
| feat | 새로운 기능 추가 |
| fix | 버그 수정 |
| docs | 문서 수정 (README, 위키 등) |
| style | 코드 의미에 영향을 주지 않는 변경 (세미콜론, 포맷팅 등) |
| refactor | 코드 리팩토링 |
| test | 테스트 코드 추가 및 수정 |
| chore | 빌드 업무, 패키지 매니저 설정 등 기타 작업 |

### 2. Pull Request (PR) 규칙
- **제목**: `[Type] 작업 요약` (예: `[Feat] 카카오 로그인 기능 구현`)
- **내용 필수 포함 항목**:
- 변경 사항에 대한 간략한 설명
- 관련 Issue 번호 (`#이슈번호`)
- 테스트 통과 여부 및 스크린샷 (UI 변경 시)

## 네이밍 컨벤션
|항목 |규칙| 예시|
|-------|----------------|----------|
|폴더명 |camelCase (단수형)| user, auth, global|
|파일명| kebab-case.ts| user.controller.ts, app.ts|
|변수명 |camelCase |userName, isActive, userList|
|함수명| camelCase (동사 시작)| getUserById(), validateEmail()|
|클래스명| PascalCase |UserService, UserController|
|인터페이스/타입| PascalCase (I 접두사 X)| User, CreateUserDto|
|상수/환경변수| UPPER_SNAKE_CASE| MAX_COUNT, DATABASE_URL|
|Enum| PascalCase | UserStatus.ACTIVE|

### 코드 스타일 (Code Style)
- 들여쓰기: 2칸 스페이스
- 따옴표: 작은따옴표 (') 사용
- 세미콜론: 모든 문장 끝에 사용 (Always)
- 후행 쉼표: 리스트/객체 마지막 요소 뒤 추가 (Trailing Comma)
61 changes: 61 additions & 0 deletions docker-compose.dev.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,61 @@
services:
# MySQL Database for Development
mysql:
image: mysql:8.0
container_name: playproof-mysql-dev
restart: unless-stopped
environment:
MYSQL_ROOT_PASSWORD: rootpassword
MYSQL_DATABASE: playproof
MYSQL_USER: playproof_user
MYSQL_PASSWORD: playproof_password
ports:
- "3306:3306"
volumes:
- mysql_dev_data:/var/lib/mysql
healthcheck:
test: ["CMD", "mysqladmin", "ping", "-h", "localhost", "-u", "root", "-prootpassword"]
interval: 10s
timeout: 5s
retries: 5
networks:
- playproof-dev-network

# Application for Development (with hot reload)
app:
build:
context: .
dockerfile: Dockerfile.dev
container_name: playproof-app-dev
restart: unless-stopped
ports:
- "3000:3000"
environment:
NODE_ENV: development
PORT: 3000
DATABASE_URL: mysql://playproof_user:playproof_password@mysql:3306/playproof
volumes:
# 소스 코드 실시간 반영
- ./src:/app/src
- ./prisma:/app/prisma
- ./package.json:/app/package.json
- ./tsconfig.json:/app/tsconfig.json
- ./tsoa.json:/app/tsoa.json
- ./nodemon.json:/app/nodemon.json
# node_modules는 제외 (컨테이너 내부 것 사용)
- /app/node_modules
- /app/build
depends_on:
mysql:
condition: service_healthy
command: sh -c "npx prisma generate && npx prisma db push && npm run dev"
networks:
- playproof-dev-network

volumes:
mysql_dev_data:

networks:
playproof-dev-network:
driver: bridge

Loading