SSU Rank Project를 시작한 이야기
이야기를 시작하며.
지난 9월 말, 숭실대학교 학생을 위한 강의/교수평가 조회 서비스 SSU Rank의 BETA 버전을 공개했습니다. SSU Rank는 숭실대학교 재학생이 매 학기 참여하는 학교 공식 강의평가 결과를 기반으로 교수, 강의마다 A부터 D까지 등급을 부여하여 해당 교수, 강의의 평판을 보여주는 서비스입니다.
SSU Rank는 BETA 버전 공개 후 24시간동안 1,400명이 방문했으며 최고 동시접속자 290명, 페이지 뷰 17,000회를 기록했습니다. 숭실대학교 학부생이 약 13,000명이므로 첫 24시간 동안 전체 학생의 10%가 방문한 셈입니다. BETA 버전이 예상했던 기대치를 웃도는 반응을 얻은 덕분에 SSU Rank Project는 본격적인 궤도에 오르게 되었습니다.
이번 글에서는 SSU Rank Project가 어떻게 시작되었으며 앞으로를 위해 어떤 준비를 하고 있는지 이야기하고자 합니다.
아이디어의 시작은.
제가 속해있는 유어슈는 숭실대학교 학생들을 위한 온라인 서비스를 개발하는 동아리입니다. 과거에는 웹 기반 커뮤니티 yourssu.com 를 운영했고 지금은 어플 기반 커뮤니티 Ground를 운영하고 있습니다.
동아리에 들어온 후로 줄곧 어떻게 해야 학생들에게 좋은 반응과 참여를 이끌어내는 서비스를 만들 수 있을지 고민해왔습니다. 사실 에브리타임의 등장 이후 시간표, 강의평가, 학식, 게시판 등 굵직한 주요 기능들은 에브리타임 어플 하나로 해결 가능하기 때문에 후발주자로서 이를 추격하기란 쉽지 않은 일입니다.
그러나 좋은 아이템은 아직 많이 남아있습니다. 유어슈 선배 분들이 만드신 어플 Notissu는 교내 모든 공지사항을 어플 하나에서 쉽게 열람할 수 있는 기능으로 좋은 반응을 얻었습니다. 기존에는 학과별 게시판 양식이 천차만별이고 모바일 지원을 제대로 하지 않는 경우도 많아 공지사항을 모바일 환경에서 열람하는 일이 쉽지 않았는데 Notissu 어플을 통해 교내 모든 공지사항을 일관된 양식에서 쉽게 열람할 수 있도록 만든 점이 주요 포인트로 작용하지 않았나 싶습니다.
뿐만 아니라 Notissu와 같이 학교별 사정에 특화된 어플은 외부에서 쉽사리 개발에 나설 수 있는 분야는 아닙니다. 교내 학생의 경우에는 본인과 본인 근처의 사람들이 혜택을 받을 수 있는 서비스이고, 학생들이 얼마나 이를 필요로 하는지, 즉 수요에 대한 확신이 있기 때문에 해볼만한 분야입니다.
그러나 수익을 목표로 서비스를 제공하는 외부인 입장에서는 작게는 100명, 많아도 1,000명 수준의 특정 학과 학생을 위해 일일이 크롤링 스크립트를 작성해야 하고, 언제 학과 게시판 양식이 변경되어 크롤링 스크립트를 다시 작성해야 할지도 모르고, 수 많은 대학교의 모든 학과를 대상으로 이런 기능을 제공하기란 너무나도 많은 인력이 드는 일입니다. 쉽게 말해 학교의 사정에 특화된 서비스를 외부인이 개발하기란 수지타산이 맞지 않습니다.
그래서 외부인이라면 불가능하지만 교내 학생이기에 떠올릴 수 있는 숭실대학교 맞춤형 서비스를 만들게 된다면 좋은 반응을 얻을 수 있을 것이라 생각하게 되었습니다.
u-SAINT를 살펴보니.
숭실대학교는 컴퓨터로 유명하지만 막상 교내 전산 서비스들은 대부분 엉망입니다. 앞서 말한 학과별 게시판은 학과마다 양식도 제각각이며 오래전에 만들어진 탓에 모바일 지원이 제대로 되지 않는 경우가 부지기수입니다. 교내 포털인 u-SAINT 역시 마찬가지입니다. PC 환경, 그것도 IE와 어도비 플래시를 사용하는 환경에 특화되어 있어 모바일에서 접근하기란 성가신 일입니다.
강의 계획서는 OZ뷰어라는 어도비 플래시 기반 프로그램을 통해야만 볼 수 있고 어째서인지 맥에서는 플래시를 거치더라도 열람할 수가 없습니다. 학기별 성적을 열람하기 위해서는 쓰잘데기 없는 팝업 창의 손톱만한 X 아이콘을 눌러야 하며, 반응 속도도 느려 사용하는 내내 답답한 지경입니다. UI도 UX도 모두 엉망이라고 밖에 표현할 수 없습니다.
이는 동시에 우리에게 기회이기도 했으니, u-SAINT의 기능들을 보다 손쉽게 이용할 수 있도록 개선한다면 좋은 서비스가 될 것이란 확신이 들었습니다. 그래서 u-SAINT의 모든 기능을 살펴보며 좋은 아이템이 없을지 찾던 도중 '강의평가 결과조회' 탭을 발견했습니다. 매 학기 재학생을 대상으로 본인이 수강중인 강의가 어떠한지 강의평가가 이루어지고 있는데 그 결과를 보여주는 탭이었습니다.
교내 공식 강의평가는 참여 학생을 대상으로 학기 말에 1주일 먼저 본인의 성적을 조회할 수 있도록 하는 인질을 잡고 있기 때문에 학생들의 참여율이 제법 높은 편입니다. 또한 학교 측에서 적당한 보정치를 넣어 데이터를 다듬었기 때문에 많은 표본수와 꽤 괜찮은 정확도를 보장하는 편입니다. 게다가 외부인의 접근은 당연히 불가능하며 학교 학생들 조차도 이 기능이 존재하는지 잘 모르는 편입니다. 그런 이유로 이 데이터를 잘 활용한다면 괜찮은 서비스를 만들 수 있을 것이란 확신이 들었습니다.
우선 강의평가 결과조회 탭에서 제공하는 모든 데이터를 모아보기로 했습니다. 파일로 Export 해주는 기능이 있다면 좋았을텐데 당연히 없었습니다. 게다가 드래그조차 안됩니다. 그렇다면 크롤러를 제작해야 할 것 같은데 '우리가 아는 일반적인' 웹 사이트의 구조와는 크게 달라 이마저도 쉽지 않았습니다.
다행히 그 당시 함께 공모전을 준비하던 팀원 중 python으로 u-SAINT를 크롤링하는 라이브러리인 pysaint를 제작하신 인규님이 있었습니다. pysaint에는 제가 원하는 기능이 없었지만 인규님이 오래전에 겪으신 시행착오 경험을 공유해주신 덕분에 사이트 구조를 대강이나마 이해하고 크롤러를 제작할 수 있었습니다.
SSU Rank의 윤곽을 잡다.
크롤링한 결과를 엑셀에 정렬하고 보니 어떤 일을 해야할지 감이 잡히기 시작했습니다. 학교에서 제공하는 강의평가 결과는 100점 만점의 절대평가 점수입니다. 조회하는 학생 입장에서는 평균이 몇 점인지, 중간값이 얼마인지를 알 수 없어 '90점이면 높은거야 낮은거야?' 라는 의문이 생길 수 밖에 없습니다. 그러나 모든 데이터를 정렬하고 보니 얼마나 높은지, 낮은지가 한 눈에 들어오게 되었습니다.
이제 정렬 결과를 활용하기로 했습니다. 우선 각 강의가 상위 몇%에 해당하는지를 엑셀에 기록했습니다. 그리고 백분율에 따라 티어를 부여해보았습니다.
리그 오브 레전드를 해보신 분은 챔피언이 얼마나 좋고 나쁜지를 티어 개념을 통해 이야기 해보신 적 있을 겁니다. "말파이트 아직도 1티어임?" 이라던가 "트리스타나는 언제쯤 5티어를 탈출해보나." 처럼 말입니다. 티어 개념은 복잡한 수치를 단순화시켜 빠른 이해를 돕기에 매우 좋습니다. '내가 듣는 자료구조 수업은 상위 34.2%네.' 보다 '내가 듣는 자료구조 수업은 2티어네.' 가 더 간결하고 기억하기 쉽겠지요.
특히 대학교는 이미 A, B, C, D, F 라는 훌륭하고 직관적인 시스템이 존재합니다. 그래서 백분율에 따라 25%까지 A, 50%까지 B, 75%까지 C, 그 아래는 D를 부여해보았습니다. 더 나아가 각 교수별로도 여태껏 개설한 강의가 받은 점수를 평균내고, 마찬가지로 그 결과를 줄세우고 티어를 부여해보았습니다. 그랬더니 제법 괜찮은 데이터가 완성되었습니다.
그리고 이 데이터를 활용하여 강의, 교수평가 조회 서비스를 만든다면 많은 사용자를 모을 수 있을 것이란 확신이 들었습니다. 이렇게 해서 SSU Rank 서비스의 윤곽이 잡히기 시작했습니다.
개발에 들어가서.
본격적으로 프로젝트를 시작하기에 앞서 사람들의 반응을 확인 할 필요가 있습니다. 이 아이디어가 정말로 좋은 아이디어라면, 기능이 조금 모자라도 좋은 반응을 끌어낼 수 있을 것입니다. 제대로된 서비스를 만들기 위해서는 디자인도 이뻐야 하고, 보다 다양한 검색 옵션을 지원해야 하고, 사용자의 한 줄 평도 작성받아 자체 데이터 확보까지도 해야 합니다.
그러나 이 모든 일을 위해서는 저 뿐만 아니라 웹을 담당해줄 프론트엔드 개발자, 서버를 담당해줄 백엔드 개발자, 더 나아가 어플 서비스까지 이어진다면 iOS, 안드로이드 개발자까지 많은 인력과 시간, 노력이 필요합니다. 검증되지 않은 아이디어를 가지고 일을 시작하기엔 규모가 꽤나 컸습니다. 그래서 우선 최소한의 기능만으로 BETA 버전을 제작해보고, 사용자의 반응을 살핀 후 프로젝트를 시작할지 그만둘지 결정하기로 했습니다. 이러한 결정에는 유어슈를 졸업한 선배들이 해주신 조언이 크게 작용했습니다.
우선 짧은 시간 내에 빠르게 끝낼 수 있을 수준으로 BETA 버전의 기능을 확정지었습니다. 강의, 교수, 학과명 중 하나를 검색하면 검색결과의 백분율과 티어를 보여주는 것. 즉 SSU Rank 서비스의 핵심이 되는 아이디어입니다. 이 기능만으로도 좋은 반응을 얻는다면 더욱 많은 기능을 추가할 가치가 있겠지요.
이어서 아이디어 기획 단계에서 고민을 공유했던 친구에게 웹, 서버 제작에 도움을 요청했습니다. 친구는 다행히 기능이 많지 않아 금방 끝낼 수 있을 것이라고 했습니다. 아직은 아이디어 확인 단계이기 때문에 퀄리티는 생각하지 않고 빠르게 끝낼 수 있는 Flask, SQLite, 부트스트랩 조합을 선택했습니다.
친구에게 확답을 받은 후 몇 시간 정도 투자하여 Figma를 이용해 화면 프로토타입을 만들고, 필요한 아이콘과 로고 등 리소스를 제작한 후 요구사항을 워드에 정리하여 치킨 기프티콘과 함께 본격적인 작업 시작을 요청했습니다.
다행히 친구가 힘내준 덕분에 빠르게 뼈대를 잡을 수 있었습니다. 부트스트랩을 이용해 원하는 디자인과 유사하게 레이아웃을 잡은 후 저에게 확인을 요청하는 카톡이 왔습니다. 이제 디자인을 수정하고 엑셀로 정리한 결과를 DB에 넣고 검색 기능을 구현하는 일이 남았습니다.
그러나 친구가 꽤 바쁜 사람이라 이후로 시간을 내기가 힘들어져서 여기서부터는 제가 작업하게 되었습니다. 사실 학교를 3학기나 다녔지만 HTML, CSS, JS를 배우지는 않기에 웹에 관해서는 아는 것이 거의 전무했습니다. 그래도 가만히 손놓고 있을 수는 없으니 우선 넘겨받은 파일의 구조를 파악한 후 구글링 Flask, SQLite의 사용법과 기본적인 HTML, CSS, JS 문법을 익혀가며 원하는 기능을 완성시켰습니다.
AWS 계정을 만들고 EC2 인스턴스를 프리 티어로 생성하고 국내 업체에서 도메인을 구입한 후 Route 53을 통해 연결시켰습니다. 주변 사람들에게 연락을 하여 확인을 부탁했는데 잘 접속이 되는 것을 보니 모든 준비는 끝이 났습니다.
성공적인 첫 공개.
작업이 끝난 후 조회수가 어느정도 보장 될만한 오후 시간대를 노려 에브리타임에 홍보글을 작성했습니다. 대충 SSU Rank 라는 강의, 교수평가 조회 서비스의 BETA 버전을 만들었고 티어 시스템을 사용하고 있으며 여러분이 좋은 반응을 보내주시면 앞으로 더 좋은 기능으로 찾아오겠다는 내용을 넣었습니다.
원래는 실시간 인기 글에 오를 정도만 되면 성공적인 반응을 얻었다고 간주하고 프로젝트를 진행할 계획이었습니다. 그러나 생각보다 학생들의 반응이 뜨거워서 추천 수는 150을 금방 넘었고 스크랩도 200회 정도 이루어졌습니다. 그날 가장 HOT했던 글로 선정되어 에브리타임을 설치해둔 숭실대학교 학생들에게 알림까지 갔습니다.
유어슈 선배들의 조언에 따라 구글 애널리틱스도 달아두었는데 덕분에 보다 구체적으로 학생들의 반응을 관찰할 수 있었습니다. 첫 공개 후 24시간동안 1,400명이 방문했고, 최고 동시접속자는 290명, 페이지 뷰는 17,000회를 기록했습니다. 숭실대학교 학부생이 약 13,000명이므로 첫 24시간 동안 전체 학생의 10%가 방문한 셈입니다.
더 나아가 학생들이 어떤 검색어를 많이 입력하는지, 어느 학과의 학생들 사이에서 인기를 끌었는지, 모바일과 PC의 비율은 몇대 몇인지 등등 앞으로의 사이트 운영에도 크게 도움이 될만한 자료를 얻었습니다.
예상했던것 보다 좋은 반응을 끌어냈고, 앞으로의 운영을 위한 데이터도 수집했겠다 프로젝트를 본격적으로 시작하지 않을 이유가 없었습니다. 그리하여 SSU Rank Project가 본격적인 궤도에 오르게 되었습니다.
지금부터의 SSU Rank는.
첫 공개로부터 얼마 지나지 않아 유어슈 내부에서 프로젝트를 함께 할 팀원을 모집했습니다. PO(Project Owner)와 디자인은 제가 맡기로 하고, 웹은 프론트엔드 팀장인 Margarets님이, 서버는 저와 비슷한 시기에 유어슈에 들어온 Reno님과 Mike님이 맡게 되었습니다. 앱 서비스로의 전환을 위해 Andrew님과 Conor님도 팀에 함께하게 되었습니다. 첫 회의에 참석해서 열과 성을 다해 의견을 내준 Mint도 있습니다.
사실 앞으로의 계획은 1년 이상의 미래까지도 생각해두고 있지만 우선 당장은 필요한 기능부터 하나하나 준비해나가고 있습니다. 먼 미래에 어떤 식으로 서비스가 전개할 계획인지는 아직 말씀드릴 수 없지만 당장은 학기 말을 목표로 '진짜' 버전을 준비하고 있습니다.
요구사항과 디자인을 새로이 작성하였고 Margarets님이 새로운 웹 페이지를 준비하고 있으며 Mike님과 Reno님이 원활한 서비스를 위한 '제대로 된' 서버를 준비하고 있습니다. 주먹구구식이던 제 손을 떠나 제대로 된 집을 지어주실 분들이 팀에 있어 결과물을 기대하고 있습니다.
자세한 것은... 릴리즈가 되면 확인하실 수 있습니다! 그럼 그때 다시 뵙겠습니다.