프로젝트 제목✏️ 기획 배경 및 동기📃 이 기획이 나오게 된 배경🗒️ 스토리 보드 (시나리오)📚 기능 구현 (요구 리스트)💾 백엔드 기본 기능 예상🤔 어떤 Feature를 추가할 수 있을까?지난 회의때 나온 내용들
프로젝트 제목
위키 엔진을 만들자!
✏️ 기획 배경 및 동기
초기 기획서 내용
기록의 중요성, 최근에 정말 많이 듣고 있는 말이다. 개발자는 개발문서나 자신이 공부하는 내용들을 정리한다. 개발자가 아니더라도 사람들은 저마다의 업무를 위해, 아니면 일상생활이나 취미생활 또는 자신의 공부를 위해 기록을 한다.
이러한 기록의 양이 적고, 내용이 짧고 단순할 때에는 로컬 폴더에 텍스트파일로 관리하는 정도로도 충분했을 수 있다. 하지만 기록이 쌓여갈수록, 내용이 길고 복잡해질수록 기록을 더욱더 체계적으로 관리할 필요성이 커진다. 때문에 사람들은 에버노트, 노션, 컨플루언스, 베어, 업노트, 심플노트, 원노트, 데본씽크 등등 다양한 노트 앱을 사용해서 자신만의 기록을 더 세심하게 관리하려 한다. 여기서 한 발자국 더 나아가 이런 툴을 자신만의 개인 위키처럼 꾸미거나, 도쿠위키나 미디어위키같은 개인(또는 소규모)용 위키를 도입하려는 사람들도 있다.
그런데 나의 기록을 정리하기 위해 이런 툴들 중 하나를 선택하자니 마음에 꼭 드는 툴을 찾기가 어렵다. 어떤 툴들은 보안이슈, 동기화 문제, 유지 비용(구독 비용), 업로드 용량 제한, 사생활 침해(데이터 유출), 사용 가능한 포맷 제한 등 사용하기 꺼려지는 문제가 있다. 또 어떤 툴들은 디자인이나 지원 기능 측면에서 내가 좋아하거나 필요로 하는 기능이 빠져있다.
내 마음에 쏙 드는 기능과 디자인들만 쏙쏙 골라 나만의 위키를 만들수는 없을까? 보안이슈, 용량제한, 비용문제에서 자유로운 나만의 위키를 만들수는 없을까?
📃 이 기획이 나오게 된 배경
이 기획을 하게 된 데에는 평소에 아래와 같은 생각이 주요 요인이 되었다.
- 작게는 개인 노트앱, 크게는 개인 위키를 구축하고 개인적인 온갖 정보들을 정리하고 싶다.
- 시중에 출시된 노트앱이나 self-hosting이 가능한 앱들중 나의 필요성을 꼭 맞게 충족시켜주는 앱이 존재하지 않았다.
Notion
- 나의 필요를 충족하는 점
- 마크다운 기반 문서 작성이 가능하다.
- 문서 변경 이력을 볼 수 있으며, 특정 시점으로의 복원도 가능하다.
- 내가 원할 경우 문서의 public 공개가 가능하다.
- 내가 원할 경우 다양한 사람이 문서 편집에 참여할 수 있다.
- Editor와 Preview가 합쳐져 있다.
- 나의 필요를 충족하지 못하는 점
- 인터넷 연결이 필수
- 내 데이터들을 내가 가지고 있다는 생각이 잘 들지 않는다.
- 보안 이슈
- 내부 관계자들이 내 문서들을 몰래 열람하는것이 가능하다.
- 내가 업로드한 첨부파일이 유출될 수 있다. (참고링크)
- 선택 가능한 테마의 종류가 라이트, 다크 단 두 종류 뿐이다.
- 폰트 선택이 굉장히 제한적이다.
- 태그 기능이 없다.
Bear
- 나의 필요를 충족하는 점
- 마크다운 기반 문서 작성이 가능하다.
- 테마가 미니멀하면서도 꼭 필요한 포인트는 잘 잡아주어 이쁘다.
- 다양한 테마 선택이 가능하다.
- 보안 이슈 걱정이 없다. (iCloud를 통한 Sync)
- 인터넷 연결이 되지 않더라도 이용이 가능하다.
- Notion 보다 많은 폰트를 선택할 수 있다.
- Editor와 Preview가 합쳐져 있다.
- 태그 기능을 이용할 수 있다.
- 나의 필요를 충족하지 못하는 점
- 문서 변경 이력을 볼 수 없으며, 특정 시점으로의 복원이 불가능하다.
- 문서를 바로 public 공개할 수 없다.
- 다른 사람과 문서 내용을 공유하거나 같이 편집하는 활동을 할 수 없다.
Obsidian (링크)
- 나의 필요를 충족하는 점
- 마크다운 기반 문서 작성이 가능하다.
- 폰트을 내가 원하는대로 지정할 수 있다.
- 보안 이슈 걱정이 없다. (모든 파일은 Local에 md 파일로 작성되며, vscode처럼 이 파일들을 관리한다.)
- 인터넷 연결이 되지 않더라도 이용이 가능하다.
- 문서 변경 이력을 관리할 수 있으며, 복원도 가능하다.
- 태그 기능을 이용할 수 있다.
다양한 테마를 선택할 수 있으며, css 파일 값을 수정하여 직접 테마를 커스텀할 수도 있다.


