합정 프로젝트와 인디스쿨 통합검색 cover image

합정 프로젝트와 인디스쿨 통합검색

김재동 • June 30, 2019

indischool laravel

얼마 전 세르보(cerveau) 프로젝트에 대해 글을 쓴 적이 있다. 세르보는 인디스쿨의 새 버전을 직접 Laravel 기반으로 개발하는 프로젝트이다. 우리에게 필요한 모든 기능을 빠르게 만들고 AWS에서 사용하고 있는 인프라 환경에 최적화하는 것이 목표이다.

하지만 처음부터 모든 것을 하나씩 쌓아 올려야 하기 때문에 시간도 오래 걸리고 부담이 많이 되는 것이 사실이다. 지금은 이 프로젝트를 위해서 개발보다는 연구에 더 많은 에너지를 쏟고 있다.

그러던 와중에 선생님들의 요청을 많이 받았던 첨부파일 일괄 다운로드 기능 개발과 통합검색 개편 작업을 동시에 진행하게 되었다. 그리고 개발 플랫폼은 당연히 현재 연구를 많이 하는 Laravel로 정했다. 그러다 보니 이미 인디스쿨의 XE와 연동되어 돌아가는 인증센터 외에도 통합검색, 일괄 다운로드 등 Laravel 기반 서비스만 3개로 늘어나게 되었다.

그러다 문득 '이걸 다 하나로 합치면 어떨까?' 하는 생각이 들었다. Laravel은 업데이트 주기가 빠르기도 하고 특히 Breaking Change가 발생하는 버전 업데이트 때는 나름 신경도 많이 써야 한다. 게다가 모델, 레이아웃, 디자인 등도 많이 중복되기 때문에 이것을 각각 유지하는 것은 비합리적이다. 또 인증센터 외에는 실제로 운영하는 서비스가 없기 때문에 프로덕션 단계로 공개하기 전에 미리 합치면 더 좋을 것 같았다.

이렇게 Laravel 앱들을 하나로 합치는 프로젝트에 이름을 붙이면 더 재미있을 것 같아 고민하기 시작했다. 예전에 인디스쿨이 IDC에서 서버를 운영할 때는 구매한 순서대로 영문 알파벳순으로 시작하는 과일이나 음식 이름을 붙였었다. Apple, Banana, Cherry, Dewberry, Espresso, Fig, Grape, Hotdog, Icecream, Jelly, Kiwi, Lemon, Macadamia, Nutella, Olive. 그리고 마지막에는 Pineapple이었다. MacOS는 예전에 고양잇과 동물 이름을 붙이다가 최근에는 본사가 있는 샌프란시스코 주변의 공원이나 동네 이름을 붙인다. 그러다 이 프로젝트 이름을 인디스쿨 공간이 있는 '합정'이라고 지으면 어떨까 하는 생각이 떠올랐다. 부랴부랴 '합정'이라는 이름에 어떤 유래가 있는지 찾아봤다.

합정동 위키 문서를 찾아보니 현재 합정동 일대가 예전 양화나루 부근의 마을이었는데 '조개 우물'이라고 불리는 우물이 있어 '합정'이라는 이름을 사용하게 되었다고 나왔다. '조개 합'자에 '우물 정'자라니 생각지도 못한 조합이었다. '조개 우물'이라는 뜻을 그대로 쓸 수는 없으니 한자를 좀 바꿔 '바르게 합친다'는 의미로 합정(合正)을 생각해봤다. 여러 개의 Laravel 앱을 바르게 합쳐야 하는 프로젝트니까.

합정 프로젝트는 단순히 세 가지 역할을 하는 Laravel 앱을 하나로 합치는 데 그치지 않는다. 현재 인디스쿨의 DB 구조를 그대로 이용하면서도 이미 사용 중이거나 새롭게 필요한 여러 기능을 Laravel에서 구현해서 세르보 프로젝트로 가기 전 가교 구실을 하게 될 것이다. 예를 들어 회원 가입, 첨부파일 업로드/다운로드, 게시판, 알림센터 등의 기능을 합정 프로젝트를 통해 구현할 수 있다. 이렇게 하면 세르보로 넘어가기가 훨씬 수월하다.

합정 프로젝트의 첫 번째 도전 과제는 통합검색 개선이다. 통합검색은 2015년에 처음 선보인 이후 최근까지도 XE의 통합검색 모듈을 약간 수정해서 사용하고 있었다. 사실 모듈보다도 Elasticsearch 인덱스를 바르게 생성하는 것이 핵심적인 일이었다. 개발 이후 우여곡절을 겪으면서 잠시 서비스를 중단했던 적도 있었는데 인디스쿨 서버를 AWS로 이전한 직후 복구했다.

그런데 복구를 하는 시점에 우리의 백앤드 언어 중 하나인 PHP의 버전을 5.6에서 7.1로 업그레이드 했고 이 때문에 기존의 통합검색은 쓸 수가 없는 상황이 되었다. 통합검색을 되살리기 위해서는 Elasticsearch도 버전을 올려서 마이그레이션을 해야 했는데 그 사이에 검색 쿼리를 호출하는 방식이나 DB에서 Elasticsearch로 데이터를 인덱싱하는 작업에도 큰 변화가 있었다. 서버 이전과 함께 동시에 많은 일을 진행하다 보니 통합검색에만 집중할 수가 없었는데 그게 화근이었다. 이후 공개된 통합검색은 검색어의 형태소를 분리하지 않고 검색을 했고 또 검색어의 앞부분이 반드시 일치해야 검색 결과에 나오도록 설정되었기 때문에 검색어에 조사가 붙거나 띄어쓰기가 다르면 검색 결과에 포함되지 않거나 전혀 다른 검색 결과가 나오는 등의 문제가 있었다.

그러다 지난 6월, AWS 이전 1주년 기념 설문조사를 하면서 건의사항을 받았는데 그중에서도 통합검색을 개선하는 것이 선생님들의 가장 큰 요구사항 중 하나라는 것을 알게 되었다. (자세한 내용은 통계로 살펴보는 인디스쿨 - AWS 이전 1주년을 기념하며 참조) 통합검색이 좀 불편하다는 것은 알고 있었지만, 이 정도로 많은 선생님이 개선을 요구하는지는 몰랐다. 그래서 이번 기회에 뿌리를 뽑고자 Elasticsearch에 대해 연구도 하면서 본격적으로 개발에 착수하였다. 이 과정에서 얼마 전 우연히 온라인에서 다시 만나 뵙게 된 고등학교 컴퓨터 동아리 선배님 - 지금은 카카오에서 근무 중인 - 의 도움도 받았다.

첫 삽을 뜬지 채 2주가 되지 않아 새로운 통합검색을 오픈하게 되었다🎉 '이럴 거면 진작 하지'라고 생각할 수도 있겠으나 그동안 정말 열심히 피땀 흘려 함께 연구하며 내공을 쌓은 덕분에 이렇게 금방 마무리할 수 있었다고 생각한다.

눈치가 빠르거나 컴퓨터에 관심이 있는 분이라면 통합검색을 할 때의 URL이 hapjeong.indischool.com이라는 것을 발견하였을 것이다. 이 주소로 접속을 해보면 우리(?)의 결연한 의지가 나타난다고 한다. 합정 프로젝트의 다음 목표는 '첨부파일 일괄 다운로드' 개발이다. 우리의 결연한 의지처럼 인디스쿨은 계속 앞으로 나아갈 것이다.