TODAY TOTAL
SNUTime 등에 만들지 못(?)했던 아이디어들
 이제 내가 그동안 만들어 왔던 대학교 수강신청 및 시간표 프로그램인 ~Time들- SNUTime(서울대), KUTime(고려대 안암/세종), YONTime(연세대 신촌) 등- 도 슬슬 손에서 놓을 때가 되어가는 것 같아, 그 전에 떠오르는 생각들을 정리도 할 겸 UTime(University-Time)들에 대해 몇 가지 글을 쓰려고 했는데 마침 Elsa님이 댓글을 통해 '시간표 자동 작성이나 수업 간 이동 시간 분석' 기능에 대해 이야기를 하셔서 그에 대해 글을 써 볼까 한다.

 사실 시간표 자동 작성이나 (시간표와 연계한) 강의실 간 이동 시간, 혹은 강의실 간 최단 이동 경로의 지도상 표시 등의 기능은 스누타임 초기부터 아이디어는 구상했던 것 중 하나였다. 하지만 정작 수강편람 검색 및 시간표 제작 프로그램으로서의 기능을 더 다듬는다거나, 수강신청 마법사 같은 다른 중요한 것들을 만드는 게 우선되었으므로 미뤄오고 있었다.

 # 학교 지도와 시간표의 연계

 그러다가 2007년 9월에 Peter님이 방명록을 통해 새로운 아이디어를 제공해 주셨는데, 학교 지도와 시간표가 연계되어 지도 상에 나타나는 수업 정보라든가 짧은 글로 설명되는 이동 거리 안내- 마치 네비게이션같은- 기능의 제작에 대해 건의해 주셨다.

 위치 정보와 시간표를 연계하여 정보를 제공하는 것은 분명 멋진 아이디어였다고 생각한다. 하지만 어쨌거나 결론부터 말하자면 (지금의 스누타임에서 보듯) 만들지 못했다. 뭐, 만들지 않았다는 표현이 어쩌면 더 정확할지도 모르겠다.

 그 이유는 딱 하나로 줄일 수 있는데, 너무 '노가다'성이 짙다는 것이었다. 그래서 1년 전 쯤에 필자가 했던 '삽질'을 소개하자면-

 Idea: 지도 상에 수업이 있는 강의동 건물은 강조되어 표시되면서 그 아래에 그 강의동에서 있는 수업이 표시된다- 편리한 기능이라고 생각되지만, 잠깐. 서울대에 건물이 몇 개더라? 지도 상에서 건물의 좌표를 일일이 따는 것도 한숨부터 나오는데, 게다가 건물을 강조하기 위한 그래픽 작업이 수반되기 때문에 더더욱 한숨이 나오는 일이다. (사실 후자는 플래시와 함께 어디서 제공되는 약간의 편법을 동원하면 간단히 구현이 되는데, 전자는..)

 Idea: 강의실 간 이동에 필요한 시간이 계산된다거나 최단 거리 경로가 표시된다- 사실 그다지 필요없을 기능이긴 한데, 가까운 강의실들을 오가는 경우라면 문제가 없겠지만, 예를 들어 58동과 43-1동에서 공강 없이 수업이 계속된다면? 갈 수 있을까? 어디로 가는 게 가장 빠를까? 이런 생각을 한 번쯤은 해 보기 마련이니 구상해 본 아이디어였다.

 일단 이동 시간 계산과 최단 거리 경로를 한 번에 모두 처리하기 위해 다익스트라(데이크스트라, Dijkstra) 알고리즘을 사용해봤는데, 이쪽도 당연히 노가다. 지하철 노선도 짜듯이 교내의 모든 이동 가능한 경로를 도식화하고, 게다가 오르막과 내리막의 높낮이차를 반영하기 위해 상행선-하행선 짜듯 이중으로 경로를 짜야했는데, 잠깐. 서울대에서 다닐 수 있는 길을 어떻게 다 도식화? (...) 게다가 각 가지 별로 걸리는 이동 시간은 또 어떻게 일일이 입력하나? 시험삼아 정문-경영대-멀티미디어동-주산홀-자하연-법대-사회대-후생관-정문 정도만 만들어보고 너무 입력할 게 많아서 GG.

 그렇다면 직접 데이터를 저렇게 입력하지 않아도 되게- 즉, 지도 상에서 직접 최단 경로를 계산하고 표시해주는 건 어떨까 싶어 새로운 방식을 구현해 봤다. 캠퍼스 지도를 삼국지 게임에 나오듯 사각형의 셀로 쪼갠 다음, 건물이 있는 셀은 통과할 수 없고, 건물이 없는 셀은 통과할 수 있게 해서 시작점과 종점 간의 셀 개수가 가장 작은 경로를 표시해보려 한 것. 이 쪽도 그러고보니 통과할 수 없는 셀은 수작업으로 정의해줘야 하는데다, 정확성을 높이기 위해 셀의 크기를 줄이니 (플래시 액션스크립트로 만들어서 그런지) 계산할 게 많아져서 CPU가 뻗는다.

 결국, 엄청난 노가다성을 보이는 작업을 감히 시작할 엄두는 나지 않고- (시간이 정말 정말 남아돈다 하더라도 저런 건 하고 싶지 않다) 설령 만든다 한들, 사실 저런 기능까지 필요한 사람이 몇이나 되겠는가 하는 생각에 사장된 아이디어들인 셈이다.

 # 시간표 자동 작성

 시간표를 자동으로 사용자의 입맛에 맞게 작성해주는 기능도 구상해 본 적이 있다. 한양대나 홍익대, 연세대, 서울시립대 등에서 각기 학생 분들이 만든 프로그램 혹은 웹 사이트 중에도 시간표 대안을 자동 생성해주는 게 있었다고 알고 있는데, 내가 구상했던 것은 이러하다.

 일단 현재 SNUTime에 존재하는 SMART LIFE 검색 조건처럼, 수업이 있기를 원하는 요일이나 시간대를 정의하고, 수업이 없기를 원하는 요일이나 시간대를 정의한다. 많은 학생들이 원하는 주 4파에 점심시간 유지 같은 걸 쉽게 입력할 수 있을 것이다. 전공>교양이라든가, 15~18학점이라든가, 어떤 영역에 있는 강좌가 더 좋다 하는 식의 선호도도 정의할 수 있을 것이다.

 그 다음, 개별 강의당 가산점 부여를 위해 학사행정 서버에서 이수내역 페이지를 가져온다. SNUTime이 직접 서버에 접속하는 것은 곤란하므로 사용자가 직접 로그인한 다음, 페이지를 복사해 붙여넣는 방법이 가장 적절할 것이다. 이 페이지에는 그 학생이 반드시 들어야만 하는 강의의 목록이 나와 있는데, SNUTime은 그 강의들에는 다시 가산점을 줘서 앞에서 입력한 데이터들과 함께 수강편람 전체에 걸쳐 강의당 점수를 산출한다. (누적성적 페이지까지 입력한다면 재수강이 필요한 과목들도 별도의 가산점을 매길 수 있을 것이다)

 그리고 시간이 겹치지 않게 강의들을 조합하고 종합 점수가 높은 순서대로 경우의 수를 몇 가지 뽑아주면 어떨까 하는 것이 바로 시간표 자동 작성의 아이디어였다.

 하지만 이 아이디어 역시 어쨌거나 사장되었는데- 코드를 짜기가 귀찮은 것도 물론 한 이유이긴 하지만, (위치 정보 연동 기능에서처럼) 사실 저런 기능까지 필요한 사람이 몇이나 되겠는가 하는 생각에 만들지 않았다. 대부분의 학생들은 이미 무엇을 들어야 할 지 대강은 방향을 정했을 것이기 때문이고, 이미 있는 검색 기능으로서도 충분히 시간표를 구상하는 데 어려움이 없다고 생각되는데다, 또 저런 식으로 프로그램을 짜게 되면 수강편람 상에 나타나지 않는 정보들- 수업의 내용이나 교수님의 성향 등- 은 고려할 수 없기 때문에 실용성이 의문시되기 때문이다. 몇 안되는 조건 하에서는 경우의 수가 또 얼마나 많이 나오겠는가. 설령 내가 아닌 다른 사람이 만든 이런 프로그램이 있다 하더라도, 내가 사용하지 않을 것 같았다.

 이상으로, 지난 시간 동안 SNUTime 등을 만들어 오면서 구상했던 아이디어들 중에 '만들면 없는 것 보단 낫겠지만' '사실 별 필요는 없고' '제작자에게는 과중한 스트레스와 일거리를 줄 것이 명확해 보였던' 두 가지 아이디어에 대해 이야기해 보았다. 쓰고 보니 정말 그렇다- 재미있는 생각이긴 하지만.
 
 그저 묻어두기보단, 말이 나온 김에 글로서나마 한 번 풀어보는 것으로 이제 이 아이디어들을 마무리할까 한다.

 덧붙여서- 사실 수강신청에 정말 유용하기로는 이런 재미있긴 하지만 만들기 귀찮고 복잡한 기능들보다, 수강신청 서버와 사용자 컴퓨터의 시스템 시각을 똑같이 맞춰주는 시각 동기화 기능 같은 것들이 간단하면서도 훨씬 유용하다. 수강신청에서 가장 중요한 것 중 하나가 바로 정확한 시각에 로그인을 시도하는 것이기 때문이다. (당연히 SNUTime, KUTime, YONTime 모두 각각 서울대, 고려대, 연세대 수강신청 서버와 자동 시각 동기화 기능을 가지고 있다)
  Comments