“돈 내기 싫어서”…Flask로 직접 만든 지식 저장소 화제

Flask와 바닐라 자바스크립트로 만든 경량 위키 시스템으로, AES-256-GCM과 RSA-2048 혼합 암호화를 적용해 데이터베이스 파일 유출 시에도 내용을 보호합니다. 문서 공유 시 수신자의 공개키로 AES 키를 재암호화하며, SQLite를 사용해 배포가 간편합니다. 컨플루언스(Confluence) 대비 가볍고 설치가 쉬운 점이 특징입니다.

AI 요약

이 기사는 퇴사하는 동료의 업무 인수인계 자료가 분산되어 불편을 겪은 경험에서 시작해, 직접 경량 위키 시스템을 구축한 과정을 소개한다. Flask + Vanilla JS + SQLite로 구성되었으며, AES-256-GCM과 RSA-2048 하이브리드 암호화를 적용해 데이터베이스 파일이 유출되어도 문서 내용을 읽을 수 없도록 설계했다. Confluence나 MediaWiki 같은 기존 솔루션이 무겁고 배포가 복잡하며 데이터 암호화와 세밀한 권한 제어가 부족하다는 문제를 해결하기 위해 직접 개발했다. 사용자별 RSA 키 쌍을 생성하고, 문서 공유 시 수신자의 공개키로 AES 키를 재암호화하는 방식으로 세분화된 접근 권한을 구현했다.

핵심 포인트

  • Flask + SQLAlchemy + SQLite로 구성, 단일 app.py 파일로 실행 가능하며 추가 인프라 불필요
  • AES-256-GCM으로 문서 내용을 암호화하고, RSA-2048로 AES 키를 다시 암호화하는 하이브리드 방식 채택
  • 문서 제목과 디렉토리 구조는 암호화하지 않고, 본문(content)만 암호화하여 트리 렌더링 가능
  • 문서 공유 시 수신자의 RSA 공개키로 AES 키를 재암호화하고, 권한 회수는 NodePermission 레코드 삭제로 처리

향후 전망

  • 경량 배포 + 콘텐츠 암호화 + 세분화된 권한 제어를 동시에 만족하는 내부 도구 수요가 증가할 것
  • SQLite의 동시 쓰기 한계는 WAL 모드로 대응 가능하며, 확장이 필요하면 PostgreSQL로 전환 가능
Share

이것도 읽어보세요

댓글

이 소식에 대한 의견을 자유롭게 남겨주세요.

댓글 (0)

불러오는 중...