ee-database 동기화 클라이언트 - Entity Enricher 문서

ee-database 동기화 클라이언트

스키마 데이터베이스를 위한 오픈 소스 적용 클라이언트입니다. 여러분의 PostgreSQL 옆에서 실행하고 한 번만 페어링하면, 스냅샷에서 부트스트랩한 뒤 단일 아웃바운드 WebSocket을 통해 실시간 델타 피드를 적용하여 해당 데이터베이스를 보강 결과와 수렴 상태로 유지합니다. 연결 문자열은 여러분의 컴퓨터를 벗어나지 않습니다.

Entity Enricherserver · outboxee-database여러분의 컴퓨터데이터베이스Postgres · MySQL · SQLitebatch · 리스 120초apply — 단일 트랜잭션커밋ack 다음 윈도우가 즉시 푸시됩니다

모든 구문은 리비전으로 보호되므로 재전송된 배치는 동일한 행으로 수렴합니다. SQL 오류가 발생하면 배치가 롤백되고 중단됩니다. 문제가 있는 델타가 조용히 건너뛰어지는 일은 없습니다.

클라이언트는 작업이 아니라 상태를 가져옵니다. 각 델타는 변경된 엔터티의 현재 행 전체를 멱등 INSERT … ON CONFLICT … DO UPDATE 형태로 담고 있으므로, 배치를 놓치더라도 대상이 수렴합니다.

동기화 클라이언트를 사용하는 이유는?

스키마 데이터베이스는 n8n, Make.com, MCP, 원시 웹훅 또는 REST 델타 피드 등 여러 방식으로 사용할 수 있습니다. 동기화 클라이언트는 완전 자동화된 경로로, 구축할 것도 유출될 것도 가장 적습니다.

구축할 워크플로가 전혀 없습니다

n8n 시나리오도, cron도, 글루 코드도 필요 없습니다. 한 번 페어링하면 스냅샷에서 부트스트랩한 후, 도착하는 모든 델타를 적용합니다.

DSN은 여러분의 컴퓨터를 벗어나지 않습니다

연결 문자열은 명령줄로 전달되거나 로컬에 mode-600으로 저장되며, Entity Enricher로는 절대 전송되지 않습니다. 클라이언트는 바깥쪽으로만 연결합니다.

설계상 재실행에 안전합니다

모든 델타는 멱등적이며 리비전으로 보호되는 upsert입니다. 배치 도중 클라이언트가 중단되면 리스가 만료된 후 배치가 재전송되며, 다시 적용해도 동일한 행으로 수렴합니다.

조용히 넘어가지 않고 확실하게 실패합니다

SQL 오류가 발생하면 배치가 롤백되고, 실패한 델타가 Databases 페이지에 보고되며, 0이 아닌 코드로 종료됩니다 — 문제가 있는 델타는 조용히 건너뛸 수 없습니다.

빠른 시작

먼저 스키마에 데이터베이스를 등록한 다음, 클라이언트를 페어링하여 데이터베이스 옆에서 실행하세요.

  1. 1

    데이터베이스 등록

    Databases 페이지에서 미러링하려는 스키마에 데이터베이스를 등록하고 데이터베이스 키를 검토하세요. 전체 모델은 Databases를 참고하세요. 이 단계에서 클라이언트가 적용할 대상 방언을 선언합니다.

  2. 2

    클라이언트 설치

    Releases에서 서명된 바이너리를 다운로드하거나 소스에서 빌드하세요(Go ≥ 1.23).

    go build -o ee-database .

    소스와 서명된 릴리스는 TOT-Concept/ee-database(MIT)에 있습니다.

  3. 3

    브라우저로 페어링하기

    ee-database pair를 실행하세요. /database/connect에서 짧은 코드와 함께 브라우저 탭이 열립니다. 코드를 확인하고, 이 클라이언트가 동기화할 데이터베이스를 선택하세요.

    ee-database pair --server https://entityenricher.ai
    
    Open this URL in your browser to confirm pairing:
       https://entityenricher.ai/database/connect?code=7QX-KP2
    
      Code: 7QX-KP2
    
    Waiting for confirmation...

    토큰을 선호하시나요? Databases 페이지(Sync client → Pair a client)에서 발급한 후 직접 전달하세요: ee-database pair --server … <refresh-token>.

  4. 4

    데이터베이스 옆에서 실행하세요

    첫 실행 시 클라이언트는 .sql 스냅샷을 가져와 적용한 다음, 연결하여 델타를 스트리밍합니다. --save-dsn은 연결 문자열을 로컬에 저장하므로 이후 실행에는 인수가 필요 없습니다.

    ee-database run --dsn "postgres://user:pass@localhost:5432/mydb" --save-dsn

    “Next to”는 데이터베이스 서버 위가 아니라 네트워크상 인접함을 의미합니다: DSN에 접근할 수 있는 모든 머신이나 컨테이너가 동작하며 — 보통 TLS를 강제하는 클라우드 관리형 PostgreSQL(Azure, OVHcloud, AWS RDS…)도 포함됩니다: …/mydb?sslmode=require.

전달 방식: 리스와 ack

