3.3 KiB
3.3 KiB
Architecture
시스템 구성도
Windows Desktop (Avalonia 12)
|
REST / WebSocket
|
ASP.NET Core 8 API
|
SQLite (current local alpha)
|
PostgreSQL / Redis / MinIO (target VPS stack)
핵심 컴포넌트 역할
| 컴포넌트 | 역할 |
|---|---|
VsMessenger.Desktop |
한국어 Windows UX, 세션 보존, 대화 목록/대화창, 전송 흐름 |
VsMessenger.Api |
인증, 부트스트랩, 대화/메시지 REST API, WebSocket 엔드포인트 |
VsMessenger.Application |
유스케이스와 서비스 로직 |
VsMessenger.Domain |
계정, 세션, 대화, 메시지 등 핵심 도메인 모델 |
VsMessenger.Infrastructure |
DB, 토큰, 시계, 실시간 연결 허브 등 인프라 구현 |
release-assets |
릴리즈 메타데이터, 체크섬, 스크린샷 번들 |
deploy |
VPS용 Compose, Caddy, systemd, Dockerfile 초안 |
데이터 흐름
가입
- 데스크톱 앱이 이름 + 초대코드를 보냅니다.
- API가 초대코드를 검증하고 계정/세션을 생성합니다.
- 앱은 반환된 세션을 저장하고 부트스트랩 데이터를 요청합니다.
메시지 전송
- 사용자가 텍스트를 입력합니다.
- 앱이 REST API로 메시지를 전송합니다.
- API가 메시지를 저장하고 관련 사용자에게 WebSocket 이벤트를 보냅니다.
- 앱은 읽기 상태와 목록을 갱신합니다.
현재 구조와 목표 구조
| 구분 | 현재 실행 구조 | 목표 배포 구조 |
|---|---|---|
| 클라이언트 | Avalonia 12 desktop | Windows x64 portable / 향후 설치형 |
| API 저장소 | SQLite | PostgreSQL |
| 실시간 | API 내 WebSocket | API + Redis 기반 팬아웃 보조 |
| 파일 저장 | 미구현 | MinIO |
| 리버스 프록시 | 로컬 직접 포트 | Caddy |
| 운영 환경 | 로컬/WSL 중심 | Rocky Linux VPS |
보안 경계
- 데스크톱 앱은 세션과 사용자 데이터를 OS 환경에 맞게 최소한으로 저장해야 합니다.
- API는 메시지 본문과 민감 정보를 로그에 남기지 않아야 합니다.
- 실사용 배포 전에는
root + 비밀번호 SSH상태의 VPS를 그대로 사용하지 않습니다. - 공개 다운로드 채널은 TLS와 체크섬 검증을 전제로 합니다.
보안 상세 정책은 SECURITY.md와 문서/05-security-privacy-and-risk.md를 참고하세요.
기술 선택 이유
Avalonia 12: 현재 워크스페이스에서 빠르게 데스크톱 UI를 반복하고 Windows portable 산출물을 만들기 쉬움.NET 8: API와 데스크톱 모두에서 일관된 개발/배포 흐름 확보ASP.NET Core 8: REST + WebSocket 수직 슬라이스를 빠르게 구성 가능SQLite: Alpha 단계에서 복잡도와 운영 부담을 낮춤PostgreSQL / Redis / MinIO: VPS 운영 단계에서 필요한 데이터/캐시/파일 분리를 준비
관련 문서
- 제품 전략: 문서/01-product-strategy-and-mvp.md
- Windows 앱 구조: 문서/03-windows-client-architecture.md
- 서버/VPS 구조: 문서/04-chat-server-vps-architecture.md
- API 계약: 문서/13-v0.1-api-and-events-contract.md