Files
Gnuboard7/modules/_bundled/sirsoft-board/CHANGELOG.md
T
HeuJung 90f154ecc0 fix(security): 배포본 소스맵 노출 차단 + 관리자 설정 탭 지연로딩 + 동반 결함 수정
## 소스맵 노출 차단 (공개 이슈 )

배포본에 .map 이 포함돼 원본 TS/TSX 전문(sourcesContent, 한글 주석 포함)이
그대로 노출됐다. 생성·서빙·저장소 유입 3계층을 모두 막는다.

- 빌드 config 15곳(코어 3 + _bundled 12): sourcemap 하드코딩 제거.
 G7_BUILD_SOURCEMAP 판정식으로 교체 — 미설정(로컬 npm run build)이면 생성해
 개발 디버깅 경험을 보존하고, 0 이면 미생성.
- Build{Core,Module,Plugin,Template}Command: 죽어 있던 --production 플래그 복구.
 $productionMode 를 콘솔 문자열에만 쓰고 npm 프로세스에 env 를 넘기지 않아
 산출물이 개발 빌드와 동일했다. runNpmCommand 에 $env 를 추가해 주입
 (--watch 에는 미주입). Symfony Process 는 부모 환경에 병합하므로 PATH 유실 없음.
- Allowed{Module,Plugin}FileType / {Module,Plugin}Service::getMimeType:
 허용 확장자 map 제거 — 익명 200 서빙 차단(템플릿은 원래 미허용, 3종 정책 일치).
- ExtensionBundleService: CSS 번들의 /*# sourceMappingURL=... */ strip 추가.
 CSS 는 블록 주석이라 JS 의 //# 패턴으로는 검출되지 않던 구멍.
- 추적 .map 13개 삭제 + .gitignore 전역 *.map 규칙(경로 한정 시 새 확장에서 누락).

실측: 산출 JS 의 sourceMappingURL 13 → 0, 추적 .map 13 → 0,
확장 디렉토리 npm run build 는 여전히 map 생성(개발 경험 회귀 없음).

## 관리자 환경설정 탭 지연 로딩

코어/이커머스/게시판 환경설정 화면이 진입 즉시 전 탭의 데이터소스를 한꺼번에
호출했다. 각 데이터소스에 활성 탭 조건(if)을 걸어 해당 탭에서만 fetch 하도록
변경하고, 결제 플러그인 3종의 테스트모드 상태 조회도 주문설정 탭으로 한정.

## 동반 결함 수정 (무관 결함 — 재발 방지 목적으로 같은 세션 처리)

- 나이스페이먼츠: 체크아웃 캐시 프리페치가 라우트를 가리지 않아 플러그인 번들이
 로드되는 모든 페이지(홈/게시판/로그인)에서 주문서를 조회 → 비회원 매번 422.
 형제 플러그인(kginicis)의 기존 가드 패턴을 적용해 체크아웃 경로로 한정.
- admin smoke 8건: 대부분 구현이 아니라 테스트 결함이었다 — URL 오타(단수 board),
 존재하지 않는 권한키, 앱 로케일이 en 인데 한국어 라벨 로케이터, DataGrid 버튼을
 먼저 잡던 휴리스틱 로케이터. 레이아웃에는 sticky className / 안정 id 를 부여.
- PHPDoc ↔ Pint 충돌 3건: 설명 없는 @param 은 no_superfluous_phpdoc_tags 가
 삭제해 audit phpdoc-public-method 와 무한 충돌. 한국어 설명을 붙여 양쪽 충족
 (리스너 3종의 설명 누락 메서드도 전수 보강).
- Log::spy 500 3건: spy 가 Log::channel('activity') 를 null 로 만들고
 logActivity 가 null->info 로 \Error → 같은 줄 catch(\Exception) 은 못 잡아
 통과. 운영에선 채널이 항상 로거이므로 제품 무결 → 테스트에 activity 채널
 보존 헬퍼 추가.
- NhnKcpApiServiceTest 5건: 스텁이 Unix 바이너리만 만들어 Windows 분기
 (pp_cli_exe.exe)에서만 실패. #!/bin/sh 는 Windows 실행 불가 → 파일 내 기존
 컨벤션대로 skip 가드.

## 테스트

- 소스맵 범위 130 passed (신규: BuildCommandSourcemapEnv, NoSourcemapArtifacts,
 ExtensionBundleService CSS strip, Allowed*FileType 반전, 자산 서빙 거부)
- 결제 3플러그인 505 passed / 0 failed (skipped 9 = Windows 전용 CLI, 사유 명시)
- 나이스페이먼츠 프론트 38 passed (가드 제거 시 red 실증 후 복원)
- E2E: production-sourcemap-exposure.spec.ts 6건 + 시나리오 매니페스트

버전: sirsoft-admin_basic 1.0.2 → 1.0.3, sirsoft-board 1.0.1 → 1.0.2
(각 manifest/package/lock/composer 동기화). 코어 7.0.4 는 미출시 누적.
2026-07-14 12:50:23 +09:00

59 KiB

Changelog

이 프로젝트의 모든 주요 변경사항을 기록합니다. 형식은 Keep a Changelog를 따르며, Semantic Versioning을 준수합니다.

[1.0.2] - 2026-07-14

Fixed

  • 게시판 설정 화면의 상단 고정 영역이 좌우 여백과 어긋나 내용이 가로로 밀려 보일 수 있던 문제를 수정했습니다.

[1.0.1] - 2026-07-08

Added

  • 관리자 게시물 조회 화면(목록·상세)에 "유저 화면 보기" 버튼을 추가했습니다. 클릭하면 해당 게시판/게시글의 실제 사용자 화면이 새 탭으로 열립니다.
  • 사용자 게시판 화면(목록·상세)에 관리자 진입 버튼을 추가했습니다. 게시판 관리 권한이 있는 사용자에게만 "관리자 게시물 조회"·"게시판 관리" 버튼이 보이며, 클릭하면 관리자 화면이 새 탭으로 열립니다.

Changed

  • 관리자 게시판 설정 화면의 주소가 게시판 번호 대신 게시판 아이디(슬러그) 기준으로 바뀌었습니다 (예: /admin/boards/free/edit). 새 게시판을 만든 직후 이동하는 편집 화면, 목록의 활성화 토글·삭제, 목록에서 여는 수정 화면, 상품 문의 설정의 "관리자 메뉴에 추가"까지 모두 게시판 아이디 기준으로 통일되었습니다. 기존 번호 기반 주소도 계속 동작합니다.

[1.0.0] - 2026-07-01

Added

  • 관리자 대시보드의 게시판 "오늘 새 글/새 댓글" 배지를 클릭하면 게시판 관리 화면으로 바로 이동합니다.
  • 게시판 생성/수정 화면에 "관리자 메뉴에 표시" 토글을 추가했습니다. 켜고 저장하면 좌측 관리자 메뉴의 "게시판 관리" 아래에 해당 게시판이 표시되고, 끄고 저장하면 메뉴에서 제거됩니다. 이전에는 게시판을 만든 뒤 수정 화면에서만 메뉴에 추가할 수 있었습니다. 게시판을 복사할 때도 원본의 관리자 메뉴 표시 상태가 복사본에 그대로 이어집니다.

레이아웃 편집기

  • 게시판 화면을 샘플 데이터로 미리보고 편집할 수 있습니다 — 게시글 목록·상세·댓글, 게시판 관리/신고 화면이 샘플 데이터로 표시되며, 일반 글/비밀글 잠금, 글 있음/없음 같은 화면 상태도 미리보기로 전환해 볼 수 있습니다.
  • 화면 상태 미리보기를 더 많은 게시판 화면으로 넓혔습니다 — 게시판 목록의 비어 있음, 글 작성/수정, 관리자의 게시판·게시글 폼(신규/수정/답글), 그리고 게시판 설정의 모든 탭(일반·기본값·신고 정책·스팸 보안·SEO·알림 정의·본인인증 정책)을 전환해 미리볼 수 있습니다.
  • 데이터 소스 목록에서 이 확장이 제공하는 데이터 소스가 친화 명칭으로 표시되고, 어느 확장이 제공했는지 출처가 함께 표시됩니다.
  • [검색엔진] 탭에서 게시글의 공유 이미지·제목·구조화 데이터 등 이 확장이 제공하는 SEO 자동값이 "게시글 제목"·"대표 이미지" 같은 데이터 연결 칩(출처 표시 포함)으로 보이고, 다른 데이터로 바꿔 지정할 수 있습니다.

