| 목록 | 패키지명 |
|---|---|
| 환경변수 | @nestjs/config |
| 데이터베이스 | @nestjs/typeorm, typeorm, mysql2 |
| 값 검증 | class-transformer, class-validator, joi |
| 로그 기록 | nest-winston, winston |
| 인증 | @nestjs/jwt cookie-parser, @types/cookie-parser |
| 스케줄링 | @nestjs/schedule |
| 헬스 체크 | @nestjs/terminus, @nestjs/axios, axios |
| 메시지 전송 | nodemailer, @types/nodemailer |
| 파일 | @types/multer, multer, @aws-sdk/client-s3, multer-s3, @nestjs/serve-static |
| 문서화 | @nestjs/swagger |
| 보안 | express-basic-auth, helmet, @nestjs/throttler |
| 캐싱 | @nestjs/cache-manager, cache-manager |
- Testing
- Redis(Queues, Rate Limiting, Caching)
- WebSocket(ws/socket.io)
- CI/CD(GitHub Actions/Jenkins)
├── envs # 환경변수
├── logs # 로그기록
├── files # 리소스 파일 및 임시 업로드 경로
└── src
├── common
│ ├── auth # 인증, 권한, 보안, 예외 필터
│ ├── chat # 메일, MMS, 채팅, 슬랙
│ ├── cron # 스케줄, 큐, 헬스 체크
│ └── file # 파일 CRUD, 엑셀 CR
└── member # 멤버, 메뉴, 지점, 권한 CRUD
| 명령어 | 기능 |
|---|---|
| nest -h | 사용 가능한 CLI 명령어 (옵션 참조) |
| nest g res common/sample --no-spec | src/common/sample 폴더를 만들고, 테스트 파일 없이 CRUD 및 entities, dto 폴더 생성 |
| nest g f common/sample --no-spec | 기존에 있던 src/common/sample 폴더에 테스트 파일 없이 sample.filter.ts 파일 생성 |
| nest g f common/sample/test --no-spec --flat | 기존에 있던 src/common/sample 폴더에 테스트 파일 없이 test.filter.ts 파일 생성 |
| pm2 start ecosystem.config.js | pm2 시작 명령어 (옵션 참조) |
ROOT_DIRECTORY=sample-test
DB_HOST=localhost
DB_PORT=3306
DB_SCHEMA=api
DB_USERNAME=root
DB_PASSWORD=root
DB_ENTITIES=dist/**/*.entity.{js,ts}
DB_CHARSET=utf8mb4_unicode_ci
JWT_ACCESS_SECRET_KEY='sample-test-jwt-access'
JWT_ACCESS_EXPIRES_TIME=3h
JWT_REFRESH_SECRET_KEY='sample-test-jwt-refresh'
JWT_REFRESH_EXPIRES_TIME=9h
JWT_EMAIL_VALIDATION_SECRET_KEY='sample-test-jwt-email'
JWT_EMAIL_VALIDATION_EXPIRES_TIME=30m
SLACK_CHANNEL=
SLACK_TOKEN=
SLACK_WEBHOOK=
EMAIL_USERNAME=
EMAIL_PASSWORD=
UPLOAD_DISK_PATH=files
UPLOAD_S3_PATH=files
AWS_ACCESS_KEY=
AWS_SECRET_ACCESS_KEY=
AWS_S3_BUCKET=
AWS_S3_REGION=
SWAGGER_USERNAME=sample-test-swagger
SWAGGER_PASSWORD=sample-test-password
- 사용 버전:
nvm-0.39.7,nodejs-20.11.0,npm-10.2.4,nestjs-10.3.0,mysql-8.0.35,nginx-1.18.0,pm2-5.3.1 - 공식 문서에서 추천하는 패키지 사용
- @nestjs/terminus
- @nestjs/axios
- @nestjs/schedule node-cron
- @nestjs/typeorm decorator
- @nestjs/cache-manager
- class-validator
- winston
- helmet
- cors
- pm2
- nvm
- aws s3 sdk examples
- git commit convention
- homebrew 를 이용한 nvm 설치
- homebrew 를 이용한 mysql 설치
- 서버: AWS EC2 (Ubuntu 22.04.4 LTS)
- DB: AWS RDS (MySQL 8.0.35)
- 웹서버: nginx/1.18.0, pm2/5.3.1
- nginx 설정(https 설정은 AWS 로드밸런서에서 443 리스너 설정)
-
server { listen 80 default_server; listen [::]:80 default_server; location = /health-check { access_log off; return 200 'OK'; add_header Content-Type text/plain; } location ^~ / { return 444; } } server { listen 80; listen [::]:80; server_name SAMPLE_DOMAIN; location ~ /\. { return 444; } location / { if ($http_x_forwarded_proto = 'http') { return 301 https://$server_name$request_uri; } limit_except GET POST PUT PATCH DELETE { deny all; } proxy_pass http://127.0.0.1:3000; proxy_http_version 1.1; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection 'upgrade'; proxy_set_header Host $host; proxy_cache_bypass $http_upgrade; } }
-
- nginx 설정(https 설정은 AWS 로드밸런서에서 443 리스너 설정)