DedSec 21 4
게시물 메뉴

현재까지 만든 장서방 시스템의 기능을 정리했습니다. 여기에서 어떻게 하나씩 추가해 나가고 있는지 진행공유를 하면 의미가 있을 것 같아서요.

* 프로젝트명: 장서방(장고 기반으로 만들었고, 이런 저런 일들 책임감 있게 시킬 수 있는 솔루션으로 키우고 싶어서 서방이라고 붙임, 그래서 장서방)

* 빌드 목적: 게시판 중심의 커뮤니티 사이트를 쉽고 간편하게 만들어 확장할 수 있는 장고 기반 CMS

* 스택: 장고, htmx, bulma css, sqlite3

 

아래 내용은 README.md 파일을 그록빌드에게 만들어 달라고 한 내용을 복붙합니다. 요즘은 이런 내용은 직접 수제작성하기 귀찮아서요. 

 


특성

항목

내용

스택

Django 5.2 LTS, Python 3.13, HTMX, Bulma, SQLite3

패키지

uv. pyproject.tomluv.lock을 커밋합니다

프론트

서버 렌더 HTML. SPA, Tailwind, DRF, Alpine.js 없음

설치 모델

단일 사이트 · 단일 인스턴스. 멀티테넌트 없음

디자인

블랙·진한 그레이·화이트 사무 스타일. 라이트 기본, 다크는 색 스키마 토글

로케일

ko-kr, Asia/Seoul

  • 모듈 종류는 코드 레지스트리입니다. 편집자가 파이썬을 저장하지 않습니다. DB에는 어느 슬롯에, 어떤 설정으로 꽂혔는지만 둡니다.

  • 테마 팩은 공개 화면 스킨입니다. 라이트/다크 색 스키마와는 별개입니다.

  • CDN을 쓰지 않습니다. HTMX, Bulma, TinyMCE, Feather Icons는 static/vendor/에 버전을 고정합니다.

  • JSON API는 기본 제공하지 않습니다. 권한은 HTMX 여부와 무관하게 서버에서 검사합니다.

기능

사이트 빌더 (/back-office/)

로그인 + 스태프 + cms.view_builder가 필요합니다.

화면

하는 일

대시보드

페이지·레이아웃·메뉴·콘텐츠 요약

사이트

이름, 소개, 테마 팩, 새 페이지용 기본 레이아웃

레이아웃

헤더·푸터·주 메뉴 등 공통 크롬. landing(1열), default(사이드바)

사이드바

default 레이아웃의 옆칸 모듈

페이지

경로·제목·발행/초안·공개 범위·본문·모듈 배치·미리보기

모듈

등록된 모듈 종류와 게시판 목록. 새 게시판은 페이지·메뉴까지 한 번에 생성

첫 화면

홈의 최근 글 위젯(게시판·개수·너비)

테마 팩

공개 스킨 목록·적용. 기본 팩은 cms-office

메뉴

주 메뉴 항목(페이지 또는 경로)

회원·게시물·댓글

운영 콘텐츠 관리

페이지는 발행이어야 비로그인 방문자가 봅니다. 초안은 스태프가 ?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