← Work

Synap

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

Year
2026
Role
Solo · 풀스택 · AI 통합
Platform
Web
ReactTypeScriptSpring BootPostgreSQLpgvectorOpenAI

개요

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

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

왜 만들었나

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

어떻게 동작하나

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

결정

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

관련 글