글만 Git처럼 고치면 되는 줄 알았습니다 게시글 하나를 저장하듯 시작한 위키가 리비전, 권한, 검색과 복구 구조까지 필요하게 된 과정.
August 31, 2026 정규식으로 위키 언어를 어디까지 만들 수 있을까? 정규식 치환과 문단별 병렬화, 문법 생성기까지 거친 뒤 SevenMark를 Winnow 기반 파서와 AST로 다시 만든 과정.
August 31, 2026 파서는 맞는데, 왜 밑줄은 옆에 생길까? 중첩 문법과 한글이 들어간 문서에서도 SevenMark LSP의 오류 표시와 문법 강조 위치를 정확히 맞춘 과정.
August 31, 2026 브라우저에도 언어 서버를 넣어보자! SevenMark 파서와 LSP를 서버, 포매터와 브라우저에서 따로 만들지 않고 Rust와 WebAssembly로 공유한 과정.
August 31, 2026 마이크로서비스를 하고 싶어서 나눈 건 아니었습니다 하나의 백엔드로 시작한 V7을 Auth, Region, Media와 Sitelink로 나누며 데이터의 책임과 장애 범위를 정한 과정.
August 31, 2026 로그인 서버가 멈추면 위키도 멈춰야 할까? 매 요청마다 Auth에 세션을 묻던 구조를 짧은 서명 토큰과 Region의 로컬 보안 정보로 바꾼 과정.
August 31, 2026 이벤트를 놓친 Region은 어떻게 따라잡을까? JetStream 이벤트가 끊기거나 데이터베이스가 PITR로 과거로 돌아갔을 때 변경 내역과 스냅샷으로 Region을 복구한 과정.
August 31, 2026 위키 권한을 숫자 하나로 끝낼 수 있을까? 단순한 권한 등급과 그래프 권한 실험을 거쳐 문서, 네임스페이스와 전역 범위의 ordered ACL을 만든 과정.
August 31, 2026 저장 버튼 하나에 몇 개의 시스템이 얽혀 있을까? R2의 본문 객체와 PostgreSQL 리비전, 활동 로그, 알림과 후처리 작업을 하나의 문서 저장 흐름으로 만든 과정.
August 31, 2026 같은 문서를 고쳤다고 모두 충돌일까? Git의 merge 방식을 Rust로 가져와, 서로 다른 부분의 수정은 합치고 실제로 겹친 변경만 사용자에게 보여준 과정.
August 31, 2026 NATS를 붙였다가 다시 빼게 된 이유 모든 비동기 작업을 JetStream에 넣었다가, Region 안에서 끝나는 일은 PostgreSQL 큐로 다시 옮긴 과정.
August 31, 2026 그렇다고 JetStream이 필요 없었던 건 아닙니다 서비스 사이의 변경을 Transactional Outbox와 JetStream으로 전달하고, 중복과 누락은 원본 데이터에서 복구한 과정.
August 31, 2026 첫 아이폰 에어팟을 잃어버린 일에서 시작해, 결국 첫 아이폰까지 사게 된 이야기.
July 14, 2026 Vaultwarden 세팅하기 Vaultwarden 설치, 쉽게 해보자!
June 26, 2026