Repository navigation
Architecture
Entry-Sync의 전체적인 시스템 구조와 데이터 흐름을 설명합니다.
Entry-Sync는 Chrome Extension을 클라이언트로 사용하고, 실시간 통신을 이용하여 데이터를 동기화하는 구조로 설계되어 있습니다.
전체적인 구조는 다음과 같습니다.
┌──────────────────────┐
│ Entry Site │
└──────────┬───────────┘
│
▼
┌──────────────────────┐
│ Entry-Sync │
│ Chrome Extension │
└──────────┬───────────┘
│
│ WebSocket
│ WSS
▼
┌──────────────────────┐
│ Cloudflare │
│ Worker / Server │
└──────────┬───────────┘
│
▼
┌──────────────────────┐
│ Durable Objects │
│ Real-time State │
└──────────┬───────────┘
│
▼
┌──────────────────────┐
│ Firebase │
│ Persistent Storage │
└──────────────────────┘
사용자가 실제로 Entry를 사용하는 웹 페이지입니다.
Entry-Sync는 Chrome Extension을 통해 Entry 페이지와 상호작용합니다.
Entry-Sync의 클라이언트 부분입니다.
주요 역할:
- Entry 페이지와의 상호작용
- 사용자 동작 처리
- 동기화 데이터 처리
- 서버와의 실시간 통신
- Popup UI 제공
관련 코드는 extension/ 디렉터리에서 관리합니다.
Entry-Sync는 실시간 데이터 전달을 위해 WebSocket 기반 통신을 사용합니다.
일반적인 HTTP 요청과 달리 WebSocket은 연결을 유지하면서 양방향으로 데이터를 전달할 수 있습니다.
Client
│
│ WebSocket
▼
Server
│
│ WebSocket
▼
Other Clients
보안 연결에서는 wss://를 사용할 수 있습니다.
실시간 통신을 처리하기 위한 서버 측 인프라입니다.
Cloudflare Workers와 Durable Objects를 이용하면 WebSocket 연결을 관리하고 여러 클라이언트 사이의 상태를 조정할 수 있습니다.
Durable Objects는 WebSocket 서버 역할을 수행할 수 있으며, 하나의 객체에서 여러 클라이언트의 연결을 조정하는 방식으로 사용할 수 있습니다. ([GitHub][1])
Durable Objects는 실시간 연결과 상태를 관리하는 데 사용됩니다.
개념적으로 다음과 같은 역할을 담당합니다.
Client A ──┐
│
Client B ──┼──> Durable Object
│
Client C ──┘
이를 통해 여러 클라이언트 사이에서 실시간 상태를 조정할 수 있습니다.
Cloudflare의 WebSocket 구조에서는 Worker가 요청을 처리하고 Durable Object로 연결을 전달하는 방식으로 구성할 수 있습니다. ([GitHub][1])
Firebase는 지속적으로 저장해야 하는 데이터를 관리하는 데 사용됩니다.
실시간 연결 자체와 영구적인 데이터 저장을 분리함으로써 각각의 역할을 명확하게 유지할 수 있습니다.
WebSocket
│
▼
Real-time communication
Firebase
│
▼
Persistent data
일반적인 데이터 흐름은 다음과 같이 표현할 수 있습니다.
┌─────────────┐
│ Entry Site │
└──────┬──────┘
│
▼
┌─────────────┐
│ Extension │
└──────┬──────┘
│
│ WSS
▼
┌─────────────┐
│ Worker │
└──────┬──────┘
│
▼
┌─────────────┐
│ Durable │
│ Object │
└──────┬──────┘
│
├───────────────┐
│ │
▼ ▼
Other Clients Firebase
통신 과정에서는 가능한 경우 TLS가 적용된 보안 연결을 사용합니다.
WebSocket의 경우:
ws://
보다
wss://
를 사용하는 것이 안전한 통신에 적합합니다.
인증 정보나 민감한 데이터는 클라이언트 코드에 직접 노출하지 않도록 주의해야 합니다.
보안 취약점 제보 방법은 SECURITY.md를 참고해주세요.
Entry-Sync의 구조는 다음과 같은 원칙을 목표로 합니다.
각 구성 요소가 하나의 역할에 집중하도록 구성합니다.
Extension
→ 사용자 및 Entry와 상호작용
WebSocket
→ 실시간 통신
Durable Objects
→ 실시간 상태 및 연결 조정
Firebase
→ 데이터 저장
필요한 데이터는 WebSocket을 이용하여 실시간으로 전달합니다.
네트워크 통신에서는 가능한 경우 암호화된 연결을 사용합니다.
클라이언트, 실시간 서버, 데이터 저장소의 역할을 분리하여 유지보수하기 쉬운 구조를 목표로 합니다.