현재까지 만든 장서방 시스템의 기능을 정리했습니다. 여기에서 어떻게 하나씩 추가해 나가고 있는지 진행공유를 하면 의미가 있을 것 같아서요.
* 프로젝트명: 장서방(장고 기반으로 만들었고, 이런 저런 일들 책임감 있게 시킬 수 있는 솔루션으로 키우고 싶어서 서방이라고 붙임, 그래서 장서방)
* 빌드 목적: 게시판 중심의 커뮤니티 사이트를 쉽고 간편하게 만들어 확장할 수 있는 장고 기반 CMS
* 스택: 장고, htmx, bulma css, sqlite3
아래 내용은 README.md 파일을 그록빌드에게 만들어 달라고 한 내용을 복붙합니다. 요즘은 이런 내용은 직접 수제작성하기 귀찮아서요.
특성
|
항목 |
내용 |
|---|---|
|
스택 |
Django 5.2 LTS, Python 3.13, HTMX, Bulma, SQLite3 |
|
패키지 |
|
|
프론트 |
서버 렌더 HTML. SPA, Tailwind, DRF, Alpine.js 없음 |
|
설치 모델 |
단일 사이트 · 단일 인스턴스. 멀티테넌트 없음 |
|
디자인 |
블랙·진한 그레이·화이트 사무 스타일. 라이트 기본, 다크는 색 스키마 토글 |
|
로케일 |
|
-
모듈 종류는 코드 레지스트리입니다. 편집자가 파이썬을 저장하지 않습니다. DB에는 어느 슬롯에, 어떤 설정으로 꽂혔는지만 둡니다.
-
테마 팩은 공개 화면 스킨입니다. 라이트/다크 색 스키마와는 별개입니다.
-
CDN을 쓰지 않습니다. HTMX, Bulma, TinyMCE, Feather Icons는
static/vendor/에 버전을 고정합니다. -
JSON API는 기본 제공하지 않습니다. 권한은 HTMX 여부와 무관하게 서버에서 검사합니다.
기능
사이트 빌더 (/back-office/)
로그인 + 스태프 + cms.view_builder가 필요합니다.
|
화면 |
하는 일 |
|---|---|
|
대시보드 |
페이지·레이아웃·메뉴·콘텐츠 요약 |
|
사이트 |
이름, 소개, 테마 팩, 새 페이지용 기본 레이아웃 |
|
레이아웃 |
헤더·푸터·주 메뉴 등 공통 크롬. |
|
사이드바 |
|
|
페이지 |
경로·제목·발행/초안·공개 범위·본문·모듈 배치·미리보기 |
|
모듈 |
등록된 모듈 종류와 게시판 목록. 새 게시판은 페이지·메뉴까지 한 번에 생성 |
|
첫 화면 |
홈의 최근 글 위젯(게시판·개수·너비) |
|
테마 팩 |
공개 스킨 목록·적용. 기본 팩은 |
|
메뉴 |
주 메뉴 항목(페이지 또는 경로) |
|
회원·게시물·댓글 |
운영 콘텐츠 관리 |
페이지는 발행이어야 비로그인 방문자가 봅니다. 초안은 스태프가 ?preview=1로만 봅니다. 공개 범위는 공개 / 로그인 / 스태프이며, 볼 수 없으면 404입니다.
공개 사이트
-
홈(
/), 검색(/search/), 페이지 경로(/about/등) -
히어로, 본문, 배너, 이미지, 최근 글, 검색창, 로그인 박스
-
SEO 메타, 사이트맵(
/sitemap.xml) -
라이트/다크 토글(쿠키
theme). 플래시 알림은 오른쪽 하단 토스트(5초) -
PWA:
/manifest.webmanifest,/sw.js. 설치는 HTTPS 또는 localhost에서만 됩니다
게시판
-
목록 · 글쓰기 · 글보기 · 수정 · 삭제 · 댓글
-
읽기/쓰기/댓글 권한을 게시판마다 공개 · 로그인 회원 · 스태프만으로 지정
-
비밀글, 초안/발행, 페이지당 글 수
-
본문은 TinyMCE로 작성하고, 저장·렌더 때 nh3로 소독합니다 (
|richtext)
글쓰기 기본값은 스태프입니다. 공개 가입이 열려 있어도 공지 보드에 외부 가입자가 바로 쓰지 못합니다.
인증
-
이메일 로그인, UUID 사용자, 닉네임(공개 표시명)
-
가입 시 이메일 인증 전까지 로그인 불가. 닉네임·이메일 중복은 HTMX로 실시간 검사
-
비밀번호 재설정. 존재하지 않는 이메일도 성공 안내를 같게 보여 계정 존재를 드러내지 않습니다
-
로그인·가입·재설정 POST는 rate limit. 초과 시 429
-
비밀번호는 Argon2, 최소 12자. 소셜 로그인·2FA는 없습니다
역할: 슈퍼유저(createsuperuser), 레이아웃 관리자·편집자(부트스트랩이 만드는 그룹).
운영·보안
-
CSP, CSRF,
X-Frame-Options: DENY. 템플릿|safe와 인라인 스크립트/스타일은 원칙 금지 -
400 / 403 / 404 / 429 / 500 페이지
-
SQLite 백업:
uv run python manage.py backup_db -
운영 설정은 필수 비밀값이 없으면 기동을 중단합니다
-
manage.py가 Git 훅을 설치합니다. 커밋 때 ruff·마이그레이션, 푸시 때 CI와 같은./scripts/check.sh
지난번보다 확실히 CMS의 형태가 잡혀가는 느낌이네요.
Django + HTMX 조합도 장서방의 방향성과 잘 맞아 보이고요.
과정을 보니 역시 CMS는 아무나 만들게 아니구나 생각만 계속 맴돕니다... 그 말은 정말 대단하세요.... 👍