DAEMON-ONE
ARCH프로젝트마다 반복되는 구조적 문제를 없애기 위해 설계한 Django 아키텍처 템플릿입니다. 보일러플레이트가 아닌, 의도적인 트레이드오프의 집합입니다.
왜 만들었는가
15개 이상의 사이드 프로젝트를 만들면서 같은 구조적 문제가 반복됐습니다. 뷰와 시그널에 흩어진 비즈니스 로직, 불명확한 도메인 경계, 매번 같은 실수에서 다시 시작하는 프로젝트. DAEMON-ONE은 그 문제를 해결하기 위해 직접 설계한 Django 모놀리스 템플릿입니다 — 처음부터 의도적인 결정이 내장된 구조입니다.
핵심 결정
-
Modular Monolith (마이크로서비스 대신)
단일 배포 단위. 도메인 간 통신은
interface.py로만 — 한 도메인이 다른 도메인에 접근하는 유일한 경로입니다. 도메인 간 ForeignKey 없음. 복잡성이 올바른 경계에 머물도록 강제합니다. -
HTMX + SSR (React 대신)
서버 중심 UI 상태 관리. JS 빌드 스텝 없음. LCP 우선 렌더링이 기본값. Alpine.js는 독립적인 클라이언트 상태만 담당합니다. 결과: 프론트엔드 빌드 파이프라인 없는 풀스택 제품.
-
Vertical Slicing
기능별로 로직·템플릿·스타일이 같은 폴더에 공존합니다. 폴더 하나를 삭제하면 기능이 완전히 사라집니다 — 남겨진 import 참조 없음. AI 협업 시에도 "이 폴더만 보면 됩니다"로 컨텍스트를 제한할 수 있습니다.
-
PostgreSQL-First
pgvector로 시맨틱 검색, pgmq로 메시지 큐(Redis 대체), pg_search로 풀텍스트 검색. 데이터베이스 하나, 배포 단위 하나. 실제로 그 규모가 필요해질 때까지 Redis나 Elasticsearch는 도입하지 않습니다.
아키텍처
폴더 구조
backend/domains/ ├── accounts/ │ ├── state/ ← DB 소유자 · models · migrations · admin │ │ └── interface.py ← 도메인 외부 노출 유일한 경로 │ ├── logic/ ← Stateless · 순수 함수 · Pydantic (frozen) │ └── pages/ ← UI 슬라이스 · 뷰 + 템플릿 같은 폴더 │ └── profile/ │ ├── views.py │ └── profile.html └── core/ ← home · health · 기반 모델
요청 흐름
템플릿 평가
80%
효율성 (Efficiency)
원클릭 초기화, 도메인 자동 등록, CI/CD 파이프라인 완성 상태.
90%
효능성 (Effectiveness)
인증, AI 통합, Hybrid 검색, 백그라운드 잡, 스모크 테스트 배포 — 처음부터 프로덕션 수준.
CI 파이프라인: pytest → smoke-test(실제 PostgreSQL + 헬스 체크) → GHCR 빌드+푸시. 스모크가 실패하면 Docker 이미지가 게시되지 않습니다. "테스트는 통과하는데 프로덕션이 깨지는" 상황을 배포 전에 차단합니다.
관련 글
DAEMON-ONE 기반 프로젝트
상태
비공개 저장소. 기반 프로젝트가 쌓일수록 함께 발전합니다. 요청 시 공유 가능합니다.