Period
2026.04.07 - 2026.05.18
Role
FE, AI, Infra
Team
6
Stack
Overview
소설 작가를 위한 통합 에디터.
글 작성에 필요한 다양한 스타일링 및 편의성 도구를 지원합니다.

My Work
데스크탑 앱 에디터 UI 구현
에디터의 전체적인 디자인 및 핵심 기능을 구현하였습니다.
- DnD-kit을 이용한 드래그 드롭 UI
- 도움말 표시 기능을 통한 최초 사용자 진입 장벽 완화
- 낙관적 업데이트 통한 빠른 UI 피드백
개발 환경 및 배포 인프라 구현
GitLab Runner를 이용한 배포 자동화 및 도커 컨테이너를 이용한 블루그린 무중단 배포를 구현하였습니다.
- 도커 및 시크릿 매니저로 배포와 분리된 개발 환경 구성
- 지정 협업 도구 GitLab을 이용한 서비스앱 배포 자동화
- 프로메테우스 메트릭 및 그라파나 서버 모니터링 구축
AI 기능 구현
MCP 서버와 벡터DB를 이용한 AI 파이프라인 및 각종 도구와 프롬프트를 구현하였습니다.
- 벡터DB 기반 문서 유사도 검색 도구
- 각 문서 DB에 대한 CRUD 도구 구현
- 계층적 문서 탐색 구조를 통한 토큰 절약
Architecture
원고 손실 방지 · AI 트래픽 격리 · 민감 데이터 보호
Local-First Desktop · Dual Server · Envelope Encryption
로컬 퍼스트
Electron + WA-SQLite
- 사용자가 공간적 제약을 덜받도록 오프라인 작업 환경 지원
- Tiptap(ProseMirror)이 한국어 IME / 단축키 / 파일시스템 접근에서 PWA·Tauri 대비 우수
양방향 동기화
PowerSync
- 다기기 / 협업 대응 + RLS(행 단위 권한)로 작가 행 자동 격리
- Yjs·Automerge 대비 last-write-wins로 운영 복잡도 ↓
서버 이중화
Spring Boot + FastAPI
- LLM 호출은 느리고 IO-heavy — 단일 서버면 메인 트래픽까지 막힘
- Java로 도메인 명료 표현 + Python으로 LLM/벡터 생태계(OpenAI SDK·LangChain) 활용
봉투 암호화
Vault + pgvector
- 원고는 민감 자산(작가 IP) — Vault Transit Engine = 자체 KMS 대비 감사 로그·키 순환 우수
- pgvector로 별도 벡터 DB(Pinecone) 운영 비용·일관성 문제 회피
Troubleshooting
개인키 + 서버키 이중 Wrapping
원고 보호를 위해 KEK 암호화를 적용하니, AI 서버가 사용자 키 없이는 DB를 읽지 못해 인덱싱·검색이 불가능해졌습니다.
User Key + Vault 서버키로 DEK를 이중 Wrapping하고 pepper를 메모리에만 보관, Vault 토큰 단독 유출로는 복호화 불가능하게 격리. AI 서버는 짧은 TTL의 unwrap DEK 캐시로 안전하게 접근하도록 했습니다.
동기화 디바운스 · 쓰로틀 · 배치 처리
키 입력마다 동기화가 즉시 트리거되어 초당 수십 건의 업로드 요청이 발생, 서버 부하가 급증했습니다.
에디터 400ms 디바운스 + 업로드 5s 쓰로틀 + 최대 50건 배치 적용. 서버 반영 지연이 ~5s로 늘어나는 트레이드오프를 감수하되, 로컬 저장은 즉시 수행해 작가의 체감 입력 응답성은 유지했습니다.
Results
가입자
51
AI 호출
201
결제 시도
78
작품
71
Retrospective
좋았던 점
- 프로젝트를 진행하며 잘 해낸 점을 기록합니다.
- DB기반 동기화 시스템을 구현해볼 수 있어 DB에 대해 많이 배울 수 있었습니다.
배운 점
- Electron을 이용한 데스크탑 앱 개발 및 윈도우 exe 설치 마법사를 통한 배포과정을 경험할 수 있었습니다.
- PostgreSQL의 pgvector와 GIN에 대하여 알게되었습니다.
- TipTap과 같은 위지윅 에디터 라이브러리에 대하여 알게되었습니다.
아쉬운 점
- 다시 한다면 다르게 했을 부분을 기록합니다.
- 시간·지식 부족으로 미흡했던 점을 기록합니다.
다음에는
- 다음 프로젝트에 적용하고 싶은 시도를 기록합니다.
- 깊이 파고들고 싶은 영역을 기록합니다.