- 나의 필요를 충족하지 못하는 점
- Editor와 Preview가 분리되어 있다.
- 문서를 public 공개할 수 없다.
- 다른 사람과 같이 문서를 편집할 수 없다. (Dropbox 등의 앱을 통해 공유된 디렉토리를 이용하는 경우에만 가능. 즉, 다른 앱의 기능을 사용해야 함)
Media Wiki (링크)
- 나의 필요를 충족하는 점
- 문서 변경 이력을 볼 수 있으며, 특정 시점으로의 복원이 가능하다.
- public 공개가 가능하다.
- 단, 문서별 공개는 아닌 듯 하다.
- 다양한 사람이 문서 편집에 참여하게 할 수 있다.
- Docker image가 있기 때문에 self-hosting이 가능하다.
- 보안 이슈가 없다.
- 인터넷 연결이 되지 않더라도, 로컬에서 돌리면 연결이 가능하다.
- 나의 필요를 충족하지 못하는 점
- 마크다운 기반이 아니다. (위키피디아와 같다)
- 다양한 테마 선택이 불가능하다.
그래서 내렸던 해결책은 아래와 같았다.
- Docker로 돌린다.
로컬에서 서버가 돌아가는 것이므로 인터넷 연결 없이 이용할 수 있다.- self-hosting 이므로 다른 사람이 내 문서를 마음대로 열람하거나, 내 문서 및 첨부파일이 외부에 유출될 걱정이 없다.
- 내가 원할 경우 NAS나 별도의 클라우드에 올려 조금 더 public하게 사용하는 것도 가능하다.
- 나의 모든 데이터를 명확하게 내가 가지고 있을 수 있다.
→ 서비스라는 틀에 맞지 않는 것 같다.
→ 원버튼으로 설치 및 호스팅까지 바로 가능할 정도가 아니면 어려워 보인다.
- Obsidian의 방법을 참고하여 테마와 폰트를 커스텀할 수 있게 하자.
- 가능하다면 Editor와 Preview의 구분
- 기준을 두 가지를 잡을 수 있다. 하나는 Notion 처럼, 다른 하나는 Bear 처럼.
- Notion
- 편집중인 게시글도 Preview에 가깝게 나타난다.
- Bear
- 편집중인 게시글과 export한 후 보이는 게시글의 모습이 다르다.
- 개인적으로는 아래의 좌측 열 이미지처럼 글을 작성중일 때(편집 중일 때)에는 Bear나 Obsidian의 editor 같은 화면을 선호한다.
- 글 작성을 완료한 뒤(읽기 모드)에는 아래 우측 열 이미지처럼 Preview에 가까운 화면을 선호한다.




