Skip to content

Architecture

good-bad-code edited this page Sep 20, 2026 · 1 revision

🏗️ Architecture

Entry-Sync의 전체적인 시스템 구조와 데이터 흐름을 설명합니다.


🌐 Overview

Entry-Sync는 Chrome Extension을 클라이언트로 사용하고, 실시간 통신을 이용하여 데이터를 동기화하는 구조로 설계되어 있습니다.

전체적인 구조는 다음과 같습니다.

┌──────────────────────┐
│      Entry Site      │
└──────────┬───────────┘
           │
           ▼
┌──────────────────────┐
│   Entry-Sync         │
│   Chrome Extension   │
└──────────┬───────────┘
           │
           │ WebSocket
           │ WSS
           ▼
┌──────────────────────┐
│   Cloudflare         │
│   Worker / Server    │
└──────────┬───────────┘
           │
           ▼
┌──────────────────────┐
│  Durable Objects     │
│  Real-time State     │
└──────────┬───────────┘
           │
           ▼
┌──────────────────────┐
│      Firebase        │
│  Persistent Storage  │
└──────────────────────┘

🧩 Components

1. Entry Site

사용자가 실제로 Entry를 사용하는 웹 페이지입니다.

Entry-Sync는 Chrome Extension을 통해 Entry 페이지와 상호작용합니다.


2. Chrome Extension

Entry-Sync의 클라이언트 부분입니다.

주요 역할:

  • Entry 페이지와의 상호작용
  • 사용자 동작 처리
  • 동기화 데이터 처리
  • 서버와의 실시간 통신
  • Popup UI 제공

관련 코드는 extension/ 디렉터리에서 관리합니다.


3. WebSocket

Entry-Sync는 실시간 데이터 전달을 위해 WebSocket 기반 통신을 사용합니다.

일반적인 HTTP 요청과 달리 WebSocket은 연결을 유지하면서 양방향으로 데이터를 전달할 수 있습니다.

Client
  │
  │ WebSocket
  ▼
Server
  │
  │ WebSocket
  ▼
Other Clients

보안 연결에서는 wss://를 사용할 수 있습니다.


4. Cloudflare

실시간 통신을 처리하기 위한 서버 측 인프라입니다.

Cloudflare Workers와 Durable Objects를 이용하면 WebSocket 연결을 관리하고 여러 클라이언트 사이의 상태를 조정할 수 있습니다.

Durable Objects는 WebSocket 서버 역할을 수행할 수 있으며, 하나의 객체에서 여러 클라이언트의 연결을 조정하는 방식으로 사용할 수 있습니다. ([GitHub][1])


5. Durable Objects

Durable Objects는 실시간 연결과 상태를 관리하는 데 사용됩니다.

개념적으로 다음과 같은 역할을 담당합니다.

Client A ──┐
           │
Client B ──┼──> Durable Object
           │
Client C ──┘

이를 통해 여러 클라이언트 사이에서 실시간 상태를 조정할 수 있습니다.

Cloudflare의 WebSocket 구조에서는 Worker가 요청을 처리하고 Durable Object로 연결을 전달하는 방식으로 구성할 수 있습니다. ([GitHub][1])


6. Firebase

Firebase는 지속적으로 저장해야 하는 데이터를 관리하는 데 사용됩니다.

실시간 연결 자체와 영구적인 데이터 저장을 분리함으로써 각각의 역할을 명확하게 유지할 수 있습니다.

WebSocket
    │
    ▼
Real-time communication

Firebase
    │
    ▼
Persistent data

🔄 Data Flow

일반적인 데이터 흐름은 다음과 같이 표현할 수 있습니다.

┌─────────────┐
│ Entry Site  │
└──────┬──────┘
       │
       ▼
┌─────────────┐
│  Extension  │
└──────┬──────┘
       │
       │ WSS
       ▼
┌─────────────┐
│   Worker    │
└──────┬──────┘
       │
       ▼
┌─────────────┐
│   Durable   │
│   Object    │
└──────┬──────┘
       │
       ├───────────────┐
       │               │
       ▼               ▼
  Other Clients    Firebase

🔐 Security

통신 과정에서는 가능한 경우 TLS가 적용된 보안 연결을 사용합니다.

WebSocket의 경우:

ws://

보다

wss://

를 사용하는 것이 안전한 통신에 적합합니다.

인증 정보나 민감한 데이터는 클라이언트 코드에 직접 노출하지 않도록 주의해야 합니다.

보안 취약점 제보 방법은 SECURITY.md를 참고해주세요.


📦 Architecture Principles

Entry-Sync의 구조는 다음과 같은 원칙을 목표로 합니다.

Separation of concerns

각 구성 요소가 하나의 역할에 집중하도록 구성합니다.

Extension
→ 사용자 및 Entry와 상호작용

WebSocket
→ 실시간 통신

Durable Objects
→ 실시간 상태 및 연결 조정

Firebase
→ 데이터 저장

Real-time communication

필요한 데이터는 WebSocket을 이용하여 실시간으로 전달합니다.

Secure communication

네트워크 통신에서는 가능한 경우 암호화된 연결을 사용합니다.

Maintainability

클라이언트, 실시간 서버, 데이터 저장소의 역할을 분리하여 유지보수하기 쉬운 구조를 목표로 합니다.


🔗 Related Documentation

Clone this wiki locally