관리자 대시보드 게시판 영역

  • 관리자 대시보드 상단에 게시판 / 신고 빠른 진입 버튼을 추가 — 게시판 모듈이 활성화된 환경에서만 노출되며, 비활성화 시 자동으로 사라짐
  • 관리자 대시보드 중앙에 게시판 통계 카드 영역 추가 — 오늘의 새 글·새 댓글 배지, 7일 게시글·댓글 추세 그래프(직전 7일 대비 증감율 포함), 최신 게시글 5건, 미처리 신고 5건 카드로 구성. 라이트/다크 모드 양쪽에서 텍스트·구분선·배지가 일관되게 보이도록 색상 페어 적용
  • 게시판 모듈을 비활성화하면 위 버튼·카드 영역이 모두 사라지고, 재활성화하면 새로고침으로 자동 복귀
  • 매 시간 자동 실행되는 게시판 집계 스케줄러 추가 — 게시글·댓글 통계를 일별로 누적하여 대시보드 카드와 추세 그래프의 데이터 출처가 됨. 수동 실행도 가능

Changed

  • 코어 최소 요구 버전을 7.0.0-beta.8 로 상향. SEO 자동값 연결 칩 편집 기능이 코어 7.0.0-beta.8 에서 제공하는 편집기 연동 표면을 사용합니다.
  • 게시글·댓글 작성일 표시 형식을 코어 표준(Y-m-d H:i:s)으로 통일 — 이전의 한글 요일 포함 표기가 영문/일본어 사이트에서도 한글로 출력되던 다국어 미정합과 이커머스 주문일시와의 표기 불일치를 해소. 시드/시계 어긋남 등으로 미래 시각이 들어오는 경계 케이스도 안정적으로 처리
  • 신고 정책 설정 화면의 알림 영역을 개편 — 별도 활성화 토글을 제거하고, 신고 접수·처리 알림이 채널별(이메일/사이트 알림)로 어떤 템플릿으로 발송되는지와 활성/비활성 상태를 한눈에 보여줍니다. 채널·템플릿·수신자 관리는 "알림 설정으로 이동" 버튼으로 알림 설정 메뉴에서 일원화했습니다.
  • 게시판 설정의 금지어·허용 확장자 입력 방식을 태그 입력으로 통일했습니다 — 쉼표로 구분해 한 줄에 적던 방식에서, 단어를 입력하고 Enter 를 누르면 칩으로 하나씩 추가되는 방식으로 바뀌어 입력·삭제가 직관적입니다.
  • 관리자 게시글 상세의 댓글 카드 우측 버튼 영역(답변/신고/더보기) 사이 간격을 일관되게 조정 — 버튼이 붙어 있던 시각 결함 해소

관리자 화면 외형 정합

  • 게시판 관리 전반(환경설정 전 탭·게시판 폼·게시글 폼·신고 상세·목록·모달·검색바)의 카드·입력 칸·라벨·본문 텍스트·구분선 모양과 간격을 다른 관리자 화면과 동일한 결로 통일했습니다 — 화면마다 조금씩 다르게 보이던 카드 모서리·여백·헤더 간격, 입력 칸 테두리·배경, 글자 톤이 한 가지 기준으로 정합됩니다.
  • 게시판 생성/수정 폼 "권한" 탭의 접근 제어 영역과 신고 상세 화면에서 항목·카드 사이 간격이 의도보다 부풀어 보이던 회귀를 바로잡아 다른 탭·화면과 동일한 간격으로 표시됩니다.
  • 게시판 신고 정책 탭의 "채널별 발송 상태"에서 사이트 알림/이메일 아이콘이 라벨 위로 올라가 비대칭으로 보이던 회귀를 바로잡아, 아이콘이 채널 라벨 옆 가운데로 정렬됩니다.
  • 이커머스 환경설정의 문의 게시판 선택 항목에서 라벨과 선택 박스 사이에 옅은 분리선·간격이 끼어 보이던 회귀를 바로잡아 한 필드로 응집됩니다.
  • 게시판 댓글 패널 상단 헤더의 하단 분리선이 흐려져 헤더와 본문 경계가 모호하게 보이던 회귀를 바로잡았습니다.
  • 게시판 관리 화면 곳곳의 역할 없는 빈 컨테이너 중첩을 정리해, 화면 모양은 그대로 둔 채 페이지 구조만 단순해졌습니다.

Fixed

폼·환경설정·정책 편집

  • 관리자 대시보드의 게시판 위젯(최신 게시글·신고 관리 목록)에서 각 항목이 같은 화면 식별자를 공유해 일부 보조 기능·접근성 도구가 항목을 구분하지 못하던 문제를 수정했습니다 — 이제 목록의 각 행이 고유하게 식별됩니다.
  • 게시판 본인인증 정책 편집 화면에서 "인증 목적"과 "적용 대상"을 바꿔 저장해도 반영되지 않던 문제를 수정했습니다 — 이제 정책 키·강제 시점·강제 위치를 제외한 모든 항목(인증 목적·적용 대상 등)을 자유롭게 변경할 수 있으며, 변경한 값은 업데이트 후에도 유지됩니다.
  • 게시판 생성/수정 폼 "게시글 설정" 탭에서 필드 사이 구분선이 일부 그룹 경계에만 그어지고 일부 필드 사이에는 누락되어 보이던 회귀를 수정했습니다 — 다른 탭과 동일하게 모든 필드 사이에 일관된 구분선이 표시됩니다.
  • 게시판 생성/수정 폼에서 탭을 클릭하거나 본문을 스크롤할 때 상단 탭 강조가 따라가지 않던 회귀를 수정했습니다 — 활성 탭이 현재 보고 있는 영역에 맞춰 자동으로 강조됩니다.
  • 게시판 환경설정에서 게시판 목록·개별 게시판·게시글 상세의 "SEO 제공 페이지"를 꺼도 검색엔진 사이트맵(sitemap.xml)에 해당 주소가 그대로 남던 문제 수정 — 끈 페이지 유형의 주소는 사이트맵에서 제외됩니다.

삭제·복원·첨부·활동이력

  • 답글이 달린 댓글을 삭제하면 그 댓글뿐 아니라 아래 답글까지 함께 사라지던 문제를 수정했습니다 — 삭제된 댓글 자리에는 "삭제된 댓글입니다" 표시가 남고, 다른 사람이 단 답글은 그대로 보입니다.
  • 게시판 첨부파일을 내려받을 때 관리자 활동이력에 다운로드 기록이 남지 않던 문제를 수정했습니다 — 이제 첨부파일 다운로드도 업로드·삭제와 동일하게 활동이력에 기록되며, 활동이력에 표시되던 파일 이름이 비어 있던 문제도 함께 해소되어 어떤 파일을 다루었는지 확인할 수 있습니다.
  • 로그인한 회원이 첨부파일을 내려받아도 활동이력의 "받은 사람"이 비어 있던 문제를 수정했습니다 — 이제 회원이 첨부를 내려받으면 누가 받았는지 활동이력에 정확히 남습니다. (로그인하지 않은 방문자의 다운로드는 종전과 같이 받은 사람 없이 기록됩니다.)
  • 게시판을 삭제하면 소속 게시글·댓글·첨부파일과 첨부 원본 파일까지 함께 완전히 삭제되도록 수정했습니다 — 게시판이 사라진 뒤에도 글·댓글·첨부 데이터와 파일이 남아 용량을 차지하던 문제가 해소됩니다. (신고 접수 내역은 처리 기록 보존을 위해 그대로 유지됩니다.)
  • 게시글을 삭제하면 그 글의 댓글·첨부파일도 함께 숨겨지고, 글을 복원하면 함께 부활하도록 수정했습니다 — 사용자가 글 삭제 전에 따로 지운 댓글·첨부는 복원해도 그대로 유지됩니다.
  • 삭제된 게시글을 게시판 관리 권한자가 열었을 때 첨부파일이 보이지 않던 문제와, 글과 함께 숨겨진 댓글이 "삭제된 댓글입니다"로 가려지던 문제를 수정했습니다 — 이제 관리 권한자에게는 글과 함께 숨겨진 댓글의 원문과 첨부파일이 그대로 보입니다. (사용자가 직접 지운 댓글은 이전과 같이 가려진 채로 표시됩니다.)

