https://github.com/stepanowon/todosvc2
Simple RESTful service for todolist App using a mongodb, a JWT Authorization.
https://github.com/stepanowon/todosvc2
express jwt mongodb mongoose node rest-api todolist
Last synced: 3 months ago
JSON representation
Simple RESTful service for todolist App using a mongodb, a JWT Authorization.
- Host: GitHub
- URL: https://github.com/stepanowon/todosvc2
- Owner: stepanowon
- Created: 2020-01-03T16:44:20.000Z (over 6 years ago)
- Default Branch: main
- Last Pushed: 2025-08-24T01:52:12.000Z (10 months ago)
- Last Synced: 2025-08-24T07:06:11.805Z (10 months ago)
- Topics: express, jwt, mongodb, mongoose, node, rest-api, todolist
- Language: JavaScript
- Homepage:
- Size: 1.01 MB
- Stars: 0
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# Todo List RESTful API 서비스 (todosvc2)
이 프로젝트는 Node.js, Express, MongoDB, Mongoose, JWT(JSON Web Token) 인증을 사용하여 구현된 Todo List RESTful API 서비스입니다.
## 주요 기능
- 사용자 계정 생성 및 로그인 (JWT 토큰 기반 인증)
- 사용자별 Todo(할일) 목록 관리
- Todo 항목 생성, 조회, 수정, 삭제
- Todo 완료 상태 토글
- 입력 데이터 유효성 검사 및 보안 처리 (HMAC, Sanitization)
- API 요청 속도 제한 (Rate Limiting)
- MongoDB 데이터베이스 연동
## 기술 스택
- **런타임:** Node.js (버전 22 이상)
- **프레임워크:** Express.js
- **데이터베이스:** MongoDB (Mongoose ODM)
- **인증:** JWT (JSON Web Token)
- **개발 도구:** Babel (ES6+ 트랜스파일링), ESLint, Prettier, Nodemon
- **기타:** CORS, Morgan (로깅)
## API 엔드포인트
### 인증
- `POST /users/create`: 사용자 계정 생성
- `POST /login`: 로그인 및 JWT 토큰 발급
### Todo 관리
- `GET /todolist`: 사용자의 모든 Todo 목록 조회
- `GET /todolist/:id`: 특정 Todo 항목 조회
- `POST /todolist`: 새로운 Todo 항목 생성
- `PUT /todolist/:id`: 특정 Todo 항목 수정
- `DELETE /todolist/:id`: 특정 Todo 항목 삭제
- `PUT /todolist/:id/done`: 특정 Todo 항목의 완료 상태 토글
> `_long` 접미사가 붙은 엔드포인트들은 의도적으로 지연(1초)이 추가된 버전으로, 로딩 상태 등을 테스트하기 위해 사용됩니다. (예: `GET /todolist_long`)
### UI 페이지
- `GET /`: 서비스 소개 페이지
## 설치 및 실행 방법
1. **의존성 설치**
```bash
npm install
```
2. **개발 서버 실행**
```bash
npm run start:dev
```
- `nodemon`을 사용하여 코드 변경 시 자동으로 서버를 재시작합니다.
3. **배포용 빌드**
```bash
npm run build
```
- ES6+ 코드를 `dist` 디렉토리에 트랜스파일링합니다.
4. **배포 서버 실행**
```bash
npm start
```
- 빌드된 코드를 실행합니다.
## 환경 변수
서비스는 다음과 같은 환경 변수를 사용합니다. `.env` 파일을 생성하여 설정할 수 있습니다.
- `PORT`: 서버 포트 (기본값: 3000)
- `MONGODB_URI`: MongoDB 연결 URI (기본값: mongodb://localhost:27017/tododb)
- `JWT_SECRET_KEY`: JWT 토큰 서명에 사용되는 비밀 키 (생산 환경에서는 반드시 설정 필요)
- `PASSWORD_SALT`: 비밀번호 해싱에 사용되는 솔트 값
## 보안
- JWT 토큰을 사용한 API 인증
- HMAC을 사용한 비밀번호 해싱
- 입력 데이터 Sanitization (XSS 방지)
- API 요청 속도 제한
## 개발 스크립트
- `npm run lint`: ESLint를 사용하여 코드 문법 검사
- `npm run format`: Prettier를 사용하여 코드 포맷팅
## 라이선스
ISC