🐾 κ°œμŠ€ν€΄ 🐾 - λ°±μ—”λ“œ

기술 μŠ€νƒ

  • Node.js (Express) + MongoDB (mongoose)

μ‚¬μš© ν™˜κ²½ μ„€μ •

  1. λ°±μ—”λ“œ 파일 ν΄λ‘ ν•˜κΈ°

    > git clone https://github.com/Winters0727/Quiz_Backend
  2. μ˜μ‘΄μ„± 파일 μ„€μΉ˜ - package.json 파일 확인

    > npm install
  3. Mongo DB μ„€μΉ˜

  4. ν™˜κ²½λ³€μˆ˜ μ„€μ • - .env 파일 생성

    DATABASE_URL=(Mongo DB 둜컬 URL : mongodb://localhost:27017/)
    PORT=(μ‚¬μš©ν•  포트 번호)
    
  5. bin/www 파일 μ‹€ν–‰

    > node bin/www
    > nodemon bin/www

데이터 λͺ¨λΈ μŠ€ν‚€λ§ˆ

λ‹¨λ‹΅ν˜• ν€΄μ¦ˆ

데이터 ν‚€ μžλ£Œν˜• μ˜΅μ…˜
ν€΄μ¦ˆ 문제 quizQuestion String ν•„μˆ˜
ν€΄μ¦ˆ μ •λ‹΅ quizAnswer Array ν•„μˆ˜
ν€΄μ¦ˆ μΉ΄ν…Œκ³ λ¦¬ quizCategory Array ν•„μˆ˜
ν€΄μ¦ˆ ν”Œλ ˆμ΄ 횟수 quizPlayCount Number
ν€΄μ¦ˆ 생성 μ‹œμ  createdAt Date
ν€΄μ¦ˆ λ³€κ²½ μ‹œμ  updatedAt Date

μ„œμˆ ν˜• ν€΄μ¦ˆ

데이터 ν‚€ μžλ£Œν˜• μ˜΅μ…˜
ν€΄μ¦ˆ 문제 quizQuestion String ν•„μˆ˜
ν€΄μ¦ˆ μ •λ‹΅ quizAnswer String ν•„μˆ˜
ν€΄μ¦ˆ μΉ΄ν…Œκ³ λ¦¬ quizCategory Array ν•„μˆ˜
ν€΄μ¦ˆ ν”Œλ ˆμ΄ 횟수 quizPlayCount Number
ν€΄μ¦ˆ 생성 μ‹œμ  createdAt Date
ν€΄μ¦ˆ λ³€κ²½ μ‹œμ  updatedAt Date

객관식 ν€΄μ¦ˆ

데이터 ν‚€ μžλ£Œν˜• μ˜΅μ…˜
ν€΄μ¦ˆ 문제 quizQuestion String ν•„μˆ˜
ν€΄μ¦ˆ μ •λ‹΅ quizAnswer Number ν•„μˆ˜
ν€΄μ¦ˆ 선택지 quizSelection Array ν•„μˆ˜
ν€΄μ¦ˆ μΉ΄ν…Œκ³ λ¦¬ quizCategory Array ν•„μˆ˜
ν€΄μ¦ˆ ν”Œλ ˆμ΄ 횟수 quizPlayCount Number
ν€΄μ¦ˆ 생성 μ‹œμ  createdAt Date
ν€΄μ¦ˆ λ³€κ²½ μ‹œμ  updatedAt Date

Endpoint

둜컬 μ„œλ²„ Base URL : http://localhost:(포트번호)/

ν€΄μ¦ˆ API Base URI : api/quiz/(ν€΄μ¦ˆ νƒ€μž… : short, long, select)

  • http://localhost:(포트번호)/api/quiz/short
  • http://localhost:(포트번호)/api/quiz/long
  • http://localhost:(포트번호)/api/quiz/select

랜덀 ν€΄μ¦ˆ Base URL : http://localhost:(포트번호)/api/quiz/random (GET)

  • λ‹¨λ‹΅ν˜•, μ„œμˆ ν˜•, 객관식 ν€΄μ¦ˆ 각각의 μ΅œμ‹  ν€΄μ¦ˆ 10개λ₯Ό λΆˆλŸ¬μ™€μ„œ 그쀑 λ¬΄μž‘μœ„λ‘œ 5개λ₯Ό 선택해 λ„˜κ²¨μ€€λ‹€.
  • ν€΄μ¦ˆ 개수의 합이 5개 미만이라면 κ·Έ 개수만큼의 ν€΄μ¦ˆλ₯Ό λ„˜κ²¨μ€€λ‹€.

λ‹¨λ‹΅ν˜•, μ„œμˆ ν˜•, 객관식 ν€΄μ¦ˆ λͺ¨λ‘ ν€΄μ¦ˆ νƒ€μž…μ„ μ œμ™Έν•˜λ©΄ λ™μΌν•œ CRUD Endpointλ₯Ό 가진닀.

quizIdλŠ” Mongo DBμ—μ„œ μ œκ³΅ν•˜λŠ” _idλ₯Ό μ˜λ―Έν•œλ‹€.

Endpoint HTTP Method μ„€λͺ…
/ POST ν€΄μ¦ˆλ₯Ό μƒμ„±ν•©λ‹ˆλ‹€.
/?limit=1 GET ν€΄μ¦ˆ 리슀트λ₯Ό κ°€μ Έμ˜΅λ‹ˆλ‹€.
Query둜 limitλ₯Ό μž…λ ₯ν•˜λ©΄ κ°€μ Έμ˜¬ 데이터 양을 μ œν•œν•©λ‹ˆλ‹€.
/:quizId GET νŠΉμ • ν€΄μ¦ˆλ₯Ό κ°€μ Έμ˜΅λ‹ˆλ‹€.
/:quizId PUT νŠΉμ • ν€΄μ¦ˆλ₯Ό λ³€κ²½ν•©λ‹ˆλ‹€.
/:quizId DELETE νŠΉμ • ν€΄μ¦ˆλ₯Ό μ œκ±°ν•©λ‹ˆλ‹€.
  • Post μ˜ˆμ‹œ

    • URL : http://localhost:8000/api/quiz/short

    • http method : POST

    • 데이터 :

      {
          "quizQuestion" : "λ‘˜ μ΄μƒμ˜ ν”„λ‘œμ„ΈμŠ€κ°€ λ‹€λ₯Έ ν”„λ‘œμ„ΈμŠ€κ°€ μ μœ ν•˜κ³  μžˆλŠ” μžμ›μ„ μ„œλ‘œ 기닀릴 λ•Œ λ¬΄ν•œ λŒ€κΈ°μ— λΉ μ§€λŠ” 상황을 뭐라고 ν•˜λ‚˜μš”?",
          "quizAnswer" : ["λ°λ“œλ½", "deadlock", "κ΅μ°©μƒνƒœ"],
          "quizCategory" : ["운영체제", "컴퓨터", "ν”„λ‘œκ·Έλž˜λ°"]
      }