매뉴얼 목록
MUBLO MANUAL

Mublo 게시판 매뉴얼

게시판 개설·권한·콘텐츠 운영부터 게시판·커뮤니티·블록 스킨 제작까지 다루는 통합 매뉴얼

게시판 시작하기

Board 패키지는 게시판 그룹, 게시판, 공용 카테고리, 게시글·댓글·첨부파일·반응, 포인트 정책, 커뮤니티와 블록 연동을 제공합니다.

권장 개설 순서

  1. 관리자 > 확장 기능에서 Board 패키지를 활성화하고 마이그레이션을 완료합니다.
  2. Mublo Board > 게시판 그룹에서 그룹과 기본 권한을 만듭니다.
  3. 필요한 공용 카테고리를 등록합니다.
  4. 게시판 관리에서 그룹, 슬러그, 권한, 기능, 스킨을 지정합니다.
  5. 메뉴 관리에서 /board/{게시판슬러그} 또는 /community를 배치합니다.
  6. 비회원·일반 회원·관리자 계정으로 목록, 읽기, 쓰기, 댓글, 다운로드 권한을 각각 확인합니다.
화면주소용도
대시보드/admin/board/dashboard게시판 활동 현황
게시판 그룹/admin/board/group게시판 묶음과 기본 권한
카테고리/admin/board/category여러 게시판에서 선택해 쓰는 분류
게시판 관리/admin/board/config게시판별 상세 설정
게시글 관리/admin/board/article게시글 검색·작성·상태 변경
포인트 설정/admin/board/point활동별 적립·소비 정책

슬러그는 프론트 URL의 일부입니다. 운영을 시작한 뒤 바꾸면 기존 링크와 검색 색인이 끊길 수 있으므로 개설 단계에서 확정하십시오.

그룹과 대시보드

대시보드

게시글·댓글·조회·활성 게시판 등 현재 도메인의 현황을 먼저 확인합니다. 이상 급증이 보이면 게시글 관리에서 게시판과 상태를 좁혀 원문을 점검합니다.

게시판 그룹

그룹은 게시판을 묶는 운영 단위이자 권한 기본값입니다. 슬러그는 /community/group/{slug}에 사용되고, 비활성 그룹의 게시판은 커뮤니티에서 표시되지 않습니다.

  • 기본 권한: 목록 보기, 글 읽기, 글쓰기, 댓글 쓰기, 다운로드 레벨을 지정합니다.
  • 그룹 관리자: 그룹을 저장한 뒤 회원 아이디를 검색해 추가합니다.
  • 게시판 목록: 편집 화면에서 소속 게시판과 활성 상태를 확인하고 새 게시판을 바로 추가할 수 있습니다.

게시판에 별도 권한을 저장하면 그룹 기본값보다 게시판 설정이 우선합니다. 그룹 권한을 바꾼 뒤에는 예외 게시판도 함께 검토하십시오.

게시판 설정

게시판 관리에서 게시판을 만들거나 수정합니다.

영역주요 설정
기본 정보그룹, 슬러그, 게시판명·설명, 사용 여부, 전역 게시판 여부
권한목록·읽기·쓰기·댓글·다운로드 레벨, 레벨별 1일 글/댓글 작성 제한
UI게시판 스킨, 에디터, 상단 공지 수, 페이지당 글 수
기능비밀글, 전체 비밀 게시판, 카테고리, 파일, 링크, 댓글, 반응
반응키·이모지·라벨·색상·사용 여부와 노출 순서
파일첨부 개수, 파일당 크기, 허용 확장자
  • 비밀글 사용은 작성자가 글마다 선택하고, 비밀 게시판은 모든 글을 비밀글로 만듭니다.
  • 반응을 끄면 기존 집계는 보존되지만, 반응 항목을 삭제하면 해당 유형의 누적 데이터도 삭제될 수 있습니다.
  • 페이지당 글 수가 0이면 도메인의 기본 목록 수를 사용합니다.
  • 전역 게시판은 여러 도메인에서 읽힐 수 있으므로 도메인별 게시판과 같은 감각으로 사용하지 마십시오.
카테고리와 권한

카테고리

카테고리는 도메인 공용으로 만든 뒤 각 게시판 설정에서 사용할 항목만 체크하고 드래그해 순서를 정합니다. 사용 중인 카테고리는 연결된 게시판에서 먼저 해제해야 삭제할 수 있습니다.

권한 판단

일반 접근 레벨은 그룹 기본값 위에 게시판 설정이 적용됩니다.