게시판 설정 저장·검증

  • 게시판 설정을 여러 게시판에 일괄 적용하던 중 일부 게시판에서 오류가 나면, 어느 게시판에서 실패했는지 알려주고 변경 전체를 자동으로 되돌리도록 수정했습니다 — 일부 게시판에만 설정이 적용되어 게시판마다 설정이 달라지던 문제가 해소됩니다. (전부 적용되거나 전부 적용되지 않으며, 실패 시 안내가 표시됩니다.)
  • 첨부 "허용 확장자"를 비워 둔 채 저장하면 안내와 반대로 모든 파일 업로드가 거부되던 문제를 수정했습니다 — 이제 파일 첨부를 사용하는 게시판은 허용 확장자를 최소 1개 이상 입력해야 저장되며, 안내 문구도 이에 맞게 변경되었습니다. (파일 첨부를 사용하지 않는 게시판은 확장자를 비워 둘 수 있습니다.)
  • 게시판 샘플 시더가 댓글·답글·첨부 비정규화 카운트를 동기화하지 않아, 시드 직후 게시글 상세 화면에서 댓글/답글 영역이 미표시되던 결함 해소
  • 게시판 환경설정 "게시판 설정" 탭의 숫자 입력 필드에 허용 범위 안내(예: 5~100)를 표시하고, 입력칸의 최소·최대값을 실제 저장 한도와 일치시켰습니다. 답변글 깊이는 최대 10단계까지, 첨부 파일 용량 상한도 정상 적용됩니다. 모바일 페이지당 게시글 수 입력칸의 범위 안내와 최소·최대값도 실제 저장 한도를 따르도록 정합화했습니다.
  • 환경설정에서 저장한 제목·내용·댓글 글자 수 상한이 실제 게시판 글쓰기 검증과 어긋나 저장 후 글 작성이 막히던 문제 해소 — 제목 최대 1000자, 내용 최대 100000자, 댓글 최대 10000자까지 일관되게 적용됩니다.
  • 게시판 설정에서 최소 글자 수를 최대 글자 수보다 크게 저장할 수 있던 문제 해소 — 제목·내용·댓글 각각 최소값이 최대값보다 크면 저장이 막히고, 해당 입력칸에 안내 메시지가 표시됩니다.
  • 게시판마다 설정한 "신규 게시글 표시 기간"이 게시글 목록의 [New] 배지에 반영되지 않고 항상 24시간 기준으로 표시되던 문제 해소 — 이제 설정한 기간(예: 1시간, 48시간)에 맞춰 목록의 [New] 배지가 표시됩니다.
  • 게시판 이름·설명을 수정한 뒤에도 검색엔진에 이전 제목·설명이 계속 노출되던 문제 해소 — 게시판 정보를 수정하면 해당 게시판 목록 페이지의 검색엔진용 메타 정보가 즉시 갱신됩니다.

복사·권한·역할

  • 게시판을 복사할 때 슬러그만 바꿔 저장하면 "관리자 값은 필수입니다" 오류로 저장이 막히던 문제 해소 — 복사 화면에 원본의 관리자·작업 단계 담당자 명단이 미리 채워지고, 권한 구성도 원본과 동일하게 복사됩니다. 복사본에는 새 게시판 전용 관리자 역할이 부여되며, 원본 게시판의 관리자가 복사본 권한에 섞여 들어가던 권한 누수도 차단했습니다.
  • 게시판 복사 확인 창의 안내를 정리해, 무엇이 복사되고(설정·권한·관리자) 무엇이 제외되는지(게시글·댓글), 저장 전 새 슬러그를 확인해야 한다는 점을 한눈에 보이도록 했습니다.
  • 게시판을 새로 만들거나 복사한 직후 권한 설정 탭의 역할 목록에 게시판 관리자·스텝 역할이 바로 표시되지 않고 새로고침해야 나타나던 문제 해소 — 저장 직후 화면에서도 부여된 역할이 모두 정상 표시됩니다.
  • "게시판 관리" 권한을 받은 사용자가 게시판 화면에서는 관리 가능으로 보이는데도 실제로 다른 사람의 글·댓글을 수정하거나 삭제하려 하면 차단되던 문제 해소 — 이제 게시판 관리 권한만으로 타인 글·댓글의 수정/삭제와 수정 화면 진입이 정상 동작합니다.
  • 게시판 권한 설정에서 "비밀글 조회" 권한의 역할을 비우고 저장할 때, 안내 메시지에 권한 이름이 영문 키(posts.read-secret)로 표시되던 문제 해소 — 다른 권한과 동일하게 "비밀글 조회"로 표시됩니다.

노출 제어·분류·알림·삭제글

  • 블라인드 처리된 게시글·댓글의 원문이 권한 없는 사용자에게도 '원글 보기' 버튼으로 그대로 열람되던 문제 해소 — 이제 원문은 게시판 관리자와 작성자 본인만 볼 수 있습니다. 목록의 제목·블라인드 표시와 블라인드 사유 안내는 이전과 동일하게 모두에게 표시됩니다.
  • 게시판 목록·검색 결과에서 비밀글의 본문 요약이 권한 없는 사용자에게도 보이던 문제 해소 — 이제 비밀글과 블라인드 글의 본문 요약은 목록·검색에서 표시되지 않습니다. 제목은 이전과 동일하게 표시되며, 본문은 상세 화면에서 열람 권한이 있는 경우에만 볼 수 있습니다.
  • 게시판 분류 개수 제한이 적용되지 않아 분류를 무제한으로 추가할 수 있던 문제 해소 — 분류는 최대 50개까지만 추가할 수 있으며, 빈 분류명은 저장되지 않습니다.
  • 게시판 분류 입력 안내를 명확히 했습니다 — 분류를 삭제해도 해당 분류의 게시글은 사라지지 않고 "미분류" 필터에서 계속 조회할 수 있음을 안내합니다.
  • 게시판에 설정한 금지어가 게시글에만 적용되고 댓글에는 적용되지 않던 문제 해소 — 이제 금지어가 포함된 댓글도 작성·수정 시 동일하게 차단됩니다.
  • 분류가 있는 게시판에서 분류를 선택하지 않아도 글이 등록되던 문제 해소 — 이제 분류가 있는 게시판은 글 작성·수정 시 분류 선택이 필수이며, 작성 화면의 분류 항목에 필수 표시와 안내 메시지가 나타납니다.
  • 내 알림 설정에서 "게시글 처리 알림"을 꺼도 관리자가 내 글·댓글을 블라인드·삭제·복원할 때 알림이 계속 발송되던 문제 해소 — 이제 이 알림을 끄면 해당 알림을 받지 않으며, 댓글·답글 등 다른 알림과 동일하게 개인 설정이 적용됩니다.
  • 관리자 회원 수정 화면에 게시판 알림 설정 영역이 보이지 않던 문제 해소 — 이제 "게시판 알림 설정" 탭에서 게시글 처리·답변·댓글·답글 알림 수신 여부를 회원별로 켜고 끌 수 있습니다. 회원 상세 화면과 동일한 위치·구성으로 표시됩니다.
  • 게시판 환경설정의 본인인증 정책 탭에서 출처 필터(전체/코어/모듈/플러그인)를 골라도 결과가 항상 비어 보이던 문제 해소 — 이 탭은 게시판 정책만 보여주는 화면이므로, 동작하지 않던 출처 필터를 정리했습니다. 강제 시점 필터와 검색은 그대로 사용할 수 있으며, 전체 출처의 본인인증 정책은 환경설정의 본인인증 화면에서 관리합니다.
  • 블라인드·삭제된 원글에 답글 작성 폼으로 직접 들어가면 작성 폼이 먼저 열리며 원글의 제목·내용이 보이던 문제 해소 — 이제 블라인드·삭제된 원글에는 답글 작성 화면 진입 자체가 차단되어 원글 내용이 노출되지 않습니다.
  • 삭제된 게시글·댓글의 원본을 게시판 관리 권한자가 볼 수 없던 문제 해소 — 이제 게시판 관리 권한이 있으면 삭제된 글·댓글의 원본 제목과 내용을 확인할 수 있습니다. 일반 사용자에게는 이전과 동일하게 노출되지 않습니다.
  • 삭제된 게시글 상세에 답변 버튼이 그대로 보이던 문제 해소 — 삭제된 글에서는 답변 버튼이 표시되지 않습니다.
  • 삭제된 게시글의 첨부파일이 권한 없는 사용자에게도 노출·다운로드되던 문제 해소 — 이제 삭제된 글의 첨부파일은 게시판 관리 권한자만 보거나 내려받을 수 있습니다.

신고 관리·목록 탐색

  • 신고 관리에서 영구삭제 처리된 신고 건을 다른 상태(접수·검토·반려·게시중단)로 되돌리려는 요청이 잘못 성공으로 응답되던 문제 해소 — 영구삭제는 최종 상태이므로 다른 상태로의 변경이 거부됩니다. 같은 상태로의 변경 등 허용되지 않는 상태 전환도 함께 차단됩니다.
  • 신고 관리 목록(신고현황)에서 검색 필드(전체·게시글제목·게시판명·작성자명·신고자명)에 단어를 입력해 검색해도 결과가 걸러지지 않던 문제 해소 — 이제 검색 종류를 고르고 검색어를 입력하면 해당 조건으로 신고 목록이 정확히 걸러집니다.
  • 게시글 목록에서 분류·검색·페이지를 적용한 뒤 글을 열고 "목록" 으로 돌아오면 적용했던 분류·검색·페이지가 풀려 항상 첫 화면으로 돌아오던 문제 해소 — 이제 글 상세로 들어갔다 나와도 보던 목록 상태가 그대로 복원됩니다.
  • 분류가 있는 게시판에서 글 상세의 이전/다음 글 버튼이 다른 분류의 글로 넘어가던 문제 해소 — 이제 이전/다음 글은 현재 보고 있는 글과 같은 분류의 글로만 이동합니다. 분류가 없는 글은 이전과 동일하게 전체 글을 기준으로 이동합니다.
  • 답글 상세에서 이전/다음 글 버튼이 자기 글타래와 무관한 엉뚱한 원글로 이동하던 문제 해소 — 답글 상세에서는 이전/다음 글 버튼이 표시되지 않으며, 원글로 이동하려면 답글 상단의 원글 링크를 사용합니다.

