← 포트폴리오

DAEMON-ONE

ARCH

프로젝트마다 반복되는 구조적 문제를 없애기 위해 설계한 Django 아키텍처 템플릿입니다. 보일러플레이트가 아닌, 의도적인 트레이드오프의 집합입니다.

비공개 저장소 · 요청 시 공유

Type 아키텍처 템플릿
Role 설계 및 단독 개발
Repository 비공개 · 요청 시 공유
Built on it Almaeng · SportsIQ
DjangoHTMXAlpine.jsPostgreSQLpgvectorPydanticDockerCoolify

왜 만들었는가

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 · 기반 모델

요청 흐름

HTTP 요청
pages/views.py
얇은 핸들러
state/interface.py
도메인 간 유일한 경계
logic/services.py
순수 함수 · Pydantic 입출력 · DB 접근 없음
state/models.py
Django ORM · django-lifecycle 훅
PostgreSQL
pgvector · pgmq · pg_search

템플릿 평가

80%

효율성 (Efficiency)

원클릭 초기화, 도메인 자동 등록, CI/CD 파이프라인 완성 상태.

90%

효능성 (Effectiveness)

인증, AI 통합, Hybrid 검색, 백그라운드 잡, 스모크 테스트 배포 — 처음부터 프로덕션 수준.

CI 파이프라인: pytestsmoke-test(실제 PostgreSQL + 헬스 체크) → GHCR 빌드+푸시. 스모크가 실패하면 Docker 이미지가 게시되지 않습니다. "테스트는 통과하는데 프로덕션이 깨지는" 상황을 배포 전에 차단합니다.

관련 글

DAEMON-ONE 기반 프로젝트

  • Almaeng — AI 영양제 분석 서비스, 프로덕션 운영 중
  • SportsIQ — Sports knowledge platform, 개발 중

상태

비공개 저장소. 기반 프로젝트가 쌓일수록 함께 발전합니다. 요청 시 공유 가능합니다.