<회의실예약사이트> 개발 준비하기

이시우·2021년 8월 29일

개발 내용 정리 및 배분

고객과 미팅 내용을 토대로 개발할 페이지, 기능, 고려할 점을 정리했다.
정리한 내용을 바탕으로 DB를 설계하고 팀원과 페이지를 나눠서 개발을 진행하기로했다.

1. 로그인 페이지

우선 회사 내부망의 Django 프로젝트에 app을 추가해서 개발하기로했다.
그래서 따로 로그인 기능을 개발할 필요 없이 기존 코드를 사용했다.
사번, 비밀번호만 가지고 예약할 수 있게 했다.

2. 메인 페이지 (전체 현황 페이지)

로그인 후 접속되는 페이지이다.
우선 필요한 기능을 나열해보자면

  • 전체 회의실의 예약 현황을 볼 수 있어야함
  • 날짜를 변경해 예약 현활을 볼 수 있어야함
  • 반응형으로 제작되었으면 좋겠음

이었다.
간단한 내용이었고, 개발하면서 다양한 기능을 더 추가했다.

3. 예약하기 페이지

날짜, 시간, 회의실, 회의 제목, 회의 안건, 주최자, 참석자를 입력하여 예약하는 페이지이다.
회의를 예약할 때에는

  • 중복으로 회의가 예약되지 않음
  • 이미 예약된 시간은 표시가 되어야함
  • 검색 기능을 통해 참석자를 등록할 수 있었으면 좋겠음
  • 회의 명, 안건에 대한 글자 수 제한, 특수문자 가능 여부가 표시되면 좋겠음
  • 주최자의 부서명이 자동으로 출력되면 좋겠음
  • 시작시간을 선택하면 종료시간이 자동으로 +30분으로 설정되면 좋겠음

4. 외부인 등록 페이지

사내 DB에 등록되지 않은 사람을 등록하는 페이지다.
외부인이 본사를 방문하여 회의에 참여하는 경우가 많아서 개발하기로했다.

  • 등록 후에 전화번호와 이름은 *모양으로 표시되어야함(개인정보보호)
  • DB를 따로 생성하여 관리
  • 참석자나 주최자로 사용할 수 있어야함

5. 내 예약 현황 페이지

내가 참석했거나, 참석해야하는 회의를 보여준다.

  • 내가 주최자거나 생성자이면 회의를 수정, 삭제할 수 있어야함
  • 과거 내역과 진행 예정 내역이 나눠서 보여져야함
  • 클릭 시 상세 정보를 볼 수 있어야함

6. 태블릿 대기화면 페이지

각 회의실 앞에 태블릿을 두고 사용할 예정이기 때문에, 태블릿에서 전체 현황을 볼 수 있는 페이지가 필요했다.
예약하거나 다른 기능은 필요 없이 전체 현황만 볼 수 있으면 되는 페이지였다.

DB설계

아래 이미지처럼 DB를 설계했다.
DB설계할 때 가장 많이 고민한 부분은 시간 예약에 대한 부분이었다.
시간을 어떻게 예약하고, 관리할 것인가 ?
어떤 방식으로 시간 값을 저장했을 때 다른 기능들을 구현하기 편하고, 잘 작동할지 고민을 많이했다.

첫번째 고민 했던 방법은 세달치 시간값을 미리 생성해두고 상태값을 변경하는 방법이다.
보통 회의를 예약할 때 세 달이상 일찍 예약하는 경우가 없었다.
그래서 세달치 시간값을 미리 생성해두고 상태값을 변경하는 방법을 생각했었다.
자동으로 시간값을 지우고 생성하도록해서 관리하는 것이다.
회의 예약은 30분 단위로 가능하기 때문에 9시 부터 19시까지 하루에 21개의 값이 필요했다. 세 달이면 1,390개의 값이었다.

두번째는 예약할 때 마다 시간 값을 생성하고 이미 생성된 값이 있다면 생성되지 않도록 하는 것이다.
예약할 때 마다 데이터를 생성한다.
form을 넘기기 전에 비동기로 중복값 검사를 하고 중복된 값이 있으면 submit을 하지 못하게 하는 방법이었다.

이 외에도 다른 방법들을 고민해봤는데, 결국 2번으로 진행하기로했다.

  • VI_RLOGIN : 로그인 할 때 사용되는 뷰, 내부 직원 DB를 활용했다.
  • MEETINGROOM : 회의실 이름과 최대 수용 인원 수 정보를 담고 있다.
  • REZ_OUTSIDER : 외부인 정보가 저장된다.
  • VI_USER : VI_RLOGIN과 REZ_OUTSIDER를 JOIN한 뷰로, 참석자나 주최자를 조회할 때 사용한다.
  • REZ_TIME_INFO : 예약된 시간을 저장한다. 전체 현황 페이지에서 사용한다.
  • REZ_TIME_SHOW : 예약된 시간을 저장한다. 이미 예약된 시간을 표시할 때 사용한다.
  • REZ_TIMETABLE : 시간을 KEY,TIME으로 나눠서 저장한다.
    ex) key=1 , time=09:00 / key=2, time=09:30
    시간값의 비교를 위해서 key,time으로 나눠서 사용했다.

0개의 댓글