NestJS 기반 plzdrawing 백엔드입니다.
현재 저장소에는 아래 기능이 포함되어 있습니다.
- 회원/프로필 수정 및 닉네임 검증
- 일반 로그인, 소셜 로그인, 로그아웃
- 설정 홈, 알림 설정, 앱 정보, 약관 조회/관리
- 공지사항, 1:1 문의, 관리자 운영 API
- 코인 상품, 코인 주문, 토스 결제 승인/취소/웹훅 처리
- 지갑/거래원장
- 환전계좌 등록/관리/관리자 인증
- 환전 신청/관리자 처리
pnpm install
pnpm start:dev빌드 확인:
pnpm buildDB 마이그레이션 관련:
pnpm db:migration:show
pnpm db:migration:generate InitSchema
pnpm db:migration:run
pnpm db:migration:revert테스트 실행:
pnpm test특정 스펙만 실행할 때:
./node_modules/.bin/jest --runInBand --watchman=false src/path/to/file.spec.ts실제 실행 전에는 .env.example을 참고해서 .env를 구성하면 됩니다.
PORTNODE_ENVSWAGGER_ENABLED
DB_HOSTDB_PORTDB_USERNAMEDB_PASSWORDDB_DATABASEDB_SYNCHRONIZEDB_LOGGING
REDIS_HOSTREDIS_PORT
SECRET_KEYACCESS_EXPIRATIONAUTH_CODE_EXPIRATIONOAUTH_REDIRECT_URLMEMBER_REDIRECT_URLKAKAO_CLIENT_IDKAKAO_CLIENT_SECRETKAKAO_REDIRECT_URIGOOGLE_CLIENT_IDGOOGLE_CLIENT_SECRETGOOGLE_CALLBACK_URL
참고:
- production에서는
OAUTH_REDIRECT_URL,KAKAO_CLIENT_ID,KAKAO_CLIENT_SECRET,KAKAO_REDIRECT_URI누락 시 부팅 단계에서 에러가 납니다.
MAIL_HOSTMAIL_PORTMAIL_USERNAMEMAIL_PASSWORD
AWS_ACCESS_KEYAWS_SECRET_KEYBUCKET_REGIONBUCKET_NAME
FIREBASE_CONFIG_PATH: 로컬 또는 secret mount로 주입한 JSON 파일 경로FIREBASE_SERVICE_ACCOUNT_BASE64: 런타임에 주입한 service account JSON의 base64 값
참고:
- 두 값 중 하나가 필요하며, 둘 다 있으면
FIREBASE_SERVICE_ACCOUNT_BASE64를 우선 사용합니다. firebase-service-account.json같은 실제 credential 파일은 저장소나 Docker 이미지에 포함하지 않습니다.
TOSS_PAYMENTS_SECRET_KEYTOSS_PAYMENTS_API_BASE_URL
기본값:
TOSS_PAYMENTS_API_BASE_URL=https://api.tosspayments.com
WITHDRAW_MINIMUM_COIN_AMOUNTWITHDRAW_COIN_UNITWITHDRAW_CASH_PER_COINWITHDRAW_FLAT_FEE_AMOUNTWITHDRAW_ACCOUNT_SECRET
기본값:
WITHDRAW_MINIMUM_COIN_AMOUNT=10WITHDRAW_COIN_UNIT=10WITHDRAW_CASH_PER_COIN=100WITHDRAW_FLAT_FEE_AMOUNT=0
WITHDRAW_ACCOUNT_SECRET은 환전계좌 암호화에 사용되며 운영 환경에서는 필수입니다.
APP_VERSIONMIN_SUPPORTED_VERSIONSUPPORT_EMAILSUPPORT_HOURSPRIVACY_POLICY_URL
참고:
APP_VERSION은 현재 배포 버전 값으로 사용됩니다.MIN_SUPPORTED_VERSION,SUPPORT_EMAIL,SUPPORT_HOURS,PRIVACY_POLICY_URL는 DB 저장값이 있으면 DB 값을 우선 사용합니다.
SEED_DEFAULT_DATASEED_ADMIN_ID
동작:
SEED_DEFAULT_DATA=false이면 기본 시드를 실행하지 않습니다.- 코인 상품은 누락된 기본 상품만 자동 생성합니다.
- 약관은
SEED_ADMIN_ID가 있고 해당 관리자 회원이 존재할 때만 누락분을 생성합니다.
앱 부팅 시 아래 초기 데이터가 자동으로 보강될 수 있습니다.
- 코인 상품
10 / 30 / 50 / 100코인 기본 상품
- 약관
- 서비스 이용약관
- 개인정보 처리방침
GET /api/settings/v1/summaryGET /api/settings/v1/notificationsPATCH /api/settings/v1/notificationsGET /api/settings/v1/app-infoPATCH /api/settings/v1/admin/app-infoGET /api/terms/v1POST /api/terms/v1PATCH /api/terms/v1/:idDELETE /api/terms/v1/:id
POST /api/auth/registerPOST /api/auth/loginPOST /api/auth/logoutGET /api/auth/profileDELETE /api/member/v1/withdraw
GET /api/notice/v1GET /api/notice/v1/adminPOST /api/notice/v1PATCH /api/notice/v1/:idDELETE /api/notice/v1/:idPOST /api/inquiry/v1GET /api/inquiry/v1/adminGET /api/inquiry/v1/admin/:idPATCH /api/inquiry/v1/admin/:id
GET /api/coin-shop/v1/productsGET /api/coin-shop/v1/admin/productsPOST /api/coin-shop/v1/admin/productsPATCH /api/coin-shop/v1/admin/products/:idPOST /api/coin-shop/v1/ordersPOST /api/coin-shop/v1/orders/:id/confirmPOST /api/coin-shop/v1/orders/:id/cancelGET /api/coin-shop/v1/admin/ordersGET /api/coin-shop/v1/admin/orders/:idPOST /api/payments/v1/webhooks/toss
GET /api/withdraw/v1/policyPOST /api/withdraw/v1/requestsGET /api/withdraw/v1/admin/requestsGET /api/withdraw/v1/admin/requests/:idPATCH /api/withdraw/v1/admin/requests/:idGET /api/withdraw-accounts/v1/adminGET /api/withdraw-accounts/v1/admin/:idPATCH /api/withdraw-accounts/v1/admin/:id/verify
- 운영 배포는
DB_SYNCHRONIZE=false로 실행합니다. - 로컬 개발은 필요할 때만
DB_SYNCHRONIZE=true로 빠르게 맞출 수 있습니다. - 스테이징/운영 스키마 변경은 마이그레이션 실행을 권장합니다.
.env에는 실제 비밀값을 직접 커밋하지 않는 것을 권장합니다.- Firebase credential은 Docker 이미지에 복사하지 않으며, 배포 환경에서
FIREBASE_SERVICE_ACCOUNT_BASE64또는 secret mount 파일로 주입해야 합니다. - 로그아웃은 현재 서버 성공 응답 후 프론트에서 access token을 삭제하는 방식입니다.
- 비활성 또는 탈퇴 회원은 일반 로그인, 소셜 로그인, JWT 인증 모두 차단됩니다.