Yaong

Written by a cat

내가 생각하는 개인 문서 도구의 조건이 문서의 형태로 정리되자, 내가 원하는 조건에 완전히 부합되는 도구가 없다는 사실이 아쉬웠다. 그래서 공휴일과 주말 사이의 이틀에 휴가를 쓰고 내가 원하는 웹노트 서비스 를 만들어보기로 했다.

기능

기본 컨셉은 DokuWiki와 Lektor의 구조적 장점을 한데 모으는 것.

  • Python
  • 마크다운 포맷
  • 문서는 파일로 저장
  • 내부 링크 지원
  • 문서 권한 설정
  • 로그인
  • 편집

Python

Flask 프레임워크를 기반으로, Python 3으로 작성한다.

마크다운 포맷

Python-markdown을 사용한다. 확장 기능들도 많아 마크다운 관련해서 구현할 건 따로 없었다.

문서는 파일로 저장.

구체적으로 <표제어>.md 형식으로 저장한다.

Lektor는 컨텐츠는 마크다운으로 작성하지만, 작성일 등 문서의 메타 정보를 하나로 묶어 .lr 이라는 확장자로 저장한다. 모바일 기기의 노트 앱들은 .md 확장자만 지원하기 때문에 열어볼 수 없어 답답했다.

내부 링크 지원

Python-markdown에 있는 WikiLinks 확장을 사용한다. 이유는 모르겠지만 링크 경로 안에 / 가 있으면 내부 링크로 인식을 하지 않아 이 부분은 오버라이드하였다.

내부 링크

문서 권한 설정

공개-비공개 설정은 기본. Google Docs의 링크를 가진 사용자에게 공유하는 기능을 만들어보고 싶었다. 어떻게 할까 고민하다가 문서의 경로를 AES로 암호화해서 사용하면 되지 않을까 생각했다. 시험삼아 암호화해보니 44글자가 나왔고, 혹시나 해서 Google Docs 문서 ID의 글자수도 세어보니 딱 44자였다. 정답이구나 하며 그렇게 작업했다.

링크를 가진 사용자에게 공유

로그인

웹에서 문서를 작성하거나, 혹은 공개 설정을 변경하려면 로그인 기능이 필요하다. 암호를 어떻게 저장할까 하는 부분이 고민이었다. 사용자 암호는 평문으로 저장하면 안되고, 그러면서 해독하는 게 불가능해야 한다. 찾아보니 SHA-256이라는 게 있어서 사용했다.

편집

문서는 대부분 마크다운 에디터로 작성하기에, 웹에 편집기 붙히는 비용이 크면 안하려고 했다. 그런데 SimpleMDE라는 잘 만든 에디터가 있어서 금방 붙힐 수 있었다. 다만 모바일 기기에서 한글을 입력할 때 글자가 씹히는 문제가 있기는 하다.

편집기

다루지 않은 기능들

당장 혹은 아예 필요하지 않은 것들.

  • 버전 관리 : 실수로 날렸을 때 복구하는 것 이상의 기능은 필요없더라.
  • 멀티 사용자 : 혼자 쓸 거라 만들지 않았다.1
  • 검색 : 문서가 많아지면 고민하자.

디자인

현재 블로그를 만들 때 가독성에 대한 고민을 충분히 했으므로 대부분 그대로 가져왔다. CSS에서 구린 부분을 수정하거나, 스크립트로 개선하는 정도. 하지만 개인 프로젝트에서 작은 것이라도 새로운 시도를 안하는 것은 심심한 일이라 아래와 같은 것들을 해보았다.

아이콘

아이콘은 .svg 포맷을 사용해보았다. 아이콘은 보통 Github이나 Dribbble에서 디자인이 괜찮고 저작권이 자유로운2 아이콘 세트에서 선택한다. 아이콘 세트에 원하는 아이콘이 없는 경우 스타일에 맞추어 직접 만들어 사용하는데, 포토샵은 .svg 포맷을 다루지 못한다는 문제에 닥쳤다. 덕분에 잉크스케이프 라는 새로운 도구를 써볼 수 있었다.

테마

설정파일에서 테마이름을 변경하는 식으로 디자인을 바꿀 수 있도록 하였다. 그런데 만들고 보니 오버스펙인 것 같다는 생각이 들었다. DokuWiki 템플릿 개발자로서의 괜한 욕심이었달까.

소감

얼마나 쓸 지는 모르겠지만 만드는 과정이 재미있었다. 좀 더 구체적으로는 서비스를 기획하고, 이 기능을 만들려면 어떻게 해야할까 고민하는 과정이 수수께끼를 풀어나가는 느낌이었달까. 충분히 보람찬 휴가라고 말할 수 있을 정도.

얼마나 쓸 지 모르겠다고 하는 이유는 내가 만든 서비스의 보안은 신뢰할 수 없기 때문이다. 기능이 내게 딱 맞아도 보안에 신뢰도가 없으면 중요 정보를 기록하기는 어려울 것이다. 다 만들고나서야 이 부분을 깨닫고 진하게 현자타임을 느꼈달까.

그래도 기왕 만들었으니 위키와 블로그를 통합하는 정도로 시작해보는 건 나쁘지 않을 것 같다.

https://github.com/ipari/ipari-note


  1. 그래서 이름도 위키에서 노트로 바꾸었다.

  2. 저작자 미표시, 수정 및 재배포 가능