Replicant Detector: A Common Lisp and Datastar Demo

Replicant Detector는 Common Lisp, Datastar, 그리고 BKNR datastore를 통합하여 고성능의 반응형 웹 애플리케이션 아키텍처를 보여주는 기술 데모입니다. 이 프로젝트는 Common Lisp용 Datastar SDK의 데모 역할을 하며, 단일 GET 스트림과 다수의 POST 명령을 통해 Command Query Responsibility Segregation (CQRS) 패턴을 구현합니다.

Architecture and Technical Stack

이 애플리케이션은 실시간 업데이트와 지속적인 저장을 달성하기 위해 특정 기술 세트를 활용합니다:

  • Common Lisp: 백엔드 로직에 사용되는 핵심 프로그래밍 언어입니다.
  • Datastar: 프론트엔드 반응성을 관리하기 위해 사용되는 하이퍼미디어 기반 프레임워크입니다.
  • BKNR Datastore: 애플리케이션 데이터의 지속적인 저장 계층으로 사용됩니다.
  • CQRS Pattern: "Datastar Tao"를 따라, 애플리케이션은 읽기 및 쓰기 작업을 분리합니다. 업데이트를 위해 단일 GET 스트림을 사용하고 상태 변경을 위해 다수의 POST 명령을 사용합니다.

Real-Time Updates and SSE Implementation

애플리케이션의 반응형 특성을 지원하기 위해, 개발자는 Common Lisp 생태계에 몇 가지 저수준 향상을 구현했습니다:

  • Server-Sent Events (SSE): 애플리케이션은 클라이언트에 업데이트를를 push하기 위해 SSE를 사용합니다. 이벤트 루프를 차단하는 것을 방지하기 위해, 개발자는 사용자 채널을 지원하도록 Woo 웹 서버(Clack를 통해)에 수정을 통합했습니다.
  • Event Pool: 사용자 채널의 사용은 애플리케이션이 이벤트 풀을 활용할 수 있게 하며, 이는 알림이 서버를 멈추지 않고 전송되는 CQRS 구현에 필수적입니다.
  • Brotli Compression: 이 데모를 개발하는 과정의 부수적인 결과로, 저자는 Common Lisp를 위한 Brotli 압축 지원을 제공하기 위해 cl-brotli 라이브러리를 만들었습니다.

Application Features and Interface

Replicant Detector는 Tyrell Corp Blade Runner Division의 "Replicant Registration Database"를 테마마로 합니다. 인터페이스는 다음과 같은 기능을 갖춘 실시간 추적 시스템을 제공합니다:

  • Unit Tracking: 모델(Nexus-6, Nexus-7, Nexus-8), 역할(예: Combat, Infiltrator, Loader), 그리고 상태(At-Large 또는 Retired)별로 분류된 레플리칸트 데이터베이스입니다.

  • Orbital Tracking: 마지막으로 알려진 위치를 보여주기 위해 SVG 기반의 정거도법 투영(GeoLite2-City 데이터를 활용)을 사용하는 시각적 지도입니다.

  • Field Agent Activity Log: 에이전트 목격 및 은퇴 조치(예: "Agent S8XLQ08416 (United States): RETIRE N6FAB61216")를 추적하는 실시간 로그입니다.

Development Context

이 프로젝트는 Common Lisp용 Datastar SDK와 lambda-combine.net의 "hyper-guide"에 있는 상호작용 가이드를 만들기 위한 광범위한한 effort의 일부입니다. 저자는 이 구현이 작업 진행 중(WIP)인 프로젝트의 일부이며, 현대적인 반응형 웹 환경에서 이러한 도구들의 생존 가능성을 보여주기 위한 의도임을 명약시합니다.

Sources