Ssign.net 서버 개발기

| 2014. 11. 15. 22:51

0. Ruby on Rails

처음에는 코드라이언에서 갈고 닦은 RoR로 서버 개발을 하려고 했다. 드디어 트렌디한 기술을 사용해서 서버 개발을 할 수 있다는 기대에 부풀어 있었는데(사실 이전에도 서버단을 RoR로 개발한 적이 있긴 하지만 해당 서버 스펙이 루비를 지원하지 않아서 개발해둔 내용을 전부 되돌리고 다시 PHP로 개발한 쓰린 기억이 있다.) 모종의 이유로 루비를 사용하지 못하게 되었다. 자연스럽게 RoR도 포기를 하게 되었다. 어쩔 수 없는 선택이었다.

하지만 좋은 경험을 했다.

1. Laravel

따라서 서버 스크립트 언어는 PHP를 사용하기로 했다. 하지만 기왕 RoR를 사용하려다 못하게 된 김에 기존에 경험이 있던 코드이그나이터(CodeIgniter)는 그다지 사용하고 싶지 않았다. 그래서 나름 과감하게 이전부터 눈여겨보고 있던 차세대 PHP 프레임워크인 라라벨(Laravel)을 써보기로 했다.

여태까지 라라벨을 써본 결과, 먼저 RoR을 접한 뒤에 라라벨을 보게 되서인지는 몰라도, 라라벨은 레일스의 기능을 대부분 훌륭하게 모사한 PHP 프레임워크라는 생각이 든다. 코드이그나이터와 비교를 하자면 확실히 장단이 있다고 할 수 있다. 비유를 하자면, 코드이그나이터는 수리를 할 때 필요한 연장을 내가 직접 챙겨서 작업을 하는 느낌이고 라라벨은 만능 도구 상자를 일단 들고 가서 그 중에 필요한 도구를 써서 작업을 하는 느낌이다. 숙련된 사용자라면 코드이그나이터가 훨씬 가볍고(즉 빠르고) 능숙하게 작업을 완료할 수 있지만 초보자는 대체 어떤 도구를 가져가야 할지부터 헷갈리는 법이다. 반면 라라벨은 초보자부터 고급 사용자까지 모두 쉽게 사용할 수 있지만 기본적으로 무겁다. 비교적 간단한 작업인 경우엔 특히나 그 무거움이 두드러진다.

하지만 컴포저(Composer)를 비롯해 PHP 라이브러리, 익스텐션, 플러그인의 최신 기술을 쉽게 응용하고 싶다면 라라벨은 훌륭한 선택이다. 일단 나 같은 쪼렙 개발자가 만족했다. 쪼렙을 만족시켰다는 것은 그만큼 훌륭한 시스템이라는 것의 방증이다. 또한 라라벨이 궁극적으로 추구하고자 하는 거대한 생태계를 슬쩍이라도 들여다보면 ㅡ 라라벨은 라라캐스트라는 라라벨 강의 플랫폼과 더블넥 포지가 아닌 라라벨 포지라는 매우 강력한 서버 관리 툴을 같이 제공한다. 장사는 이렇게 하는 거구나 감탄이 나오는 대목. ㅡ 더욱 매력적인 프레임워크라 느껴질 것이다.

2. Intervention Image

Ssign.net의 핵심 기능 중 하나는 기존에 등록되어 있는 서명운동의 정보와 사용자의 정보를 추출해 서명 인증서와 간이 인증서 이미지 파일을 만들어내는 것이다. 코드이그나이터에서도 이미지 수정은 조금 건드려본 적이 있으나 라라벨 정도의 프레임워크라면 분명히 조금 더 쉽고 편한 방법으로 인증서 이미지를 만들 수 있을 것이라 생각했다. 구글링을 한 결과 인터벤션이라는 라이브러리를 찾아냈다.

인터벤션은 GD와 Imagick 라이브러리를 모두 지원하는 라이브러리로 웬만큼 복잡한 이미지 작업을 하지 않는 이상 필요한 기능을 거의 모두 지원한다. PHP에 익숙한 사용자라면 라이브러리 스펙이 지원되는 어떤 환경에서든 사용이 가능하고 라라벨의 경우엔 더욱 손쉽게 연동이 된다.