게시글의 읽기·다운로드 레벨이나 게시판-카테고리 매핑에 별도 값이 있으면 더 구체적인 설정이 우선합니다.
관리자 권한은 별도의 권한 데이터도 함께 확인합니다.

  • 목록을 볼 수 있어도 개별 글 읽기 권한이 없을 수 있습니다.
  • 글을 읽을 수 없는 사용자는 댓글 작성과 첨부 다운로드도 허용되지 않습니다.
  • 비밀글은 작성자와 허용된 관리자 등 별도 조건을 통과해야 합니다.
  • 비회원 글은 작성 시 비밀번호를 받고, 확인된 글 ID를 세션에 보관해 수정·삭제를 허용합니다.

권한 문제를 확인할 때는 화면에서 버튼이 보이는지만 보지 말고 실제 목록·상세·쓰기·댓글·다운로드 요청이 차단되는지 테스트하십시오. 최종 권한은 Service 계층에서 다시 검사합니다.

콘텐츠 운영

게시글 관리에서는 게시판, 상태, 검색 항목과 키워드로 글을 찾고 새 글을 등록합니다. 여러 글을 선택해 발행·임시저장·삭제 상태로 일괄 변경할 수 있습니다.

운영 원칙

  1. 공지글은 게시판의 상단 고정 개수와 함께 운용합니다.
  2. 비밀글·비밀댓글은 비로그인 브라우저에서 본문이 숨겨지는지 확인합니다.
  3. 신고·블라인드 같은 추가 동작은 Board 하위 플러그인이 상세 화면의 추가 액션으로 공급할 수 있습니다.
  4. 삭제 전 첨부파일, 댓글, 포인트 회수 등 연관 효과를 확인합니다.

프론트의 대표 주소는 목록 /board/{slug}, 상세 /board/{slug}/view/{글번호}, 쓰기 /board/{slug}/write, 커뮤니티 /community입니다.

글·댓글·첨부파일

글과 댓글

  • 글 작성·수정 본문은 게시판 전용 정화기를 거쳐 저장됩니다.
  • 비회원 글은 이름과 비밀번호가 필요하며, 비밀번호 확인 전에는 관리 작업을 할 수 없습니다.
  • 비밀댓글 본문은 댓글 작성자, 글 작성자 또는 관리 권한이 있는 사용자에게만 노출됩니다.
  • 조회수는 당일 쿠키를 사용해 같은 브라우저의 반복 증가를 줄입니다.

첨부와 링크

  • 첨부파일은 게시판별 개수·크기·확장자 정책을 모두 통과해야 합니다.
  • 다운로드는 글 읽기와 다운로드 권한을 다시 검사하며, 필요한 경우 포인트도 차감합니다.
  • 관련 링크 기능을 켜면 URL과 제목을 저장하고 OG 정보가 사용될 수 있습니다.

업로드 일부가 거절되어도 글은 먼저 저장될 수 있으며, 거절된 파일 사유는 경고로 반환됩니다. 등록 완료 뒤 첨부 목록까지 확인하십시오.

포인트·커뮤니티·블록

포인트

게시글 작성, 댓글 작성, 반응 받기는 적립 항목이며 게시글 읽기와 파일 다운로드는 소비 항목입니다. 정책은 게시판별 → 그룹별 → 도메인 기본값 순서로 해석됩니다.

  • 적립 항목은 삭제 시 회수 여부를 선택할 수 있습니다.
  • 소비 항목은 잔액이 부족하면 접근이 차단됩니다.
  • 본인이 쓴 글 읽기는 차감하지 않으며, 같은 대상에 대한 중복 차감은 멱등 키로 방지됩니다.
  • 반응 받기 포인트는 반응 유형별 값으로 덮어쓸 수 있습니다.

커뮤니티와 블록

/community는 접근 가능한 활성 게시판을 모아 최신글·인기글과 그룹 탭을 제공합니다. 블록 편집기에서는 다음 콘텐츠 타입을 사용할 수 있습니다.

타입선택 항목기본 스킨
board게시판basic, gallery, thumb
boardcomment게시판basic
boardgroup게시판 그룹basic, basic-tab, gallery

게시판 스킨 제작

게시판 콘텐츠 스킨은 packages/Board/views/Front/Board/{skin}/에 둡니다. 관리자 게시판 설정의 게시판 스킨 목록은 이 디렉터리를 탐색해 구성됩니다.

packages/Board/views/Front/Board/my-board/
├── List.php
├── View.php
├── Write.php
├── Password.php
└── _assets/
    ├── css/board.css
    └── js/board.js
  1. basic의 네 PHP 파일을 계약 참고용으로 읽습니다.
  2. 새 폴더를 만들고 필요한 화면과 에셋을 작성합니다.
  3. 게시판 설정에서 새 스킨을 선택해 저장합니다.
  4. 목록·상세·작성·수정·비회원 비밀번호 화면을 모두 확인합니다.

Board의 프론트 콘텐츠 스킨은 Controller가 선택한 스킨 파일을 직접 지정합니다.

