포스트

숭덕고 갤러리를 되돌아보며

작년 어느 순간 등장한 대한민국 정부의 청원 페이지는 큰 반향을 일으켰습니다. 그 아이디어가 꽤나 인상깊었는지 많은 곳에서 비슷한 페이지를 벤치마킹하려던 걸 기억합니다.
그리고 숭덕고등학교 학생회 역시 청원 페이지 도입을 공약으로 걸었던 김기호 선배님의 당선으로 같은 시도를 시작하게 됩니다.

프로젝트 시작

구성이 마무리되고 새로 출범한 학생회에는 청원 페이지를 개발할 수 있는 구성원이 없었습니다. 학생회에선 제가 부장으로 있는 IT 동아리, ‘404 컴퓨터 못 찾음’에 일을 의로하는 형태로 개발을 요청했습니다.

후에 숭덕고 갤러리로 명명된 청원 페이지는 Flask 프레임워크와 bulma 스타일 프레임워크를 기반으로 작성되었습니다. 가장 잘 알고 있는 웹사이트 구현 방안이 오픈나무 프로젝트를 통해 배운 Flask 뿐이었으므로 처음부터 다른 선택지는 고려하지 않았습니다.

OAuth 2

페이지 개발 중 가장 힘겨운 파트가 바로 OAuth 2 였습니다. 기본적으로 게시물은 익명으로 공개하더라도 작성자는 내부적으로 확실히 특정할 필요가 있었습니다.
오픈나무의 회원가입/로그인 방식은 페이지의 접근성을 지나치게 떨어뜨렸습니다. 그리고 사이트 내 계정과 실제 인물의 동일성도 보장할 수 없었습니다. 즉 자기신고제 느낌의 회원가입은 다른 학생 이름으로 가입하는 경우를 적절히 차단해낼 수 없었습니다.

숭덕고 갤러리 개발 이전엔 OAuth 2 키 교환 방식이나 로그인 처리 방식에 대해 아는 내용이 없었으므로 OAuth 로그인 처리를 구현하는 과정은 어렵고 더뎠습니다.
일단 OAuth 2 최초 로그인 과정에 대해선 구현을 마무리하고 예제를 별도의 레포에 공개했지만 갱신 과정은 개념이나 구현 내용을 아직 제대로 이해하지 못해 이번 프로젝트 중에는 제외했습니다.

관리 패널의 개발

청원 페이지는 기본적으로 익명 게시판과 다름없으므로 일반 사용자용 기능은 어렵지 않게 구현할 수 있었습니다.
하지만 관리 기능의 개발은 예상 가능한 모든 시나리오에 대해 대비해서 그런지 소모적이었습니다.
그 어떤 커뮤니티든 게시판에는 목적에 맞는 게시물만 작성되지 않습니다. 이 페이지 역시 목적대로만 사용될 것이란 기대는 너무 희망적인 생각입니다.
관리자가 저 뿐 아니라 학생회 인원도 투입될 계획이었으므로 호스트 서버 콘솔에 접근하지 않고도 관리 기능을 간편히 사용할 수 있어야 했습니다.

고가용성 보장

어느 이유에서인지 서버 프로세스는 실행한지 이틀/사흘이 지나면 소리 소문 없이 종료되곤 했습니다. 서버를 nohup으로 실행하고 있었고, 별도의 로그 프로그램을 사용하거나 로그 설정을 걸어놓은 것이 아니므로 파이썬을 통해 오류 메시지가 출력되거나 시스템 로그에 상황이 기록되지 않는 이상 구체적인 상황을 파악할 길이 없습니다.

이전에 작은 용량의 메모리를 가지고 있는 시스템 위에서 마인크래프트 서버를 운영하다 OOM Killer에게 프로세스가 종료되는 것을 목격하였으므로 제대로 상황을 파악하기 이전에 라즈베리 파이에서 pythonanywhere로 서버를 옮겨보았습니다. 그리고 아직까지 서비스가 마비된 것을 확인하지 못했습니다.

좌초

일련의 개발 과정이 어느정도 모양새를 갖춰갈 때 쯤 사이트의 운영 허락과 운영 방안을 이야기하기 위해 학생회와 함께 면담을 했습니다.
그리고 “학생들의 불만 사항은 학생회를 통해 전달하면 되지 *공개적으로* *무책임하게* 불만을 올릴 수 있는 사이트를 운영하는 것이 좋아보이진 않는다”며 면담 시작과 동시에 사이트 운영을 반려당했습니다.

반박할 여지도 설명할 여지도 많은 여지도 말씀이셨고, 긍정적인 방향으로 이야기를 이끌어가는데 힘을 쏟을 수 있었을 것입니다. 하지만 이미 일련의 개발 과정과 학생회와의 조율, 다른 교내 활동으로 소모가 큰 상황에서 거부 입장을 처음부터 굳히신 듯한 분을 설득할 체력이 제게 남아있지 않았습니다.
사이트의 운영 방안, 프로젝트 수정/발전 방안에 대해 논의할 수 있는 자리를 기대했지만 정작 그 자리엔 미리 준비된 이야기가 단 하나조차 없었습니다. 그리고 그 사실은 저를 지치게 했습니다. 프로젝트는 그대로 종료되었습니다.

마무리

다소 아쉽긴 하지만 저 역시 개발을 거듭하며 프로젝트에 회의가 들었으니 프로젝트를 접을 수 있는 좋은 타이밍에 잘 마무리된 것 같기도 합니다.

프로젝트는 종료되었지만 얻어간 것도 꽤 있었습니다.
이렇게 긴 기간 동안 단일 프로젝트를 수행한 경험도 없었고 납품의 형태로 코드를 작성해서 타인에게 제시한 적도 없었습니다.
파일 하나 하나가 수천 줄에 달하는 것을 보며 모듈화의 필요성이나 코드 스타일의 정립, 디자인 패턴의 도입에 대해 깊게 고민해보는 계기가 되었습니다. 아마 이번 프로젝트가 없었다면 얻지 못한 생각들이었을 것입니다.