델타는 데이터베이스별 엄격한 FIFO 아웃박스를 통해 Entity Enricher를 떠납니다. 서버는 보이는 윈도우를 120초 동안 리스하여 하나의 배치로 푸시하고, 클라이언트는 배치 전체를 단일 트랜잭션으로 적용한 뒤 ack 로 응답하며, 이는 커서를 진행시키고 다음 윈도우를 즉시 트리거합니다. 배치 도중 종료된 클라이언트는 리스 만료와 서버 측 재푸시로 보호되므로, 손실되거나 이중 커밋되는 것은 없습니다.

스냅샷 = 0에서 시작하는 델타

부트스트랩과 정상 상태(steady-state)는 하나의 코드 경로를 공유합니다. 데이터베이스에 이미 시드가 있다면 --skip-bootstrap으로 부트스트랩을 건너뛰세요.

리비전으로 보호됨

각 문(statement)에는 _sync_revision이 포함되어 있어, 순서가 어긋나더라도 오래된 행이 최신 행을 덮어쓰지 않습니다.

실패 시 중단

SQL 오류가 발생하면 실패한 델타 ID가 Databases 페이지 → 동기화 클라이언트 카드에 저장되고, 프로세스가 0이 아닌 코드로 종료되어 관리 프로세스(supervisor)가 재시작할 수 있습니다.

데이터베이스와 방언(dialect)

대상 방언은 Entity Enricher의 스키마 데이터베이스 등록으로 고정됩니다. 클라이언트는 서버가 렌더링하는 SQL을 그대로 적용합니다. PostgreSQL이 출시 방언이며, MySQLSQLite 드라이버는 해당 SQL 렌더러가 출시될 때를 대비해 이미 번들되어 있습니다. 다중 문장 적용은 드라이버별로 처리됩니다(pgx 단순 프로토콜, MySQL multiStatements, CGO 없는 SQLite).

보안

아웃바운드 전용

클라이언트가 :443/wss를 통해 WebSocket을 시작합니다. 데이터베이스 호스트는 인바운드 연결을 절대 수신하지 않으므로, 열어야 할 포트도 구성할 인그레스도 없습니다.

하나의 자격 증명, 하나의 데이터베이스, 하나의 클라이언트

자격 증명은 단일 스키마 데이터베이스에 바인딩됩니다. 다시 페어링하면 자격 증명이 교체되고 이전 라이브 연결이 즉시 해제됩니다.

수명이 짧은 액세스 토큰

365일 갱신 토큰(mode-600으로 저장됨)은 WebSocket을 인증하는 15분짜리 액세스 토큰으로 교환됩니다. UI에서 취소하면 실행 중인 클라이언트가 약 1초 이내에 연결 해제됩니다.

최소 권한을 권장합니다

동기화된 스키마로 범위가 제한된 전용 데이터베이스 역할로 클라이언트를 실행하면, 토큰이 탈취되더라도 다른 것에는 접근할 수 없습니다.

CLI 참조

명령기능
ee-database pair --server URL브라우저로 확인하는 디바이스 코드 페어링입니다. 동기화할 데이터베이스를 선택하세요.
ee-database pair --server URL <token>Databases 페이지에서 발급된 토큰으로 페어링하세요 (헤드리스 환경 지원).
ee-database run --dsn DSN [--save-dsn] [--skip-bootstrap]스냅샷에서 부트스트랩한 후(건너뛰지 않는 한), 연결하여 델타를 적용합니다.
ee-database run … --create-missing대상 데이터베이스가 없는 경우 DSN 자체 자격 증명을 사용하여 먼저 생성합니다(postgres는 CREATEDB, mysql은 CREATE 권한이 필요하며, sqlite 파일은 어차피 자동으로 생성됩니다).
ee-database run … --create-missing --admin-dsn DSN대상 DSN이 지정하는 모든 것을 관리자 연결을 통해 부트스트랩합니다. 즉, 누락된 역할/사용자(DSN의 비밀번호 포함)와 그 사용자가 소유한 데이터베이스를 생성합니다. 그러면 대상 DSN에는 생성 권한이 필요하지 않으며, 관리자 DSN은 저장되지 않습니다.
ee-database run --all하나의 프로세스에서 페어링된 모든 데이터베이스를 동시에 동기화합니다(각 데이터베이스에는 저장된 DSN이 필요합니다).
ee-database status페어링 상태, 서버 URL 및 페어링된 데이터베이스를 표시합니다.
ee-database disconnect한 페어링의 로컬 자격 증명을 삭제합니다. 서버 측에서는 UI에서 취소하세요.
ee-database version인쇄 버전.

자격 증명은 페어링된 데이터베이스마다 하나의 프로필로 ~/.config/ee-database/profiles/ 아래에 mode-600으로 저장됩니다. 데이터베이스당 한 번 페어링하며, 여러 개가 페어링된 경우 --database NAME으로 하나를 선택합니다. 자동화를 전혀 원하지 않으십니까? 동일한 피드는 일반 REST로도 제공됩니다: GET /api/databases//changesPOST /api/databases//ack데이터베이스를 참조하세요.

오픈 소스

클라이언트는 MIT 라이선스로 공개 저장소에 있으므로, 누구나 자신의 데이터베이스에 대해 무엇이 실행되는지 정확히 감사할 수 있습니다.

소스: github.com/TOT-Concept/ee-database

릴리스: github.com/TOT-Concept/ee-database/releases — 각 바이너리는 게시 전에 서명됩니다.