파일만 올리면 돌아갑니다. 속은 현대적으로.
Docker 한 줄, 또는 FTP 업로드로 설치하는 오픈소스 CMS.
Next.js · NestJS · PostgreSQL · TypeScript
# Docker — 명령 세 줄 curl -O https://raw.githubusercontent.com/bonjin-app/brick/main/docker-compose.yml echo "BRICK_SECRET=$(openssl rand -base64 32)" > .env docker compose up -d # 또는 FTP 업로드 — 빌드 불필요 # 배포본을 올리고 실행하면 브라우저에서 설치 node server.js # → 사이트에 접속하면 설치 화면
설치할 때 사이트 유형을 고르면 홈·페이지·게시판·메뉴가 통째로 만들어집니다. 할 일은 내용을 자기 것으로 바꾸는 것뿐입니다.
만들어진 것은 전부 일반 페이지·게시판·메뉴입니다 — 페이지 빌더에서 그대로 수정합니다. 직접 만들고 싶다면 빈 사이트를 고르면 됩니다.
아래는 쇼핑몰 스타터로 설치한 직후, 상품 네 개를 등록한 실제 화면입니다. 꾸민 목업이 아니라 그대로의 스크린샷입니다.
한국에서 사이트·쇼핑몰을 운영하면 지켜야 하는 것들이 있습니다. Brick은 운영자가 실수로도 어길 수 없게 만들었습니다.
가입 시 필수 동의, 개정 시 재동의, 동의 이력 보존. IP는 해시로만 저장합니다.
사유별 반송비 부담(불량은 사업자 — 고객 청구는 위법), 물건을 받기 전에는 환불되지 않습니다.
광고는 동의자에게만 — 끌 수 없는 조건입니다. (광고) 표기 강제, 로그인 없는 수신거부, 발송 직전 동의 재확인.
카드 결제 이중 발급 거부, 면세 상품 금액 분해, 반품 시 증빙 자동 취소, 부가세 신고 자료.
개인정보는 파기하고 법정 보존 의무가 있는 주문 기록만 작성자를 끊고 남깁니다.
사업자등록번호 체크섬을 실제로 검증하고 테마가 자동으로 렌더합니다.
오래 살아남은 CMS 들의 공통점은 언어가 좋아서가 아니라, 파일을 올리면 그냥 돌아갔기 때문입니다. 현대 스택은 강력하지만 설치가 어려워졌습니다. Brick은 그 편의성을 되찾는 프로젝트입니다.
Docker는 docker compose up -d 한 줄. FTP는 파일을 올리고 브라우저에서 DB 정보만 입력하면 됩니다.
docker compose pull && up -d 또는 파일 덮어쓰기 후 재시작. DB 스키마는 부팅할 때 스스로 최신으로 맞춥니다.
워드프레스와 똑같습니다. 관리자에서 plugin.zip / theme.zip을 올리면 설치됩니다. 서버에서 빌드하지 않습니다.
테마는 런타임 템플릿(HTML)입니다. React를 몰라도 만들 수 있고, 업로드하면 즉시 반영됩니다.
Redis 없이 동작합니다. 캐시·큐·락을 PostgreSQL로 구현하고, Redis는 규모가 커질 때 켜는 선택지입니다.
테마가 문서 전체를 소유하는 SSR입니다. 검색엔진은 완성된 HTML을 그대로 받습니다.
E2E 스모크 2,479개가 실제 PostgreSQL과 실제 서버 프로세스를 띄워 돕니다. 재고 동시성·금액 위조·저장형 XSS·로그인 CSRF처럼 틀리면 돈이나 계정을 잃는 경로를 항목으로 못박아 두었습니다.
설계 결정 77건을 ADR로 기록했습니다. "왜 이렇게 되어 있나"에 답할 수 있는 코드가 오래 삽니다.
설치형 CMS로서 무엇을 지키고 무엇을 바꿨는지.
| 항목 | 기존 PHP 게시판 | WordPress | Brick |
|---|---|---|---|
| 언어 | PHP | PHP | TypeScript |
| DB | MySQL | MySQL | PostgreSQL |
| 설치 | FTP 업로드 | FTP 업로드 | Docker 한 줄 · 또는 FTP 업로드 |
| 업데이트 | 파일 수동 교체 | 관리자 클릭 | 파일 교체 + 자동 마이그레이션 |
| 플러그인 | 제한적 | ZIP 업로드 | ZIP 업로드 |
| 테마 | 스킨(PHP) | 테마(PHP) | 런타임 템플릿(빌드 없음) |
| 페이지 빌더 | 없음 | Gutenberg | 코어 기본 제공 |
| 게시판 | 핵심 기능 | 플러그인 | 첨부 · 권한 · 답변형 · 비밀글 |
| 쇼핑몰 | 별도 설치 | WooCommerce | 플러그인 기본 동봉 |
| 상품 후기 | 쇼핑몰 패키지에 포함 | 플러그인 | 구매 검증 · 판매자 답변 |
| 포인트 · 적립금 | 둘로 나뉘어 있음 | 플러그인 | 한 원장에서 · 만료 · FIFO |
| 소셜 로그인 | 플러그인 | 플러그인 | 코어 내장 (5종 + 사내 SSO) |
| 방문자 집계 | 있음 (IP 원문 저장) | 플러그인 | 있음 (IP를 해시로만 저장) |
| 약관 동의·이력 | 있음 | 플러그인 | 개정 시 재동의 · IP는 해시로만 |
| 회원 탈퇴 | 있음 | 있음 | 파기 + 주문은 법정 보존(5년) |
| 1:1 문의 | 있음 (게시판 기반) | 플러그인 | 전용 · 기본이 비공개 |
| FAQ | 있음 | 플러그인 | 검색 · 조회수 · 유용성 평가 |
| 설문조사 | 있음 | 플러그인 | IP를 해시로만 · 결과 공개 시점 선택 |
| 사업자정보 표시 | 있음 | 플러그인 | 사업자번호 체크섬 검증 · 테마 자동 렌더 |
| 위시리스트 | 보관함 | 플러그인 | 비회원도 사용 · 로그인 시 이어받기 |
| 지역별 배송비 | 있음 | 플러그인 | 우편번호 구간 (주소 문자열 아님) |
| 주문 취소·반품·교환 | 쇼핑몰 패키지에 포함 | WooCommerce | 상품 단위 · 할인 안분 · 청약철회 7일 |
| 기존 사이트 데이터 이전 | — | — | 회원·게시글·상품·주문 · 비밀번호 보존 |
| sitemap.xml | 별도 플러그인 | 플러그인(Yoast 등) | 코어 내장 · 플러그인이 URL 제공 |
| SSR / SEO | 기본 | 기본 | Next.js SSR + ISR |
| 타입 안전성 | 없음 | 없음 | 전 구간 strict |
| API | 제한적 | REST | REST · OpenAPI 자동 생성 (라우트에서) |
| 다국어 | 언어팩 부분 지원 | 기본 | ko/en — 공개 · 관리 · 플러그인 전부 |
| 관리자 대시보드 | 있음 | 있음 | 오늘 방문자·주문·글·문의 — 플러그인이 카드 등록 |
Brick은 순수 PHP 호스팅(Node 없음)에서는 동작하지 않습니다 — Node 런타임이 필요합니다. Docker, 또는 Node.js를 지원하는 호스팅(cPanel/Plesk의 "Node.js App", VPS)이 필요합니다. 그 환경이라면 FTP로 올려서 브라우저에서 설치하는 방식이 동작합니다.
사용자에게는 앱 컨테이너 하나와 PostgreSQL 하나로 보입니다.
사용자 / 검색엔진
│ :3000 (유일한 공개 포트)
┌──────▼──────┐
│ Next.js │ SSR · ISR · 관리자 UI
└──────┬──────┘
│ :3001 (내부 전용)
┌──────▼──────────────────────┐
│ Brick Runtime │
│ NestJS · 단일 프로세스 │
│ ┌───────────────────────┐ │
│ │ Core HookBus │ │
│ │ Plugins 동적 로드 │ │
│ │ Themes 런타임 템플릿 │ │
│ └───────────────────────┘ │
└──────┬──────────────────────┘
│
PostgreSQL ← 유일한 필수 의존성
(Redis · S3는 선택 — 없으면 PG 기반 기본 구현)
플러그인은 사전 빌드된 JS, 테마는 HTML. 둘 다 ZIP으로 배포합니다.
npm create brick-plugin my-plugin — 빈 껍데기가 아니라 동작하는 방명록이 나옵니다. 라우트·블록·관리 화면·마이그레이션·개인정보 파기까지 계약 전부를 한 번씩 씁니다.definePlugin((ctx) => { ctx.registerRoute(...); ctx.registerBlock(...) }) 하나로 REST API와 페이지 빌더 블록을 등록합니다. 관리 화면은 선언 한 번으로 자동 생성됩니다.migrations/*.sql을 담으면 활성화 시점에 자동 적용됩니다. 코어 스키마를 건드리지 않습니다.{{ 변수 }}, {{{ HTML }}}, {{#if}}, {{#each}}. 로직이 필요하면 블록으로 만듭니다./api/docs 에 자동 문서화됩니다.Brick은 초기 개발 단계입니다. 아래 기능은 동작하며, 프로덕션 사용 전 검토를 권합니다.
설치 마법사(사이트 유형 스타터) · 회원(약관 동의 · 이메일 인증 · 탈퇴 · 휴면 · 2단계 인증 · 세션 관리 · 위험 작업 재인증 · 관리자 IP 제한) · 소셜 로그인 · 페이지 빌더 · 미디어 · 메뉴(연결 대상 선택) · 통합검색 · 검색 분석 · 게시판 · 쪽지 · 포인트 · 1:1 문의 · FAQ · 설문조사 · 방문자 집계 · 팝업/배너 · 단체메일 · 쇼핑몰(후기 · 옵션 · 취소/반품/교환 · 위시리스트 · 지역별 배송비 · 관련 상품 · 재입고 알림 · 기획전 · 회원 등급 · 쿠폰함 · 정기결제) · 결제(토스페이먼츠) · 개인결제 · 판매 리포트 · 현금영수증 · 세금계산서 · 부가세 자료 · 데이터 이전(이미지 주소 자동 변환) · 원클릭 업데이트(Ed25519 서명) · 플러그인 레지스트리 · OpenAPI 문서 · 개발 템플릿 · sitemap.xml · 감사 로그 · 자동 마이그레이션 · 백업 CLI
완성형 정의 네 문장의 코드 요건은 전부 충족됐습니다. 다국어(i18n)까지 닫혔습니다. 남은 것: SDK npm 공개 · 첫 릴리스 — 완성형 정의와 로드맵