🗒️ 스토리 보드 (시나리오)
초기 기획서 내용
평소에 독서를 굉장히 즐기는 A씨. 읽은 책이 늘어갈수록 예전에 읽었던 책이 가물가물하고 잘 기억나지 않는다. 그동안에는 읽은 책을 다이어리에 펜으로 써서 정리하거나, 블로그, 메모 앱, 온라인 커뮤니티 게시글로 여기저기에 작성해 두어서 내용을 찾기도 어렵고, 몇몇 앱이나 커뮤니티는 서비스를 종료해버려서 더이상 그 때 작성했던 글을 찾을 수 조차 없게 되었다. 그래서 이제부터 독서 후에 내용과 감상을 한곳에 깔끔하고 체계적으로 정리해 두려고 한다. A씨는 자신에게 필요한 정보들을 정리 해 보았다.
- 기록을 많이 하는 기간도 있고, 거의 하지 못하는 기간도 있다. 그래서 별도로 구독까지 해야하는 앱은 사용하고 싶지 않다.
- A씨는 여행을 좋아한다. 기차, 배, 비행기, 버스를 타고다니며 책을 읽고 정리하는 경우도 많다. 그래서 인터넷이 연결되어야만 동작하는 앱은 사용할 수 없다.
- 갑자기 가격정책을 변경해버려서, 그동안 쌓인 데이터를 외부로 전부 옮길 때 까지는 울며 겨자먹기로 비용을 지불해야하는 상황도 피하고 싶다.
- 여행지에서 정리할 때에는 그곳에서 찍은 사진이나 동영상도 용량 제한 없이 첨부하고 싶다.
- 복잡한 문법 없이 마크다운처럼 간단한 문법으로 이쁘게 글을 작성하고 싶다. 디자인도 투박하지 않고 미니멀하고 이쁜 앱을 사용하고 싶다.
- 외부에 유출, 노출될 걱정 없이 글을 쓰고 싶다. 하지만 가끔씩은 다른 사람과 공유도 하고 같이 편집도 하고싶다.
그래서 A씨는 OO위키를 사용하기로 했다. 그 이유는…
- Docker Image로 배포되었기 때문에 다운로드 받아서 실행만 시키면 로컬에서 직접 돌릴 수 있다. 그래서 별도의 비용도 들지 않고, 인터넷이 연결되지 않아도 사용이 가능하다.
- A씨가 본인의 컴퓨터로 직접 돌리고 직접 이용하는 것이기 때문에 운영정책이나 가격정책 변동의 영향을 받지 않는다.
- 한 문서에 첨부할 수 있는 용량 제한을 직접 설정할 수 있다.
- 포트포워딩을 통해 외부에 포트를 열어놓지만 않는다면면 데이터 유출, 노출의 위험을 없앨 수 있다. 하지만 A씨가 원할 때에는 언제든 접근권한 설정과 포트포워딩을 통해 외부에서 접근할 방법을 열어줌으로써 공유, 편집을 같이 할 수도 있다.
A씨는 OO위키를 사용해본 뒤, 이번에는 private한 개인 기록이 아니라 public한 블로그처럼 사용해 보기로 했다. 그래서 A씨는 새로 구성한 NAS에 OO위키 컨테이너를 띄우고 외부에서 접속이 가능하도록 설정을 마쳤다. 이제 원하는 주제별로 대분류를 나누고 글을 작성하기만 하면 된다. 독서, 여행, 게임, 공부, 수집, 취미… 작성하고 싶은 글들이 너무나도 많다. 만약 마음이 잘 맞는 사람이 있다면 접근권한을 조정해서 커뮤니티나 소규모 위키처럼 쓸 수도 있을 것이다. 만일 접속자가 많아진다면 AWS에 옮겨서 돌릴 생각이다.
📚 기능 구현 (요구 리스트)
- 최초 실행시 Admin 등록을 한다. Admin이 등록된 이후부터 새로운 유저들의 가입 신청이 가능하다. 가입 신청 처리는 Admin이 직접 하거나, Admin으로부터 해당 권한을 받은 사람만이 가능하다. 회원가입은 ID와 비밀번호만을 요구한다. 필요하다면 이메일을 등록 해 놓고 특정 문서에 변경사항이 생길 때 마다 알림을 받을 수도 있다.
- 회원가입, 로그인, 로그아웃, 회원 탈퇴, 비밀번호 찾기 기능
- 이메일 인증, 이메일 알림 기능
- (Admin) 회원 가입 요청 수락, 회원 권한 조정, 회원 강퇴 기능
- Admin을 비롯한 게시글 작성 권한을 가진 회원들은 분류(디렉토리) 및 문서를 생성, 작성, 수정, 삭제할 수 있다.
- 디렉토리와 문서 생성, 수정, 삭제 기능
- 늘어나는 디렉토리와 문서를 관리할 수 있는 형태로 DB 설계
- 문서에 첨부할 수 있는 총 용량 제한을 설정할 수 있다.
- 각 문서 크기 제한 기능
- 각 문서는 편집 기록(날짜와 편집자)가 모두 남는다.
- 모든 변경 요청에 대해 logging
- (각 문서간에 걸린 링크를 통한 연결관계는 Obsidian의 graph view 처럼 볼 수 있다.)
- (graph view 기능)
- 링크/역링크 보기 기능
- 각 문서에는 코드, 이미지, 동영상, 링크 등을 첨부할 수 있다.
- 코드 하이라이팅
- 이미지, 동영상 업로드 기능
- 어떤 문서에 대한 의견을 주고받을 수 있다.
- 특정 문서에 대한 토론장 Open/Close 기능
- 특정 문서에 변화가 있을 때 마다 알림을 받을 수 있다.
- 문서 주시 On/Off 기능
- (필요할 경우 문서를 export 할 수 있다)
- (Html, markdown 형식으로 export 하기 기능)
- 제목이나 태그로 원하는 문서를 검색할 수 있다.
- 문서 검색기능
- 문서에 태그 추가하기
- 문서의 외부 공개 여부를 변경할 수 있다.
- 문서의 외부 공개 On/Off 기능
- 특정 권한을 가진 사람에게만 문서를 보여주는 기능
💾 백엔드 기본 기능 예상
- 계정
- 로그인
- 로그아웃
- 회원 탈퇴
- 회원 추방(Admin)
- 비밀번호 찾기
- 게시글
- 카테고리별 분류
- 대분류 1
- 중분류 1
- 문서 1
- 문서 2
- 소분류 1
- 소분류 2
- 문서 1
- 중분류 2
- 소분류 1
- 소분류 2
- 중분류 3
- 소분류 1
- 소분류 2
- 문서 1
- 문서 1
- 문서 1
- 문서 2
- 대분류 2
- 문서 1
- 문서2
- 중분류 1
- 문서 1
- 소분류 1
- 문서 1
- 소분류 2
- 게시글 등록 (권한 사용자)
- 게시글 수정 (권한 사용자)
- 게시글 수정 요청 (非 권한 사용자)
- 게시글 삭제 (권한 사용자)
- 게시글의 크기 제한 or 첨부파일 크기 제한
- 이미지, 동영상 첨부 기능
- 모든 변경 사항 기록
- 게시글별 링크, 역링크 정보 제공
- 게시글 주시 기능 (변경 또는 요청 알림)
- 주시자(非 권한 사용자 포함)에게 변경 발생시 알림
- 권한 있는 주시자에게 변경 요청 발생시 알림
- 게시글 export 기능
- html, markdown, (PDF)
- 게시글 검색 기능
- 제목으로 검색
- 태그 기능
- 게시글 공개 범위 설정
- 권한 사용자에게만 공개
- 전체 공개
예시
- Dockerizing
🤔 어떤 Feature를 추가할 수 있을까?
지난 회의때 나온 내용들
- 내가 쓴 글을 다시 보게 되는 요소가 있었으면 좋겠다.
- N년 전 내가 쓴 글, 사진 등등 보여주는 기능
- 가시적으로 데이터를 볼 수 있었으면 좋겠다.
- 나의 기록 습관 관련 통계적인 데이터를 볼 수 있었으면 좋겠다.
- 얼마나 기록을 작성하는지
- 어떤 시간대에 기록을 작성하는지
- 주마다, 달마다의 통계 데이터도 보여줬으면 좋겠다.
- 어떤 주제(태그?)의 기록을 작성하는지
- 글, 이미지, 동영상 등 어떤 미디어를 얼마나 활용하는지
- Github 처럼 통계가 눈에 잘 들어왔으면
- 각 페이지별 데이터를 볼 수 있었으면 좋겠다.
- 언제 수정이 이루어졌는가
- 얼마나 수정이 이루어졌는가
- 어떻게 수정이 이루어졌는가
- 페이지별 데이터를 토대로 여러가지 순위로 문서를 정렬해서 볼 수 있었으면 좋겠다.
→ 나만의 통계 페이지