[1.0.0-beta.5] - 2026-05-12

Added

  • 게시판 환경설정의 본인인증 정책 탭에 권한 기반 버튼 비활성화 적용 — 수정 권한이 없는 운영자는 "정책 추가" / "수정" / "삭제" / "활성 토글" 버튼이 자동 비활성화

Changed

  • 게시판 관리 화면 (환경설정 · 게시판 폼 · 모달 · 검색바) 의 입력 박스 외형을 관리자 표준 외형으로 정렬 — 텍스트·숫자·일자 입력이 슬러그 입력과 같은 모양으로 보이도록 일관화.
  • 게시판 환경설정 화면의 페이지 타이틀을 일반 흐름으로 정리하고 (스크롤 시 함께 따라오던 동작 해제), 취소·저장 버튼을 화면 하단 고정(스티키) 으로 이전 — 탭은 기존과 동일하게 상단 고정 유지.

[1.0.0-beta.4] - 2026-05-11

Added

  • 환경설정 → 신고 정책 탭에 신고 알림 채널 선택 UI 추가 (이메일 / 사이트 알림 다중 선택)
  • 게시판 환경설정에 "본인인증 정책" 탭 추가 — 게시판 컨텍스트의 본인인증 정책을 코어 정책 관리 화면과 동일한 UI/UX (검색·필터(강제 시점/출처)·페이지네이션·정책 추가/편집 모달 직접 호출·이 모듈이 등록한 본인인증 목적 칩 섹션·데스크탑 테이블/모바일 카드 자동 분기 + enabled 인라인 토글) 로 한 곳에서 관리. 정책 목록의 "인증 목적" 컬럼이 코드명 대신 사람이 읽을 수 있는 라벨로 표시
  • 본인인증 정책 4종 declarative 선언 (게시글 삭제·블라인드·신고 일괄처리·신고 삭제) — 기본 비활성, 운영자가 환경설정에서 활성화 가능
  • 사용자(self) 본인인증 정책 4종 추가 — 자기 글 삭제, 자기 댓글 삭제, 신고 작성, 신규 사용자 첫 글 작성. 기본 비활성, 운영자가 환경설정에서 활성화 가능
  • 본인인증 메시지 정의를 모듈 자체에서 선언하도록 정합화 (현재는 코어 sensitive_action 기본 문구를 그대로 사용하므로 빈 선언 유지)
  • 게시판 모듈 자체 권한 신설: sirsoft-board.identity.policies.{read,update} (정책 관리 최소 권한)
  • 게시판 알림 발송 이력 / 본인인증 이력 샘플 시더 추가 — module:seed sirsoft-board --sample 으로 댓글·신고 등 게시판 영역 더미 이력만 독립 생성 (코어/타 모듈 영역 침범 없음)
  • 게시판 알림 정의 7종(새 댓글·대댓글·답변글·게시글 처리·신규 게시글 관리자·신고 접수·신고 처리)을 모듈 manifest 에서 직접 선언하도록 통일 — 활성화/업데이트 시 운영자 편집값을 보존하면서 자동 등록·정리되며, 권한·메뉴·본인인증과 동일한 declarative 패턴으로 일관화
  • 게시글 상세 페이지의 OG 메타태그·Article 구조화 데이터를 게시판 모듈이 직접 선언하도록 SEO declaration 구현 — 작성일·수정일·작성자·게시판 카테고리가 og:article:* 와 Schema.org Article 스키마로 자동 출력됨
  • 게시글 API 응답에 첨부파일 개수(attachment_count) 노출 — 기존 첨부 여부(has_attachment) 와 함께 제공되어 헤더 카운트와 첨부 수 표시를 일관되게 처리
  • 활동 로그의 게시판 액션 라벨(게시글·댓글·신고 등)을 게시판 모듈 다국어 파일에서 관리하도록 정리 — 모듈 라벨이 자기 영역에서 자기설명되며, 일본어 등 추가 언어팩이 키 누락 없이 동기화

Changed

  • 코어 최소 요구 버전을 7.0.0-beta.4 로 상향 (본인인증 인프라 + source 필터 API + 알림 시스템 권한 기반 수신자 타입 의존)
  • 신고 알림(관리자 수신) 기본 수신자를 역할(role=admin) 에서 권한(sirsoft-board.reports.manage) 기반으로 전환 — 권한이 부여된 모든 역할로 자동 확장
  • 모듈 환경설정에서 알림 토글이 OFF 인 경우 발송 자체를 사전 차단하도록 정책 게이트 강화
  • 게시판 유형(board_types) 의 다국어 라벨이 활성 언어팩 추가 시 자동으로 새 언어 키를 포함하도록 정합화 — 운영자가 한국어 라벨만 직접 수정한 row 도 한국어는 보존하면서 신규 언어(예: 일본어) 라벨은 자동 동기화

Fixed

  • 알림 템플릿 편집 모달의 입력 필드에서 글자를 입력할 때마다 화면이 심하게 버벅이던 문제 수정
  • 게시판 환경설정 알림 탭의 채널 라벨이 식별자(mail / database)로 노출되던 문제 수정 — 활성 언어 기준의 사람이 읽을 수 있는 라벨로 표시
  • 사용자 활동(작성/댓글) 조회 응답의 댓글 수 키를 단수형(comment_count) 으로 통일 — 게시글 상세 응답과 키 명명을 일치시켜 프로필/마이페이지의 댓글 수 표시를 일관되게 함
  • 관리자 게시글 상세의 섹션 순서 변경 — 첨부파일을 원글 인용 박스 위로 이동 (답글 화면에서 첨부파일이 더 잘 보이도록)
  • 게시판 환경설정의 일괄 적용 체크박스가 라벨 클릭으로만 토글되고 체크박스 자체 클릭으로는 반응하지 않던 문제 수정 — 모든 일괄 적용 항목에서 라벨과 체크박스 어느 쪽을 클릭해도 일관되게 토글
  • 게시판 환경설정 권한 탭의 권한 행과 섹션 헤더(관리자/사용자) 일괄 토글 체크박스가 직접 클릭으로 반응하지 않던 문제 수정
  • 게시판/게시글/댓글 모델의 카운트 컬럼(게시글 수·댓글 수·답글 수·첨부파일 수)이 일부 흐름에서 정수가 아닌 문자열로 노출되거나 갱신되지 않던 문제 수정 — 모든 카운트 컬럼이 항상 정수로 처리됩니다
  • 관리자 게시글 상세의 답글/댓글/첨부파일 헤더 카운트가 실제 수와 어긋나던 문제 수정 — "삭제 댓글 보기" 토글 ON 시에도 헤더는 활성 댓글 수만 표시
  • 관리자 게시글 상세의 첨부파일 이미지 썸네일이 표시되지 않던 문제 수정 — 다운로드 URL 대신 미리보기 URL 사용

[1.0.0-beta.3] - 2026-04-21