선택한 폴더에 필요한 PHP 파일을 모두 두십시오.
Mublo Shop과 달리 누락된 파일을 basic으로 자동 폴백하지 않습니다.

화면별 데이터 계약
파일주요 변수
List.php$board, $notices, $items, $pagination, $filters, $categories, $canWrite
View.php$article, $board, $prev, $next, 권한 플래그, $attachments, $links, $comments, $reactionInfo, $enabledReactions, $extraActions
Write.php$board, $article, $isEdit, $isLoggedIn, $categories, $attachments, $links
Password.php$boardSlug, $articleId, $board

$items$articleArticlePresenter 변환을 거칩니다. 대표 공개 필드는 다음과 같습니다.

  • 원본 표시값: article_id, title, content, author_name, category_name, thumbnail
  • URL: url, edit_url
  • 날짜: date_raw, date_full, date_short, date_compact, date_time, date_relative, date_ymd
  • 표시 보조: title_safe, author_name_masked, badges, is_new, is_updated
  • 통계: view_count_formatted, comment_count_formatted, reaction_count_formatted

공통 사이트·회원·요청 정보는 $mublo에서 읽습니다. 스킨에서 DB, Repository, 세션이나 컨테이너를 직접 조회하지 마십시오.

폼·에셋·보안

에셋

$this->assets->addCss(
    '/serve/package/Board/views/Front/Board/my-board/_assets/css/board.css'
);
$this->assets->addJs(
    '/serve/package/Board/views/Front/Board/my-board/_assets/js/board.js'
);

출력과 요청

  • title_safe, Presenter가 가공한 작성자명처럼 계약상 이스케이프된 필드와 원본 필드를 구분합니다.
  • 그 밖의 텍스트와 URL 속성은 e() 또는 htmlspecialchars()로 이스케이프합니다.
  • 게시글 본문은 서버 정화 후 전달되므로 상세 화면에서 HTML로 출력합니다. 임의 입력을 같은 방식으로 출력하지 마십시오.
  • 작성 폼의 필드명과 엔드포인트는 basic/Write.php 계약을 유지합니다. JSON 요청은 공통 MubloRequest를 사용합니다.
  • 버튼 노출은 $canWrite, $canModify, $canDelete, $canComment, $canReact, $canDownload를 따릅니다.

버튼을 숨기는 것은 보안 경계가 아니지만, 허용되지 않은 동작을 안내하지 않는 올바른 UI를 만드는 데 필요합니다. 서버 권한 검사는 기존 엔드포인트가 담당합니다.

커뮤니티·마이페이지·블록 스킨
대상경로핵심 계약
커뮤니티views/Front/Community/{skin}/Index.php$items, $pagination, $filters, $groups, $currentGroup, $sortBy
마이페이지views/Front/Mypage/{skin}/허브 통계와 내가 쓴 글·댓글 목록
게시판 블록views/Block/board/{skin}/{skin}.php$items, $board, 공통 블록 변수
댓글 블록views/Block/boardcomment/{skin}/{skin}.php$itemsCommentPresenter 변환 결과
그룹 블록views/Block/boardgroup/{skin}/{skin}.php$group, $boardsData, $displayType

블록 스킨의 CSS·JS는 같은 폴더에 두며 기존 스킨의 AssetManager 등록 방식을 따릅니다. 데이터가 비어 있거나 대상 게시판이 비활성·삭제된 경우에도 오류 없이 빈 상태를 렌더해야 합니다.

views/Front/frame/은 Board 전용 프레임 오버라이드용 스캐폴드이지만 현재 런타임 선택 배선은 완료되지 않았습니다. 사이트 프레임 변경은 Core 프레임 스킨을 사용하십시오.

배포 전 점검
  • List.php, View.php, Write.php, Password.php가 모두 존재합니다.
  • 빈 목록, 공지, 카테고리, 검색, 페이지 이동을 확인했습니다.
  • 일반 글·비밀글·비회원 글과 이전/다음 글을 확인했습니다.
  • 댓글·비밀댓글·반응·추가 액션의 사용/미사용 상태를 확인했습니다.
  • 첨부 없음/있음, 다운로드 불가, 링크 없음/있음을 확인했습니다.
  • 비로그인, 낮은 레벨, 작성자, 그룹 관리자, 최고관리자 권한을 확인했습니다.
  • 모바일에서 표·폼·긴 제목·긴 본문이 넘치지 않습니다.
  • 사용자 텍스트와 속성값을 이스케이프하고, 스킨에서 DB나 세션을 직접 읽지 않습니다.
  • 게시판 블록과 커뮤니티에서 비활성·삭제 대상이 빈 상태로 안전하게 표시됩니다.
  • composer check를 통과했습니다.