Work
← Work

Synap

메모가 의미로 연결되는 노트앱. 노트를 적으면 임베딩으로 가까운 노트끼리 자동으로 잇고, 그래프로 탐색합니다.

Year
2026
Role
1인 · 풀스택 · AI 통합
Platform
Web
ReactTypeScriptSpring BootPostgreSQLpgvectorOpenAI
Synap 대표 이미지

개요

노트를 적으면 내용을 임베딩 벡터로 바꿔서, 의미가 가까운 노트끼리 자동으로 이어주는 메모 앱입니다. 흩어진 생각이 그래프로 이어지고, 키워드가 아니라 의미로 검색됩니다. “제2의 뇌”를 목표로 했습니다.

👉 이 블로그의 글들로 돌려본 자동연결 그래프를 여기서 체험할 수 있어요

왜 만들었나

노트를 오래 쓰면 서로 관련된 게 분명히 있는데 연결이 안 돼 있어요. 관련 노트를 손으로 링크할 수도 있지만 저는 그걸 거의 안 하게 됐습니다. 쓸 땐 바쁘고, 나중엔 그런 노트가 있었는지도 잊었습니다. 그래서 쓰기만 하면 알아서 이어지는 걸 만들고 싶었습니다 — 내가 잊은 연결을 앱이 상기시켜 주는 그림입니다.

어떻게 동작하나

  1. 노트를 저장하면 제목 + 본문을 OpenAI 임베딩으로 벡터화
  2. pgvector에 저장하고, 코사인 거리로 가장 가까운 노트 k개를 조회 (kNN)
  3. 그중 임계값 이상만 자동 링크 — 저장할 때마다 다시 계산
  4. 링크는 곧 그래프의 엣지 → Canvas + d3-force로 배치, Louvain으로 군집화하고 TF-IDF로 라벨링
  5. 검색도 키워드가 아니라 벡터 유사도로, 공개 그래프에선 비슷하게 생각하는 사람도 발견

결정

  • 키워드가 아니라 임베딩 — “러닝”과 “스쿼트”는 단어가 안 겹쳐도 의미가 가깝습니다. 그건 임베딩만 잡습니다
  • 벡터 전용 DB 대신 pgvector — Postgres 하나로 관계형 데이터와 벡터를 같이. 1인 운영엔 이게 단순했습니다
  • 렌더는 Canvas — SVG는 노드가 수십 개만 넘어도 버벅여서, 한 장에 그리는 Canvas로
  • 군집은 수동 분류 없이 — 카테고리를 미리 정하는 대신, 연결 구조에서 의미 덩어리가 떠오르게 (Louvain)

관련 글