본문 바로가기

내 이야기/프로젝트

교내 스터디룸 예약 시스템

2019.12~2020.04, with 팀원 1명

개요

모교 단과대학 건물에는 스터디룸이 있다. 학생회에서 스터디룸을 관리하고 있는데, 이를 스터디룸 앞에 종이를 통해 예약을 받고 관리가 이루어진다. 그래서 여러가지 문제점이 있었다.

  • 매주 예약을 받는 종이를 갈아줘야함.
  • 자기가 예약한 시간을 확인하기 어려움.
  • 실제로 예약한 시간만큼 사용하지 않아 남는 시간에 다른 사용자가 이용을 못함(추후 추가됨)

그래서 이를 전산화해서 웹으로 관리할 수 있도록 구축하고자 했다.


구축

 

요구사항 명세

 

크게 3가지의 기능이 필요했다. 정리하면 다음과 같다.

1. 회원가입 및 로그인
학교 웹메일 인증을 통해 회원가입
로그인은 학번/비밀번호 통해 입력

2. 예약
예약가능 스터디룸은 1층 2개, 3층 1개
예약 시 예약 가능한 시간 타임 테이블로 제공
메인페이지에서 당일 예약 비율 원 그래프로 파악 가능 

평일 월~금에는 해당 주 월~금만 예약가능
토요일 00시부터 다음주 월~금 예약가능
만약 해당 시간에 예약이 존재하면 예약 불가
1인당 하루 2건 이상 예약 불가(스터디룸 3개 포함), 예약 1건당 최대 2시간
내 예약 현황 파악 및 반환 가능

3. 공지사항
관리자 계정으로 작성 가능
관리자 계정으로 예약 관리도 가능(블랙리스트 유저 예약 수기처리 등) 

 

기술 스택
백엔드
Python Django 프레임워크

프론트엔드
html, css, javascript

데이터베이스
SQLite

그 외 연동 라이브러리
pillow(django 이미지 처리), ckeditor(WYSIWYG 에디터), SMTP(학교 웹 메일 인증) 등

 

구축하며 어려웠던 점

 

요구사항 명세

학생회 측에서도 정확히 어떤 것들을 원하는 지 명확히 이야기하지 않았고 애초에 내가 필요하다 생각해서 제안한 시스템이라 요구사항을 정리하기 쉽지 않았다.

내가 학생회를 하며 지켜보며 필요했던 룰들을 정리하고 학생회 측에 제안하여 이에 동의하는지의 과정을 통해 구축했다. 여러 번의 미팅을 했지만 쉽지는 않았다. 그래도 제안한 것들에 대해서 적극적으로 피드백을 해줘서 잘 마무리지었다.

 

해당 시스템과 학교 시스템과의 인증을 어떻게 할 것인가(우리 학교 학생 인증을 어떻게?)

학교 웹 메일과의 연동을 통해 해결하고자 했다.

회원가입 시 학교 웹메일 주소를 받는다. 그리고 회원가입 완료를 하면 User라는 모델의 인스턴스가 생성되지만 is_valid라는 속성을 false 값을 준다.

 

그리고 SMTP API를 통해 회원가입 시 입력한 학교 웹 메일로 토큰(JWT)을 보낸다.

해당 토큰이 담긴 링크를 통해 접속 시 is_valid 속성값을 true로 변경하면서 인증이 완료되어 우리 학교 학생임을 인증한다.

 

예약 모델링을 어떻게 할 것인가?

예약 객체(reservation)에 대해서 예약 시간을 시작 시간과 끝 시간이라는 속성을 지니게 한다.

그리고 시간은 실수로 표현한다.

ex) 9시 30분 ~ 11시 30분 예약의 경우 -> start_time = 9.5 , finish_time = 11.5

 

N:1 모델링을 통해 유저당 여러개의 예약을 가질 수 있고, 제약조건을 통해 요구사항 명세를 지킨다(인당 개수 제한, 기간 제한 등). 

 

서버 관리 및 배포를 어떻게 할 것인가?

서버는 Apache + mod WSGI를 통해 구성 

AWS 프리티어를 지닌 학생회 계정을 생성하고 EC2 서비스를 통해 배포한다.

해당 게시글 링크

 

Django EC2 window server 배포

준비물 Django 프로젝트 AWS IAM 자격증명 EC2 인스턴스 생성 지금까지 수행한 결과로 EC2 - window 인스턴스를 생성할 수 있다. 이렇게 되면 탄력적인 IP를 계속하여 할당받을 수 있게 된다. 해당 인스턴

woongsin94.tistory.com


완성본

http://13.209.132.232/

 

사회과학대학

 

13.209.132.232