개발하는 일상

Django 과제 채점 프로그램 만들기 본문

개발 기록

Django 과제 채점 프로그램 만들기

롯데빙빙바 2020. 10. 3. 20:50

개발 배경

저는 코딩 교육을 하고 있습니다. 1~2주 마다 학생들이 제출한 프로젝트 과제를 채점해야 하는데, 여기서 두 가지 원하는 점이 생겼습니다.

  • 20~30명 되는 학생들의 django project를 하나하나 python manage.py runserver를 해서 채점하는 노동 과정을 줄이고 싶다.
  • 하나의 서버에서 모든 학생들의 프로젝트를 모아놓고 볼 수 있게 해서, 학생들이 다른 학생들의 프로젝트를 보고 자극 받게 하고 싶다. 혹은 잘 한 사람에게 더욱 동기 부여를 하고 싶다.

고려했던 방향

테스트 코드 작성

첫 번째 목표를 생각했을 때, 테스트 코드 작성이 떠올랐습니다. 실제로 2번 정도는 매 프로젝트 테스트 코드를 작성해서 채점을 진행해 보았습니다. 그리고 다음과 같은 문제점으로 다른 방법을 고민하게 되었습니다.

  • 매 프로젝트마다 거의 채점하는 시간과 비슷한 들여 테스트 코드를 작성합니다. 제가 테스트 코드를 짜는 데 익숙해 질 수록 시간은 짧아지긴 하겠지만, 여전히 매주 코드를 작성해야 한다는 점이 좋지 않았습니다.
  • 학생들의 기상천외한 예외들 때문에 결국 테스트 코드를 적용하지 않고 직접 채점하는 일이 매번 있었습니다. 물론 부족한 실력 때문이지만, 좀 더 효율적인 방법을 찾고 싶었습니다.
  • 색다른 시도를 적용해본 프로젝트를 다른 학생들에게 보여 주고 싶었는데, 이런 프로젝트를 찾으려면 결국 테스트 코드와 별개로 프로젝트를 하나하나 실행해봐야 했습니다.

학생들의 모든 프로젝트를 하나의 서버에서 보여주는 방식

이 방식에서는 먼저 모든 학생들의 프로젝트 서버를 켭니다. 이 후에 또 다른 서버를 돌려서 학생 리스트 중 하나를 클릭하면 iframe을 통해 해당 학생의 프로젝트를 확인할 수 있게 하였습니다. 이 방식은 다음과 같은 장점이 있었습니다.

  • 매주 다른 코드를 작성하지 않아도 됩니다. 항상 같은 코드로 학생들의 프로젝트를 한 번에 확인할 수 있습니다.
  • 학생들에게도 다른 학생들이 한 프로젝트를 손쉽게 보여줄 수 있습니다.

물론 이 방법은 테스트 코드 작성과 달리 모든 학생의 결과물을 하나하나 봐야한다는 단점이 있습니다. 하지만 학생들의 결과물만을 보는 시간은 생각보다 오래걸리지 않았습니다. 실제로 저를 힘들게 했던 건 반복된 cdpython manage.py runserver 였던 것을 알게되었네요.

결과물


  • 위 그림의 왼쪽에 학생들의 이름이 리스트로 출력되고, 클릭하면 해당 학생의 과제 실행 화면을 오른쪽에 iframe을 통해 출력해 줍니다.
  • 앱 이름을 기반으로 iframe의 src url을 형성하는데, 만약 admin 페이지를 확인하고 싶다면 앱 이름에 admin을 입력하면 됩니다.
  • 새 탭에서 열기를 통해 iframe이 아니라 새 탭에서 해당 학생의 과제를 확인할 수 있습니다. 문제가 있을 때 url을 바꿔가며 디버깅하기 위함입니다.

적용한 코드

글이 너무 길어지는 것을 방지하고자 따로 따로 작성하였습니다.

multiprocessing을 이용한 django 서버 한 번에 여러개 띄우기

Django에서 XFrameOptions 해제하기

python으로 한 번에 여러 github repo clone 받기

Comments