현대적인 클라우드 서비스 개발을 위한 Node.js 학습 프로젝트입니다. Express.js, MongoDB, JWT 인증, 파일 업로드 등 실무에서 자주 사용되는 기술들을 포함하고 있습니다.
- 사용자 인증: JWT 기반 회원가입/로그인 시스템
- RESTful API: 완전한 CRUD 작업을 지원하는 API
- 데이터베이스: MongoDB와 Mongoose ODM 사용
- 파일 업로드: 이미지 파일 업로드 및 관리
- 보안: Helmet, CORS, Rate Limiting 등 보안 기능
- 로깅: Winston을 사용한 구조화된 로깅
- 검증: Joi를 사용한 입력 데이터 검증
- 에러 처리: 중앙화된 에러 처리 시스템
POST /api/auth/register
Content-Type: application/json
{
"name": "홍길동",
"email": "[email protected]",
"password": "password123"
}POST /api/auth/login
Content-Type: application/json
{
"email": "[email protected]",
"password": "password123"
}GET /api/auth/me
Authorization: Bearer <JWT_TOKEN>GET /api/users
Authorization: Bearer <JWT_TOKEN>GET /api/users/:id
Authorization: Bearer <JWT_TOKEN>PUT /api/users/:id
Authorization: Bearer <JWT_TOKEN>
Content-Type: application/json
{
"name": "새로운 이름",
"avatar": "https://example.com/avatar.jpg"
}GET /api/posts?page=1&limit=10&search=검색어&tag=태그명GET /api/posts/:idPOST /api/posts
Authorization: Bearer <JWT_TOKEN>
Content-Type: application/json
{
"title": "게시글 제목",
"content": "게시글 내용",
"tags": ["태그1", "태그2"],
"isPublished": true
}PUT /api/posts/:id
Authorization: Bearer <JWT_TOKEN>
Content-Type: application/json
{
"title": "수정된 제목",
"content": "수정된 내용"
}DELETE /api/posts/:id
Authorization: Bearer <JWT_TOKEN>POST /api/posts/:id/like
Authorization: Bearer <JWT_TOKEN>POST /api/posts/:id/comments
Authorization: Bearer <JWT_TOKEN>
Content-Type: application/json
{
"content": "댓글 내용"
}POST /api/upload
Authorization: Bearer <JWT_TOKEN>
Content-Type: multipart/form-data
image: <파일>DELETE /api/upload/:filename
Authorization: Bearer <JWT_TOKEN>프로젝트 구조
src/
├── app.js # 메인 애플리케이션 파일
├── config/
│ └── database.js # 데이터베이스 연결 설정
├── controllers/ # 컨트롤러 (비즈니스 로직)
│ ├── authController.js
│ ├── userController.js
│ ├── postController.js
│ └── uploadController.js
├── middleware/ # 미들웨어
│ ├── auth.js # 인증 미들웨어
│ └── errorHandler.js # 에러 처리 미들웨어
├── models/ # 데이터베이스 모델
│ ├── User.js
│ └── Post.js
├── routes/ # 라우트 정의
│ ├── auth.js
│ ├── users.js
│ ├── posts.js
│ └── upload.js
└── utils/ # 유틸리티 함수
├── logger.js # 로깅 설정
├── upload.js # 파일 업로드 설정
└── validation.js # 데이터 검증
클라우드 배포
- Heroku CLI 설치
- Heroku 앱 생성
- 환경 변수 설정
- 배포
# Heroku CLI 설치 후
heroku create your-app-name
heroku config:set NODE_ENV=production
heroku config:set MONGODB_URI=your-mongodb-uri
heroku config:set JWT_SECRET=your-jwt-secret
git push heroku main- EC2 인스턴스 생성
- Node.js 및 MongoDB 설치
- PM2를 사용한 프로세스 관리
- Nginx를 사용한 리버스 프록시
FROM node:18-alpine
WORKDIR /app
COPY package*.json ./
RUN npm install
COPY . .
EXPOSE 3000
CMD ["npm", "start"]학습 포인트
- Node.js 기초: 비동기 프로그래밍, 이벤트 루프
- Express.js: 미들웨어, 라우팅, 에러 처리
- MongoDB: NoSQL 데이터베이스, Mongoose ODM
- 인증 시스템: JWT, 비밀번호 암호화
- API 설계: RESTful API 설계 원칙
- 보안: CORS, Rate Limiting, 입력 검증
- 파일 처리: 파일 업로드, 정적 파일 서빙
- 로깅: 구조화된 로깅 시스템
- 에러 처리: 중앙화된 에러 처리
- 클라우드 배포: Heroku, AWS, Docker