Keyneez-Server

image


✨ 서비스 핵심 기능 소개

1. 테스트하고, 나만의 젤리 만들기
본인의 성향과 관심사 정보를 선택하시면, 15가지 캐릭터 중 본인에게 가장 잘 어울리는 캐릭터를 발급해드립니다.
image
2. 나에게 꼭 맞는 추천 게시물 보기
앞서 발급된 캐릭터의 성격에 맞춰 추천 탭에서 보여지는 정보가 달라져, 본인에게 알맞는 정보를 상단에서 확인하실 수 있습니다.
image
3. ID 카드 발급받기
학생증과 청소년증을 스캔하여 본인을 인증하고, 인증된 정보로 키니즈만의 ID 카드를 발급받으실 수 있습니다.
image image

🧾 API 명세서 확인하기

👣 ERD

image

🛠 Tech


🫧 Convention

Code convention
  • 변수나 함수명은 camelCase

  • 함수의 경우 동사 + 명사

    • ex) getInformation()
  • DB 테이블 이름 PascalCase / 칼럼(column) 이름은 snake_case

  • Class / Interface / Type / Namespace / Enum 명은 PascalCase

  • 약어는 되도록 사용하지 않는다. (필요한 경우 팀원과의 논의 하에 사용)

  • 파일명은 camelCase ex) userController.ts, userService.ts, userRouter.ts

Commit message convention
태그 이름 설명
[feat] 새로운 기능 구현
[update] 추가 개발 진행
[merge] 다른 브랜치를 merge 할 때 사용
[fix] 버그, 오류 수정
[remove] 불필요한 코드 삭제
[rename] 파일 이름 변경 시 사용
Git Branch convention
  • main : 개발 브랜치

  • master : 배포 브랜치

  • feat/user → router 별로 분리


📂 Directory Structure

./src
├── index.ts
├── constants
│   ├── index.ts
│   ├── response.ts
│   ├── responseMessage.ts
│   ├── statusCode.ts
│   └── tokenType.ts
├── controller
│   ├── userController.ts
│   ├── userController.test.ts
│   ├── index.ts
│   ├── contentController.test.ts
│   └── contentController.ts
├── data
│   └── character.json
├── interfaces
│   ├── user
│   │   ├── CharacterCreateDTO.ts
│   │   ├── CharacterResDTO.ts
│   │   ├── CheckIdentityDTO.ts
│   │   ├── UserCreateDTO.ts
│   │   └── UserUpdateDTO.ts
│   └── content
│       ├── AllContentsDTO.ts
│       └── ContentDTO.ts
├── middlewares
│   ├── auth.ts
│   └── index.ts
├── modules
│   └── jwtHandler.ts
├── router
│   ├── userRouter.ts
│   ├── index.ts
│   └── contentRouter.ts
└── service
    ├── userService.ts
    ├── index.ts
    └── conentService.ts

🗞 Dependencies Module ( package.json )

{
  "name": "seminar4",
  "version": "1.0.0",
  "main": "index.js",
  "license": "MIT",
  "scripts": {
    "dev": "nodemon",
    "build": "tsc && node dist",
    "db:pull": "npx prisma db pull && npx prisma generate",
    "db:push": "npx prisma db push && npx prisma generate",
    "generate": "npx prisma generate",
    "prepare": "husky install",
    "test": "dotenv -e prisma/.env.test npx prisma db push && npx prisma generate && jest --detectOpenHandles --forceExit "
  },
  "devDependencies": {
    "@types/bcryptjs": "^2.4.2",
    "@types/express": "^4.17.14",
    "@types/express-validator": "^3.0.0",
    "@types/jest": "^29.2.5",
    "@types/jsonwebtoken": "^8.5.9",
    "@types/multer": "^1.4.7",
    "@types/multer-s3": "^3.0.0",
    "@types/node": "^18.11.9",
    "@types/supertest": "^2.0.12",
    "husky": "^8.0.3",
    "jest": "^29.3.1",
    "nodemon": "^2.0.20",
    "supertest": "^6.3.3",
    "ts-jest": "^29.0.3",
    "typescript": "^4.9.4"
  },
  "dependencies": {
    "@aws-sdk/client-s3": "^3.216.0",
    "@prisma/client": "^4.5.0",
    "bcryptjs": "^2.4.3",
    "dotenv": "^16.0.3",
    "dotenv-cli": "^6.0.0",
    "express": "^4.18.2",
    "express-validator": "^6.14.2",
    "jsonwebtoken": "^8.5.1",
    "multer": "^1.4.5-lts.1",
    "multer-s3": "^3.0.1",
    "prisma": "^4.5.0"
  },
  "jest": {
    "transform": {
      "^.+\\.ts$": "ts-jest"
    },
    "testRegex": "\\.test\\.ts$",
    "moduleFileExtensions": ["ts", "tsx", "js", "json"]
  }
}

Server Architecture

image


역할 분배

박서원 user Router API 구현
김규원 content Router API 구현