Fixed

  • 파티션 스키마 폐지 후에도 잔여 파티션 DDL 호출로 인해 신규 게시판을 만들지 못하던 문제 수정 (#12 @laelbe 님께서 제보해주셨습니다.)
  • 일부 권한 설정에서 비밀글·접근 제한 게시글의 이전/다음 조회 시 500 오류가 발생하던 문제 수정 — 옆 글을 찾지 못하면 빈 값을 반환하도록 변경
  • 큐 워커가 실행 중이지 않은 환경에서 댓글/게시글/첨부 수가 즉시 반영되지 않던 문제 수정 (#11 @laelbe 님께서 제보해주셨습니다.)
  • CKEditor 등 임시 업로드를 거친 첨부가 게시글에 연결되어도 첨부 수가 늘어나지 않던 문제 수정
  • 내가 댓글 단 게시글 활동(activity_type=commented) 조회 시 쿼리 오류로 500 응답을 반환하던 문제 수정
  • 삭제된 게시글에 달았던 댓글이 활동 통계(total_comments)에 계속 포함되던 문제 수정

Removed

  • 내부 파티션 관리 코드 일괄 제거 (파티션 스키마 폐지로 더 이상 사용되지 않음)

[1.0.0-beta.2] - 2026-04-20

⚠️ 업데이트 주의사항

  • 파티션 제거 마이그레이션 포함 — 데이터 규모에 따라 시간이 오래 걸릴 수 있습니다
    • 게시글 1만 건 이하: 약 1분 이내 / 50만 건 이상: 약 20~30분 이상
    • 댓글 90만 건 이상: 약 20~30분 이상
  • 강제 종료 시 모듈 상태가 updating으로 남을 수 있음 — tinker로 status를 active로 직접 복구

Added

  • 사이트 내 알림 연동
    • 이메일 외 사이트 내 알림(database 채널) 추가 — 알림센터에서 즉시 확인 가능
    • 환경설정 > 알림 탭에서 채널별 ON/OFF 토글 및 템플릿 통합 관리
    • 사용자 개인 알림 수신 설정(마이페이지) 반영
    • 댓글 직권 처리(블라인드/삭제/복원) 시에도 알림 발송
    • 게시글/댓글 처리 알림에 대상 유형 표기 추가
    • 신고 누적 자동 블라인드는 직권 처리 알림에서 제외
    • 알림 정의 일괄 초기화 기능 — 확인 모달 + 진행 스피너 UX 포함
    • 게시판 알림 정의를 코어 리셋 로직에 자동 기여하여 기본값 복원 가능
    • 알림 탭은 코어 알림 권한 기준으로 편집 가능 여부를 판단하도록 개선 (모듈 설정 권한과 분리)
  • 게시판 유형(BoardType) 사용자 수정 보존 지원
  • 게시판 환경설정 SEO 설정 탭 추가
    • 게시판 목록/글 목록/게시글 상세 페이지별 메타 제목·설명 직접 설정
    • 페이지별 SEO 제공 여부 온/오프 및 캐시 초기화 버튼
  • SEO 변수 시스템 적용 — 게시판/게시글 페이지 타입별 변수 정의 및 레이아웃 연동

성능 최적화

  • 이전글/다음글 조회를 독립 API로 분리하여 게시글 상세 페이지 초기 로딩 쿼리 감소 (#2 @jiwonpapa 님께서 제보해주셨습니다.)
  • 게시글·댓글 수 등 집계 정보를 사전 계산 컬럼으로 관리하도록 개선 — 목록 조회 시 COUNT 쿼리 제거 (#2 @jiwonpapa 님께서 제보해주셨습니다.)
  • 게시글 본문 검색 및 통합검색에 FULLTEXT 인덱스 적용 — 대용량 데이터에서도 빠른 검색 가능 (#2 @jiwonpapa 님께서 제보해주셨습니다.)

Changed

  • 코어 최소 요구 버전을 7.0.0-beta.2 로 상향

알림

  • 알림 발송 방식을 코어 공통 필터 기반으로 전환하여 이중 발송 제거
  • 알림 탭 채널 목록을 코어 공통 API로 교체
  • 알림 정의 시더를 인라인 방식으로 전환 — 사용자 수정 자동 보존
  • 레거시 메일 템플릿 테이블을 통합 알림 시스템으로 이관
  • 이전 업그레이드 스텝에 클래스 부재 시 안전 스킵 처리 추가
  • 알림 템플릿 편집 모달 다국어 탭을 동적 생성으로 전환

성능 최적화

  • 게시글 목록 조회 시 비활성 게시판 필터링 방식을 개선하여 쿼리 성능 향상
  • 인기글 정렬 기준을 조회수 기반으로 단순화하여 인덱스를 활용할 수 있도록 변경
  • 글수정 폼 진입 시 불필요한 데이터 조회를 줄여 로딩 쿼리 감소
  • 캐시 유지 시간을 설정값 기반으로 관리할 수 있도록 변경

기타

  • 공통 캐시 시스템으로 이관 — 모듈 내 모든 캐시 호출을 코어 캐시 인터페이스로 전환하고 키 접두사 통일
  • 게시판 목록 데이터 소스를 비인증 접근 허용으로 변경 — SEO 봇 대응
  • 게시글 에디터를 확장 포인트(extension_point)로 변환

Removed

  • 직접 발송 리스너 제거 — 코어 알림 시스템으로 대체
  • 기본 설정·신고 정책 탭의 알림 채널 선택 제거 — 알림 탭으로 통합
  • 알림 채널 관련 컬럼 및 모듈 전용 API 제거 — 코어 공통 API 사용
  • 레거시 메일 템플릿 시더 및 관련 다국어 키 제거

[1.0.0-beta.1] - 2026-04-01

Changed

  • 오픈 베타 릴리즈

[0.9.5] - 2026-03-31

Added

  • 이커머스 1:1 문의게시판 Extension Point에 mode: "replace" 적용 — 게시판 모듈 활성 시 default 폴백 메시지 교체

Fixed

  • 게시판 글 목록·신고 목록에서 다른 페이지로 이동 후 돌아올 때 이전 검색어가 Input에 유지되던 문제 수정 — _global 상태를 _local로 전환 (admin_board_posts_index.json, admin_board_reports_index.json)

[0.9.4] - 2026-03-30

Fixed

  • 활동 로그 enum 미번역 수정 — Post, Comment, Board, Report 모델의 $activityLogFields status/설정 필드 type: 'text' → type: 'enum' 변경 + 6개 Enum 클래스에 labelKey() 메서드 추가
  • 활동 로그 샘플 시더 enum 타입 동기화 — ActivityLogSampleSeeder의 status 관련 9건 type: 'text' → type: 'enum' 수정 및 old_label_key/new_label_key 추가

[0.9.3] - 2026-03-30

Fixed

  • 관리자 다크모드 레이아웃 전수 수정 — 19개 파일에서 누락된 dark: variant 약 70건 추가 (text-gray, bg-white/gray, focus:ring, text-red/blue, border-gray 등)

[0.9.2] - 2026-03-30

Changed

  • window.G7Config 설정 노출 최소화 — frontend_schema 4개 카테고리(basic_defaults, report_policy, spam_security, display) 전체 expose: false 처리 (프론트엔드 미참조)

[0.9.1] - 2026-03-30

Changed

  • ReportRepository의 직접 MATCH...AGAINST 호출을 DatabaseFulltextEngine::whereFulltext() 정적 헬퍼로 전환 — 다중 DBMS 호환
  • Post 모델에 FulltextSearchable 인터페이스 추가 — Scout 검색 파이프라인 지원
  • searchIndexShouldBeUpdated() 훅 기반 전환 — 검색 플러그인이 Post 인덱스 업데이트 제어 가능
  • 마이그레이션 FULLTEXT 인덱스 생성을 DatabaseFulltextEngine::addFulltextIndex() 정적 헬퍼로 전환

[0.9.0] - 2026-03-30

Added

  • FULLTEXT 인덱스(ngram) 추가 — boards(name), boards_report_logs(snapshot) 총 2개

Changed

  • 신고 관리 검색 쿼리를 LIKE '%keyword%'에서 MATCH...AGAINST IN BOOLEAN MODE로 전환 — boards.name, boards_report_logs.snapshot 검색 성능 향상

[0.8.1] - 2026-03-30

Fixed

  • 신규 게시판 생성 시 조회수 표시가 기본 OFF로 설정되던 문제 수정 — 기본값을 ON으로 변경
  • 신규 게시판 생성 시 최소 내용 길이 기본값이 10자로 설정되던 문제 수정 — 기본값을 2자로 완화
  • 파일 크기 설정 단위를 bytes에서 MB로 통일 — 관리자 설정 입력, DB 저장, 검증, 안내 문구 모두 MB 기준으로 변경
  • 게시글 삭제(소프트삭제) 시 댓글과 첨부파일이 함께 삭제되어 복원 시 미표시되던 문제 수정 — 게시글만 삭제하고 댓글/첨부파일은 유지

[0.8.0] - 2026-03-30

Added

  • 이커머스 1:1 문의 게시판 연동 지원
    • 이커머스 환경설정 > 문의게시판 설정 화면에 게시판 선택 드롭다운, 게시판 수정 이동, 문의내역 관리, 관리자 메뉴 추가 버튼 동적 주입
    • 문의/답변 생성·수정·삭제를 게시판 게시글로 처리하는 훅 리스너 추가
  • PostRepository에 관계 포함 조회 메서드 3개 추가 (findWithBoard, findByIdsWithRelations, findFirstReplyWithBoard)
  • 검색/필터/정렬 성능 향상을 위한 누락 인덱스 일괄 추가 — board_posts 2개([board_id+author_name] 비회원 작성자 검색, [board_id+status+created_at] 게시판별 상태+날짜 필터)

Changed

  • 문의 삭제/답변 삭제 시 게시판 알림이 발송되지 않도록 처리 방식 개선
    • 외부 모듈 위임 방식에서 skip_notification 옵션 직접 체크 방식으로 변경

Fixed

  • 게시글 수정 후 after_update 훅이 트랜잭션 내부에서 실행되어 롤백 시 부작용이 발생할 수 있던 문제 수정
  • Board, Post 모델 직접 조회를 Repository 경유로 교체

[0.7.1] - 2026-03-27

Fixed

  • 게시판 관리 부모 메뉴 URL을 null로 변경 — 대응 라우트 없는 /admin/boards URL이 404 발생 (module.php)

[0.7.0] - 2026-03-25

Added

  • BoardActivityLogListener: 게시판/게시판유형/게시물/댓글/첨부파일/신고 전체 로깅
  • 활동 로그 다국어 키 33개 정의 (resources/lang/ko/activity_log.php, en/activity_log.php)
  • $activityLogFields 메타데이터: Board, Post, Comment 모델
  • ActivityLog 샘플 시더 (database/seeders/ActivityLogSampleSeeder.php)
  • ActivityLogDescriptionResolver: 활동 로그 표시 시점에 게시판/게시물/댓글 엔티티명을 ID에서 해석하는 필터 훅 리스너
  • BoardActivityLogListener: 신고 일괄 상태변경 before 스냅샷 + after ChangeDetector 추가 (1훅 추가, 총 32훅)
  • BoardActivityLogListener: 신고 일괄 상태변경 per-Report 로깅 전환 (건별 loggable_id 기록)

Fixed

  • 활동 로그 description에 번역 키가 원문으로 노출되는 문제 수정 — src/lang 번역 파일 동기화, description_params 불일치 수정
  • UpdateBoardTypeRequest: name.ko 로케일 하드코딩 메시지 제거 — LocaleRequiredTranslatable이 자체 메시지 반환

[0.6.10] - 2026-03-26

Added

  • 사용자 게시판 목록/상세에서 manager 권한 사용자가 삭제된 게시글/댓글을 선택적으로 볼 수 있는 토글 기능 추가

Fixed

  • 게시판 권한 탭 manager/step TagInput UUID 불일치 수정 — options 및 change 핸들러 표현식에서 u.id → u.uuid로 수정 (4곳)
  • BoardController::getFormData() 생성 모드에서 board_manager_ids에 uuid 반환하도록 수정
  • BoardSampleSeeder — pluck('id') → pluck('uuid') 수정
  • StoreCommentRequest — 서버 주입 필드(user_id, ip_address) 검증 규칙 제거 (규정 준수)
  • CommentController — prepareForValidation()으로 처리된 post_id 중복 대입 제거
  • 신고 시스템 API 응답 UUID 적용 — ReportResource, ReportLogResource, ReportDetailResource, ReportService id → uuid 전환
  • 마이페이지 내 게시글 목록에서 비활성 게시판(is_active=false)의 게시글이 노출되던 문제 수정
  • 공지글 쿼리에서 삭제 상태 공지 제외 누락 수정
  • 삭제된 게시글 상세 접근 시 명시적 404 처리 추가
  • 삭제된 게시글의 댓글을 권한 없는 사용자에게 반환하던 문제 수정
  • 게시판 폼 탭 순서 통일 (기본정보 → 설정 → 권한)
  • 대댓글 UI 들여쓰기 버그 수정

[0.6.9] - 2026-03-24

Added

  • 게시판 설정 화면의 각 탭 이름을 한국어/영어로 표시할 수 있도록 다국어 키 추가

Changed

  • 게시판 설정 화면을 기능별 탭(기본, 권한, 목록, 게시글, 답변글, 댓글, 첨부파일, 알림, 일괄적용)으로 분리하여 레이아웃 파일 전면 재구성
  • 변경된 탭 구조에 맞게 레이아웃 렌더링 테스트 업데이트

[0.6.8] - 2026-03-23

Changed

  • API Resource: author.id → author.uuid 전환 (PostResource, CommentResource, BoardResource)
  • PostResource: user_id FK → user.uuid 전환
  • CommentResource: author.id → author.uuid 전환
  • 관리자 레이아웃: author.id → author.uuid 참조 전환 (5개 파일)
  • 유저 게시글 라우트: 정수 제약 제거 (Route Model Binding 호환)
  • FormRequest: 정수 검증 → UUID 검증 전환 (StoreBoardRequest, StoreCommentRequest, UpdateBoardRequest)
  • BoardService: UUID→정수 FK 변환 처리 추가

[0.6.7] - 2026-03-21

Fixed

  • 공개 API 라우트 throttle을 60/분(댓글은 30/분)에서 600/분으로 일괄 상향 — 페이지 간 네비게이션 시 동일 카운터(sha1(userId)) 공유로 인한 429 Too Many Requests 방지 (게시글, 댓글, 첨부파일, 사용자 프로필, 마이페이지 활동 라우트 포함)

[0.6.6] - 2026-03-21

Added

  • 게시판 날짜 표기 방식 개선 — standard(표준형) / relative(유동형) 전역 설정 추가
  • 게시판 환경설정 general 탭 신규 추가 — 날짜 표시 방식 선택 UI
  • 블라인드/삭제 게시글 댓글 작성 폼 숨김 및 안내 메시지 표시

Changed

  • PostResource created_at — 원본 datetime 반환으로 변경, 포맷된 날짜는 created_at_formatted 필드로 분리
  • SearchPostsListener — 게시판별 N번 쿼리 → 단일 쿼리로 리팩토링

Fixed

  • 게시판 환경설정 권한 일괄적용 시 manager/step 역할이 초기화되던 문제 수정
  • 게시판 권한 자동주입 정책 변경 — 게시판 생성/수정 시에만 적용, 일괄적용 시 제외
  • 일괄적용 모달 열기 전 이전 오류 상태가 남아있던 문제 수정
  • 이미지 미리보기(preview) API throttle을 게시판 API 그룹(60/분)에서 분리하여 전용 그룹(300/분)으로 변경 — 갤러리 게시판에서 다수 썸네일 로드 시 429 Too Many Requests 방지

[0.6.5] - 2026-03-18

Added

  • SeoBoardSettingsCacheListener — 게시판 모듈 설정 변경 시 관련 SEO 캐시(board/index, board/show, board/boards, sitemap) 선별 무효화

Changed

  • SeoBoardCacheListener — 게시판별 독립 무효화로 전환 (invalidateByLayout → invalidateByUrl URL 기반), search/index·home 무효화 추가, 생성/수정 시 해당 게시물 상세 캐시 즉시 재생성(SeoCacheRegenerator)

[0.6.4] - 2026-03-16

Changed

  • 마이그레이션 통합 — 증분 마이그레이션을 테이블당 1개 create 마이그레이션으로 정리
  • 시더 디렉토리 분리 — 샘플 시더를 Sample/ 하위로 이동
  • 라이선스 프로그램 명칭 정비
  • 게시판 환경설정 메일 템플릿 탭 레이아웃 개선

[0.6.3] - 2026-03-13

Added

  • 신고 접수 시 관리자에게 알림 이메일 발송 기능 추가
  • 신고 처리(블라인드/삭제/반려) 결과를 게시글 작성자에게 알림 이메일로 안내하는 기능 추가
  • 관리자 알림 발송 범위 설정 추가 — 게시글당 최초 신고 시에만 발송하거나, 신고가 들어올 때마다 발송하는 옵션 선택 가능
  • 관리자 역할별 신고 알림 수신 여부 설정 기능 추가
  • 이미 신고한 게시글/댓글의 신고 버튼 비활성화 기능 추가

Changed

  • 신고 정책 설정 화면에서 알림 발송 범위를 더 직관적인 라디오 버튼 형태로 변경
  • 신고 반려 처리 알림 문구 개선 — "반려(복원)"으로 명확하게 안내하도록 변경
  • 블라인드 처리된 게시글 안내 메시지 통일
  • 신고 알림 수신 관리자 역할 지정 방식 개선 — 중복 지정 없이 정확하게 반영되도록 수정

Fixed

  • 존재하지 않는 게시글 접근 시 404 페이지로 이동하지 않던 문제 수정
  • 신고 일괄 처리 드롭다운이 정상 작동하지 않던 문제 수정

[0.6.2] - 2026-03-12

Added

  • 신고 케이스 구조 전환 — 게시글/댓글당 케이스 1행 구조로 변경 (boards_reports + boards_report_logs 분리)
  • 신고자 목록 페이지네이션 API 추가
  • 신고 처리 이력 타임라인 표시
  • ReportLogResource 추가
  • manifest에 license 필드 및 LICENSE 파일 추가

Changed

  • 신고 목록 정렬 기준을 마지막 신고 일시 기준으로 변경
  • 신고 일괄 처리 단순화 — 케이스 단위 직접 처리로 변경
  • 게시판 샘플 시더 게시판 6개 → 8개로 확장
  • 신고 샘플 시더 재신고자 없을 경우 방어 처리 추가

Fixed

  • 재활성 사이클 카운트 버그 수정 — 이전 사이클 신고 로그가 현재 사이클에 포함되던 문제
  • 반려 시 복구 대상 케이스 상태 조건 불일치 수정

[0.6.1] - 2026-03-11

Changed

  • BoardResource 응답의 user_permissions 키를 user_abilities로 변경 — can_* 형식 통일
  • getUserBoardPermissions() 메서드의 반환 키를 posts_write, manager 등 underscore 형식에서 can_write, can_manage 등 can_* 형식으로 변경
  • Admin/User PostController의 include_user_permissions 파라미터를 include_user_abilities로 변경

Added

  • BoardUserAbilitiesTest — BoardResource user_abilities 키 구조, PostResource/CommentResource abilities 키 검증 테스트 13개

[0.6.0] - 2026-03-11

Added

  • 게시판별 동적 권한에 스코프(scope) 메타데이터 지원 추가 (resource_route_key, owner_key)
  • config/board.php 권한 정의에 scope 키 추가 (12개 권한: admin/user 각 6개)
  • BoardPermissionService::ensureBoardPermissions() — 권한 생성 시 scope 메타데이터 자동 설정
  • PostService — 목록/상세 조회 시 $context 파라미터 기반 스코프 필터링 적용
  • CommentService::getCommentsByPostId() — $context 파라미터 기반 스코프 필터링 적용
  • AttachmentService::download() — $context 파라미터 기반 스코프 접근 제어 적용
  • User 컨트롤러 전체에 AccessDeniedHttpException catch 및 403 응답 처리
  • Admin PostController/AttachmentController에 AccessDeniedHttpException catch 추가
  • Upgrade_0_6_0.php — 기존 게시판 동적 권한의 scope 메타데이터 백필 업그레이드 스크립트
  • BoardPermissionScopeServiceTest — 서비스 레이어 스코프 필터링 테스트 10개

Fixed

  • User 컨트롤러에서 getBoardBySlug() 호출 시 checkScope: false 적용 — 매니저 역할 사용자 500 에러 수정
  • PostRepository::countNormalPosts() — 누락된 스코프 필터링 추가

[0.5.5] - 2026-03-11

Fixed

  • Board 모델 $guarded에서 created_by, updated_by 제거 후 $fillable로 이동 — 게시판 생성 시 생성자/수정자 ID가 DB에 저장되지 않던 문제 해결
  • BoardService::createBoard()에 Auth::id() 기반 created_by/updated_by 설정 추가
  • BoardService::updateBoard()에 Auth::id() 기반 updated_by 설정 추가

Changed

  • ModuleTestCase에 $migrated 플래그 추가 — 마이그레이션 체크를 프로세스당 1회로 최적화

[0.5.4] - 2026-03-11

Added

  • BoardService, ReportService에 PermissionHelper::applyPermissionScope() / checkScopeAccess() 적용
  • BoardController, ReportController 상세/수정/삭제 엔드포인트에 AccessDeniedHttpException 처리 추가
  • 게시판 목록 조회 시 스코프 필터링 적용 (본인만/역할/전체)
  • 게시판 상세/수정/삭제/복사 시 스코프 접근 제어 적용
  • 신고 상세/상태변경/삭제 시 스코프 접근 제어 적용

Fixed

  • PostCollection::toArray() 클로저에 $request 변수 미전달 버그 수정 (Undefined variable $request)
  • BoardPermissionTest 테스트 assertions를 permissions → abilities 키로 수정
  • PostResourcePermissionTest 테스트 assertions를 permissions → abilities 키로 수정

[0.5.3] - 2026-03-11

Added

  • 게시판 설정 화면에 isReadOnly 패턴 적용 (읽기 전용 배너, 모든 폼 필드 비활성화, 저장 버튼 비활성화)
  • 게시판 폼 화면에 isReadOnly 패턴 적용 (기본정보/권한설정/목록설정/게시글설정/알림설정 탭 전체)
  • 게시글 폼 화면에 isReadOnly 패턴 적용 (제목/본문/카테고리/옵션/첨부파일 비활성화)
  • BoardSettingsController에 abilities 응답 추가 (can_update)
  • 게시판 목록 DS에 403 errorHandling 추가
  • 게시판 폼 DS에 403 errorHandling 및 roles DS fallback 추가
  • 게시판 설정 DS에 403 errorHandling 및 보조 DS fallback 추가

Changed

  • 게시판 목록 "게시판 추가" 버튼: if(숨김) → disabled(비활성화)로 변경
  • 게시글 목록 "게시글 작성" 버튼: if(숨김) → disabled(비활성화)로 변경
  • 게시글 상세 답글 버튼: if(숨김) → disabled(비활성화)로 변경
  • 게시글 상세 ActionMenu: 권한 없는 항목을 숨김 대신 disabled 처리
  • 댓글 답글 버튼 및 ActionMenu: 권한 없는 항목을 숨김 대신 disabled 처리
  • 댓글 입력 영역: if에서 ability 조건 분리 → 내부 Textarea/Button disabled 처리
  • 신고 목록 일괄 작업 버튼: if(숨김) → disabled(비활성화)로 변경
  • 신고 상세 상태 변경 버튼: if에서 ability 조건 분리 → disabled 처리
  • 블라인드/삭제 댓글 원본 보기 버튼: if(숨김) → disabled(비활성화)로 변경
  • 게시판 유형 관리 모달에 isReadOnly 기반 disabled 추가

Fixed

  • ReportCollection의 permissions → abilities 키 불일치 수정 (신고 목록 일괄 작업 미표시 버그)
  • ReportDetailResource의 permissions → abilities 키 불일치 수정 (신고 상세 상태 변경 버튼 미표시 버그)

[0.5.2] - 2026-03-10

Changed

  • 권한 카테고리에 resource_route_key, owner_key 스코프 메타데이터 추가 (boards, reports)
  • 라우트 미들웨어 except:owner:* 옵션 제거 (scope_type 데이터 기반 시스템으로 전환)
  • Repository 목록 조회에 PermissionHelper::applyPermissionScope() 적용 (Board, Post, Comment, Report)
  • PermissionBypassable 인터페이스 및 getBypassUserId() 제거 (Board, Post, Comment, Report, Attachment 모델)

[0.5.1] - 2026-03-10

Changed

  • API 리소스 권한 플래그 키 permissions → abilities로 변경 (코어 표준화)
  • permissionMap() → abilityMap(), resolvePermissions() → resolveAbilities() 메서드명 변경
  • BoardCollection.withPermissions() 응답 키 permissions → abilities
  • PostCollection 응답 키 permissions → abilities
  • 기존 board_permissions 키를 원래 이름 permissions로 원복 (충돌 해소)
  • 관리자 레이아웃 JSON의 permissions.can_* / permissions?.can_* 바인딩을 abilities.can_* / abilities?.can_*로 변경
  • 사용자 레이아웃 JSON의 permissions?.can_view 바인딩을 abilities?.can_view로 변경

Fixed

  • 알림 채널(이메일/사이트 알림) 일괄 적용 시 채널 설정이 저장되지 않는 버그 수정
  • 일괄 적용 모달에서 알림 채널 항목 선택 시 체크박스가 정상 동작하지 않는 버그 수정
  • 일괄 적용 모달에서 알림 채널 항목명이 키 코드로 표시되는 다국어 누락 수정

[0.5.0] - 2026-03-06

Changed

  • 메일 템플릿 목록 API에 검색/필터/페이지네이션 지원 추가
  • 메일 템플릿 편집 모달 UX 개선 (blur_until_loaded, sticky footer, 함수형 body)
  • getDefaultTemplateData()를 Controller에서 Service로 이동 (Service-Repository 패턴 준수)
  • 메일 템플릿 탭 UI를 코어 환경설정과 동일한 구조로 변경

Added

  • 메일 템플릿 미리보기(preview) API 엔드포인트 추가
  • 메일 템플릿 검색 기능 (제목/본문/전체)
  • 페이지당 항목 수 선택 및 페이지네이션
  • 메일 템플릿 관련 다국어 키 추가 (검색/필터/빈 상태/편집 모달)

[0.4.0] - 2026-03-05

Added

  • DB 기반 메일 템플릿 시스템 (5종: 새 댓글, 대댓글, 답변글, 관리자 처리, 관리자 새 게시글)
  • board_mail_templates 테이블, BoardMailTemplate 모델/서비스/리포지토리/컨트롤러
  • 메일 템플릿 관리 API 및 환경설정 UI
  • 업그레이드 스텝 (Upgrade_0_4_0) — 기존 설치에 메일 템플릿 초기 시딩

Changed

  • 5개 알림 클래스 DbTemplateMail 기반으로 전환 (Blade → DB 기반)

Removed

  • BoardNotificationMail, board-notification.blade.php 삭제

[0.3.2] - 2026-03-06

Added

  • 게시판 유형(BoardType)을 독립 엔티티로 분리 — board_types 테이블, BoardType 모델
  • 게시판 유형 API — BoardTypeController, BoardTypeService, BoardTypeRepository 추가
  • 게시판 유형 요청/응답 클래스 — StoreBoardTypeRequest, UpdateBoardTypeRequest, BoardTypeResource 추가
  • 환경설정 > 기본설정 탭에 게시판 유형 관리 모달 추가 (생성 / 수정 / 삭제)
  • 게시판 유형 삭제 시 사용 중인 게시판 수 검증 (사용 중이면 삭제 불가)
  • 기본값으로 설정된 게시판 유형 삭제 방지 로직 추가
  • 미지원 게시판 유형에 대한 fallback 블록 추가 (basic 레이아웃으로 표시)

Changed

  • 게시판 생성/수정 폼에서 유형 관리 버튼 제거 — 환경설정 > 기본설정에서 일원 관리하도록 UX 변경
  • 게시판 폼 유형 Select 하단에 관리 안내 힌트 텍스트 추가
  • 게시판 폼 및 환경설정 기본 게시판 유형 Select에 slug 함께 표시 + 긴 목록 스크롤 처리
  • 게시판 유형 slug 허용 문자 규칙을 하이픈(-) 통일 (기존 언더스코어(_) 혼용에서 변경)

Fixed

  • 게시판 유형 모달에서 저장 실패 시 필드별 에러 메시지 표시 및 빨간 테두리 강조
  • 테스트 환경에서 Accept-Language 헤더 미설정 시 name.ko 필수 검증이 통과되던 문제 수정

[0.3.1] - 2026-03-05

Added

  • 신고 남발 방지 기능 — 일일 신고 횟수 제한, 반려 누적 시 신고 차단, 연속 신고 쿨타임
  • 관리자 환경설정 신고 정책 탭을 "자동 숨김 설정" / "신고 제한 설정" 2개 카드로 분리
  • 연속 신고 쿨타임 설정 항목 추가 (기본 60초, 0이면 비활성화)
  • 각 설정 항목에 동작 설명 안내 텍스트 보강
  • 관리자 신고 목록에 마지막 신고일시 표시 (2건 이상 신고 시)
  • 관리자 신고 목록/상세에 비회원 신고자 배지 표시
  • 비회원 신고 샘플 시더 데이터 추가

Changed

  • 쿨타임 설정 변경 시 즉시 반영되도록 설정 조회 방식 변경
  • 쿨타임 메시지를 신고 전용으로 분리

Fixed

  • 신고 모달에서 사유 미선택 시 콘솔 오류가 발생하던 문제 수정
  • 댓글 신고 시 관리자 목록에서 게시글 제목이 표시되지 않던 문제 수정
  • 관리자 신고 목록에서 페이지/정렬 변경 시 체크박스 선택이 유지되던 문제 수정
  • 연속 신고 쿨타임 설정값이 저장되지 않던 문제 수정

Removed

  • "신고 차단 기간" 설정 항목 제거 — 실제 동작과 불일치하여 혼란 유발

[0.3.0] - 2026-03-03

Added

  • 마이페이지 "내가 쓴 댓글" API (GET /me/my-comments) — Comment 기반 페이지네이션
  • CommentRepository::getUserComments() — 삭제 게시글·비활성 게시판 댓글 자동 제외
  • PostRepository::findByBoardId(), CommentRepository::findByBoardId() — 신고 처리용 Repository 메서드 추가

Changed

  • board_posts, board_comments, board_attachments 단일 테이블 전환 (기존 슬러그별 동적 테이블 폐지)
  • board_id 파티션(PARTITION BY LIST)으로 게시판 분리 — 게시판 추가 시 파티션 동적 생성
  • DynamicPost/Comment/Attachment 모델 → Post/Comment/Attachment 단일 모델로 통합
  • Repository 전체 setTableBySlug() 패턴 → where('board_id', ...) 단일 쿼리 패턴으로 전환
  • 마이페이지 게시판 활동 조회 PHP forPage() → DB paginate() 전환 (메모리 부족·타임아웃 해결)
  • 통계 total_comments 집계 조건을 목록 API와 동일하게 INNER JOIN 적용 (삭제 게시글 댓글 제외)
  • Admin 라우트에 admin 미들웨어 추가 (5개 그룹)
  • ReportService — logger() 헬퍼 → Log:: 파사드 교체
  • BoardService::clearBoardCaches() — Cache::forget() → CacheService::forget() 통일
  • PostService, CommentService — actionLog 배열 생성 중복 → buildActionLog() 메서드 공통화

Fixed

  • raw SQL 내 테이블명에 DB prefix 미적용 문제 수정
  • DB::table('x as y') alias에 prefix 이중 적용되는 문제 수정
  • 답글 작성 시 삭제된 게시글 체크 후 조기 종료 누락 버그 수정, 공지 답글 금지 및 깊이 제한 추가
  • 댓글 작성 시 삭제된 댓글 체크 후 조기 종료 누락 버그 수정, 깊이 제한 추가
  • 게시글 목록에서 depth 2 이상 답글이 표시되지 않는 버그 수정
  • 관리자 게시글 목록 답글 depth 시각화 — depth에 비례한 들여쓰기 적용
  • 관리자 답글 버튼 — 공지글이 아니고 최대 답글 깊이 미만인 게시글에만 표시되도록 조건 수정
  • 인기글 목록이 HTTP 200이지만 빈 배열로 반환되는 버그 수정 (raw SQL DB prefix 누락)
  • 게시글·댓글 API 응답에서 비밀번호 필드 노출 방지
  • 게시글·댓글 트리거 타입을 Enum으로 올바르게 처리
  • 댓글 단건 조회 시 소프트 삭제된 댓글이 조회되지 않는 문제 수정
  • 신고 처리 시 DB 직접 접근 → Repository 패턴으로 교체
  • 게시글 상세 조회 비즈니스 로직을 Controller에서 Service로 이동
  • 신고 상태별 집계 로직을 Controller에서 Service로 이동
  • 신고 가능 여부·본인 콘텐츠 검증 로직을 Controller에서 Service로 이동

Removed

  • BoardTableService — 동적 테이블 생성 서비스 삭제
  • TableCreationException 삭제
  • DynamicPost, DynamicComment, DynamicAttachment 모델 삭제
  • getUserCommentedActivities() (PostRepository) — 미사용 메서드 (마이댓글 API 전환으로 대체)

[0.2.0] - 2026-02-26

Added

  • 환경설정 페이지 (3탭: 기본 설정 / 신고 정책 / 스팸·보안)
  • 환경설정 CRUD API (GET/PUT /admin/settings, GET /admin/settings/{category})
  • 일괄 적용 API (POST /admin/settings/bulk-apply) — 체크된 항목을 선택 게시판에 일괄 적용
  • 캐시 초기화 API (POST /admin/settings/clear-cache)
  • BoardSettingsService (ModuleSettingsInterface 구현)
  • boards 테이블에 max_reply_depth(기본 5), max_comment_depth(기본 10) 컬럼 추가
  • 게시판 폼에 답변글 최대 depth(15), 대댓글 최대 depth(110) 필드 추가
  • 게시판 폼 알림 탭에 알림별 채널 선택 UI 추가 (필터 훅 sirsoft-board.notification.channels로 확장 가능)

Changed

  • config/board.php의 기본값(defaults, default_board_permissions, blocked_keywords, view_count_*)을 ModuleSettings 시스템으로 이관
  • config/board.php에서 report_types 제거 (dead code, ReportReasonType Enum이 원본)
  • 기존 코드의 config() 참조를 g7_module_settings() 헬퍼로 전환 (9개 파일)
  • boards 테이블 기본값 통일: show_view_count=false, notify_admin_on_post=true, notify_author=true
  • 조회수 중복 방지 방식을 단일 캐시 TTL 방식으로 통합 (세션 방식 제거, API 미들웨어에 StartSession 미적용)

Fixed

  • 권한 TagInput 수정 시 저장 버튼이 표시되지 않는 문제 수정
  • 일괄 적용 모달에서 fields 값이 전달되지 않는 문제 수정
  • . 포함 권한 키(예: sirsoft-board.posts.read)가 BulkApplySettingsRequest 검증에서 422 오류 발생하는 문제 수정

[0.1.2] - 2026-02-25

Changed

  • 모듈 라우트 admin/user 분기 서빙 적용 (routes.json → routes/admin.json 이동)

[0.1.1] - 2026-02-24

Changed

  • 버전 체계 조정 (정식 출시 전 0.x 체계로 변경)

[0.1.0] - 2026-02-23

Added

  • 게시판 모듈 초기 구현
  • 게시판 CRUD (생성, 읽기, 수정, 삭제) 기능
  • 게시판별 스킨 설정, 카테고리 관리
  • 게시물 CRUD 기능 (작성, 조회, 수정, 삭제)
  • 비밀글 기능: 작성자/관리자만 열람 가능
  • 댓글 시스템: CRUD, 대댓글 (계층형 댓글)
  • 게시물 검색 기능 (제목, 내용, 작성자 검색)
  • 첨부파일: 이미지/파일 업로드, 다운로드, 인라인 표시
  • 카드/갤러리 레이아웃: 다양한 게시물 목록 표시 형태 지원
  • 인기글/최신글 위젯
  • SEO 메타 태그 자동 생성
  • 관리자 레이아웃 (게시판 관리, 게시물 관리, 댓글 관리)
  • 사용자 레이아웃 (게시판 목록, 상세, 작성/수정)
  • 권한 시스템 연동 (게시판별 읽기/쓰기/댓글/관리 권한)
  • 다국어 지원 (ko, en)