인터벤션과는 독립적으로(인터벤션 라이브러리의 한계일 가능성도 조금은 있으나 크지는 않다.) 서버단에서 이미지를 만지는 것에 이런 저런 한계가 있다는 것을 알았다. 가장 큰 제한은 역시나 텍스트와 관련된 것으로 우리가 당연하게 생각하는 워드프로세서의 글상자 기능이라든가 자간, 행간 조정 기능이 그렇게 손쉽게 구현된 것이 아니라는 것을 느낄 수 있었다. 세상에 참 쉬운 일이 하나 없다.

3. Laravel Excel

Ssign.net의 또 다른 핵심 기능은 서명운동 정보를 모아서 엑셀 파일로 추출하는 것이다. 인터벤션의 강력한 기능을 이미 체험한 바 라라벨에도 엑셀 관련 기능을 지원하는 라이브러리가 있을 것이라 확신하고 구글링을 했다. 그래서 라라벨 엑셀을 찾아냈다.

라라벨 엑셀은 PHPOffice라는 라이브러리를 라라벨에서 쉽게 사용할 수 있게 확장한 라이브러리(인 것으로 추정된)다. 이 라이브러리의 가장 핵심적인 기능은, 라라벨 고유의 블레이드(Blade) 템플릿에서 <table> 태그를 사용해서 표를 만들면 그 표의 구조를 그대로 엑셀 파일로 뽑아낼 수 있다는 것이다. 아직 고급 기능에는 한계가 있지만 이 정도면 적당한 파일을 만들어 간단한 수작업만 거쳐 쓸 만한 결과물을 만들 수 있다. 아직(?) PHP에도 미래가 있다는 것을 느낄 수 있었던 라이브러리.

그리고 우리의 미래.

4. SSL

앱 서버의 특성상 SSL을 필수적으로 갖춰야 했다. SSL 서버 구축과 관련된 이야기는 이 포스트에 꽤 자세하게 나와 있다.

5. Mailgun

썰타임 서비스를 할 때는 뉴스레터를 돌려야 했기 때문에 메일침프(MailChimp) 서비스를 사용하는 것이 편했지만 Ssign.net 서버에서는 관리자 계정으로 보내는 간단한 메일 서비스만 있으면 충분했다. 따라서 이전부터 이름을 알아왔던 메일건 서비스를 한 번 사용해봤다. 보유하고 있는 도메인의 설정을 변경해 메일건으로부터 한 번 인증을 받고 나면 꽤나 많은 양을 공짜로 이용할 수 있다.

라라벨에서는 라라벨 메일건 패키지를 이용해 더욱 쉽게 라라벨 서비스를 이용할 수 있다. 라라벨에서 설정해줄 값은 API 키가 전부다. 메일건 서비스를 이용해본 결과 역시 로그 기능이 쓸 만했다. 썰타임에서 조악하게나마 메일 로그와 트랙킹 기능을 직접 구현해본 입장으로서, 현재 개발을 막 시작한 초보 개발자들이 메일 로그 같은 것을 신경쓰지 않을 수 있다는 것은 단언컨대 행운이다.

6. Google Charts

Ssign.net은 그로스 해킹(growth hacking)이라는 마케팅 테크닉을 기반에 두고 있는 서비스다. 사실 나도 그로스 해킹이 어떤 개념인지는 잘 모르지만 외주 부탁을 받은 결과 세그멘테이션을 잘게 나눈뒤 각 세그먼트의 특성을 분석해 전략 및 전망을 내놓는 그런 비스무리한 녀석인 것 같았다. 내가 할 일은 다양한 지표로부터 그래프를 그리는 것이었다. 이전 썰타임에서 그래프 예제를 본 적이 있었으나 그 때와는 전혀 다른 그림을 그려야 했기 때문에 기초 단계부터 공부를 시작했다. 이 때 사용한 그래프 API가 구글 차트다.

팬시함은 다소 떨어지지만 차트가 갖춰야 할 기본 덕목은 충분히 갖추고 있는 라이브러리다.

7. 정리

빗버킷을 살펴본 결과 9월 20일에 첫 커밋이 올라간 Ssign.net의 백엔드 소스는 약 두 달 동안 총 271개의 커밋으로 만들어졌으며 현재 소스 크기는 12.1MB다.