Jjenny-K / challenge-code

[개인 프로젝트] 코딩테스트 문제를 생성하거나 응시할 수 있는 REST API 구현

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Challenge-code

Numble - 코딩테스트 플랫폼 구축하기 챌린지

Project review GoTo

  • 프로젝트 회고록

Task interpretation

해당 기능을 사용할 수 있는 권한이 있는 유저에게 코딩테스트 문제 풀이 기능을 제공하는 서비스라고 해석하였습니다.

Implementation requirements

  • Database
    • 시스템 상 필요한 최소한의 데이터 임의 생성
    • 문제와 해설은 1:1관계
    • 문제와 답안은 1:1관계
    • 문제와 유저의 풀이 답안은 1:1관계
  • REST API
    • 문제 생성 API
      • 문제 난이도 설정 가능
    • 해설, 답안 생성 API
    • 문제 풀이 API
      • 답안을 작성한 경우만 문제 제출(채점) 가능
      • 특정 문제 조회하여 응시 가능
      • 특정 유형별 문제 조회하여 응시 가능
      • 특정 문제를 모아 응시하는 기능(모의고사)
      • 문제 조회 시 필터링
        1. 난이도가 가장 낮은 문제
        2. 문제 응시 횟수가 가장 적은 문제
        3. 가장 최근에 추가된 문제
      • 문제 조회 시 캐싱 활용해 조회 속도 개선
    • 채점 API
      • 제출한 답안과 문제의 답안이 동일할 경우 100점, 제출한 답안과 문제의 답안이 동일하지 않을 경우 0점
      • 채점 완료 시 유저의 점수 기록 업데이트
      • 채점 시 메세지 큐 활용해 채점 수행 속도 개선
    • 해설 API
      • 채점 점수, 문제 답안, 문제 해설, 작성 답안 조회 가능
      • 문제 답안, 문제 해설 조회 시 캐싱 활용해 조회 속도 개선
      • ‘다시 보고 싶은 문제’로 추가하는 기능
  • Implementation
    • Django + Django REST Framework
    • 캐싱, 메세지 큐 도입
    • 구현 로직에 대한 테스트
    • Swagger 이용한 API 명세
    • README.md
      • ERD
      • API 목록
      • API 실행 방법
      • 성능 측정 및 개선 내용
  • Additional points
    • 프로젝트 회고록 작성
      • 프로젝트 진행 시 고민한 부분, 성장한 부분, 아쉬운 부분 등

Implementation

Tech Stack

Development Period

  • 2023.03

ERD

erd

API Specification GoTo

Implementation Process

  • Viewset을 이용한 RESTful API 구현
    • 사용자 API
      • 사용자 회원가입, 로그인, 로그아웃 구현
        • simplejwt를 이용해 token 발행으로 사용자 인증
        • permission customizing을 통한 사용자 접근 권한 부여
      • 사용자 정보 수정 및 삭제 구현
        • 로그인 시 발행된 access_token으로 인증하지 않을 경우 401 error 리턴
    • 문제, 답안 및 해설 API
      • 문제 생성, 조회, 수정, 삭제 구현
        • 문제 리스트, 상세 조회 시 인증 여부에 상관없이 조회
        • 문제 생성, 수정, 삭제 시 로그인 시 발행된 access_token으로 인증하지 않을 경우 401 error 리턴
      • 답안 생성, 조회, 수정, 삭제 구현
        • 답안 리스트 조회 시 사용자 본인이 작성한 내역만 조회할 수 있도록 구현
        • 로그인 시 발행된 access_token으로 인증하지 않을 경우 401 error 리턴
        • 답안 생성, 삭제 시 해당 문제 답안생성여부 업데이트로 사용자가 답안이 있는 문제만 응시할 수 있도록 구현
    • 문제 응시, 풀이 API
      • 기본적인 생성, 조회, 수정, 삭제 구현
        • 응시 기록 리스트 조회 시 사용자 본인이 작성한 내역만 조회할 수 있도록 구현
        • 로그인 시 발행된 access_token으로 인증하지 않을 경우 401 error 리턴
        • 문제 최초 응시 시 해당 문제 응시횟수 업데이트로 사용자들이 문제를 얼마나 응시했는지 확인할 수 있도록 구현
  • API 명세를 위한 Postman document 작성

Step to run

window 환경에서 구현 및 실행되었습니다.

Local server

  1. github에서 해당 프로젝트의 repository를 clone합니다.
$ git clone https://github.com/Jjenny-K/challenge-code.git
  1. .env 파일을 root directory에 생성 후, 프로젝트와 연동을 위한 정보를 저장합니다.
SECRET_KEY='{SECRET_KEY}'
  1. 가상환경을 설정한 후 필요한 라이브러리를 설치합니다.
$ python -m venv venv
$ venv\Scripts\activate
$ python install -r requirements.txt
  1. model migration을 진행합니다.
$ python manage.py migrate
  1. local server를 실행합니다.
$ python manage.py runserver

Author

All of development : 🐵 Kang Jeonghui

About

[개인 프로젝트] 코딩테스트 문제를 생성하거나 응시할 수 있는 REST API 구현


Languages

Language:Python 100.0%