블로그 툴 이사
블로그를 개편했다. 아니 정확히는 블로그 툴을 바꿨다는게 맞는것 같다. 블로그에 대한 나의 편력(?)은 대단한 편이다. 처음에 테터툴즈로 시작했고, 티스토리, 네이버를 거쳐서 워드프레스(Startig wordpress) 그리고 ghost까지. 그리고 지금은 직접 개발하고 있는 블로그 툴을 사용하고 있다.
ghost를 사용하면서
개인적으로 ghost를 사용한 이유는 마크다운으로 포스트를 작성하기 위해서였다. 확실히 ghost 는 세련된 마크다운 편집기 툴을 제공하고 있고 잘 쓰고 있었다.
그러나, 조금 느리다고 생각했고, node.js 기반이라서 설치형을 사용했는데, 연관 포스트나 추천 포스트 같은 기능을 구현하기에는 node.js 를 내가 잘 하지를 못했다. 그래서 python으로 별도의 API를 만들고 ghost의 테마 부분에서 호출해서 사용하는 식으로 진행하기도 했다. 또한, 업데이트가 설치형이라는 점에서 할 때마다 어려웠던 것 같다.
새로운 블로그 툴
아직 공개하기는 미숙하고 계속 개발하고 있는 상태이지만, 기본적으로 ghost의 데이터베이스 구조에서 최소한의 부분만 가져와서 구현을 진행했다. 멀티유저나 백업 시스템 등등 고도화될 기능들이 있지만, 개인적으로 필요에 의해서 개발을 하는 부분이기 때문에 딱 2개, 포스트 리스트를 보여주고, 개별 포스트를 보여주는 기능에 집중했다. 그 과정에서 테마가 있어야 겠다는 생각을 하였고, 테마를 어떻게 배치하고 어떻게 등록할지 정하게 되었다.
블로그 파트는 일단 글을 보는 부분에 집중했고, admin 파트는 contents, writer, settings 이렇게 일단 3개로 시작했다. 이 역시 블로그의 리스트와 상세 포스트에 집중해서 생긴 메뉴들이었다. contents 에서는 예전부터 draft(작성중인 글들)만 따로 볼 수 있는 테이블과 발행된 글을 볼 수 있는 테이블을 따로 보여줬다. writer는 마크다운 기반으로 작성할 수 있게 하고 쓰는 대로 우측에 preview 가 보이도록 구성을 했다. settings에서는 블로그 이름이나 설명 그리고 테마를 지정하는 부분을 개발을 했다. 현재 사용하는 theme 는 ghost의 casper테마를 커스텀해서 jinja2 template 를 적용해서 사용하고 있다.
개발을하면서 개발해야 할 것들이 점점 늘어났다. 기본적인 블로그가 가지고 있어야 할 것들이 생각이 났다. RSS 라던지, 기존의 ghost에 있었던 post가 아닌 개별 page형태의 포스트들은 어떻게 할 것인지, 그리고 ghost를 사용하고 있었는데 어떤 게 데이터를 옮길 것 인지 등등. 그래서 위의 기능들을 추가했고 별도의 ghost에서 데이터를 가져와서 새 시스템에 넣는 커맨드 툴을 만들기도 하였다.
기술적인 부분
새로운 건 없었다. python3.6+flask+sqlalchemy 조합으로 기본 구성을 했고, db는 mysql을 사용을 했다. 어차피 db 는 다양하게 변경을 차후에는 지원할 수 있어야 한다고 생각을 했다. ghost 에서의 기능 변경에 대한 답답함을 해소하고, 부족한 부분이나 개선할 부분이 있다면 언제든지 수정할 수 있어야 한다는게 가장 큰 원칙이었고 그래서 제일 잘 아는 기술을 선택 했다. 웹서버는 nginx+gunicorn 의 조합으로 구성해두었다.
blog 테마쪽은 어차피 jinja2 template 문법을 기본으로 하지만, 테마를 만들어 쓰는 사람이 프론트엔드 쪽은 마음대로 선택할 수 있다고 생각을 했다. admin 은 기본적으로 vue-js 과 jquery 를 이용해서 작업을 했고, tui-grid 를 이용해서 포스트리스트를 구현했다. 마크다운 에디터는 vue-js 튜토리얼에 있는 것을 가져와서 사용했다.
소회
기술적인 부분이라고 할 것은 별로 없다. 중요한 건 이제 내 블로그에 대해서 처음부터 끝까지 어떻게 동작되고 있다는 것을 알게 되었다는 점, 그리고 어디를 더 개선하고, 원하는 어떤 기능을 더 넣을 수 있다는 점이 좋다. 자유로워진 느낌이라고 해야할 것 같다. 이 글을 쓰면서도 계속 불편한 혹은 필요한 몇 개의 기능들을 개발하기도 했다. 여전히 더 부족한 기능들은 계속 개발해 나갈 예정이고 만족할 만한 어느 정도의 수준이 되었을 때 공개할 예정이다.