확장이 훅으로 등록한 카탈로그에서 고른 값은 그 확장이 사라져도 저장값으로 남는다. 그 상태에서 값만 보고 판정하면 이미 제공 불가한 항목이 사용자 화면에 그대로 노출된다. 예외도 경고도 로그도 남지 않아 관리자 화면과 나란히 보지 않으면 드러나지 않는다. - 결제수단에 지정한 PG, 현금영수증 발급사, 검색엔진 드라이버 세 축에 같은 판정을 적용. 공개 응답에서는 제거하고 관리자 응답에는 표시를 남긴다 — 운영자가 고쳐야 할 대상이라 감추면 복구 경로가 사라진다. 서버 검증도 같은 판정을 공유해 화면 우회 제출을 막는다. - 설정 단건 저장이 벌크 저장과 다른 경로를 타던 문제를 코어·이커머스·게시판에서 정리. 저장은 성공하고 파생 값만 갱신되지 않아 어느 화면에서 저장했느냐로 결과가 갈렸다. - 단건 저장의 값 형태 계약 신설. 빈 값으로 되돌릴 수 있게 하고, 타입은 defaults.json 의 기본값을 SSoT 로 삼는다. 해석 불가한 입력은 조용히 캐스팅하지 않고 거절한다. - 드라이버 셀렉트를 서버 카탈로그에 바인딩하고, 저장값이 카탈로그에 없으면 그 값을 드러내는 안내를 8곳 전수에 붙인다. 종전에는 빈 칸으로만 보여 무엇이 저장됐는지 알 수 없었다. 시나리오 매니페스트 8종을 면제 없이 신설했다. `audit:allow` 는 cross product 와 effects 검사를 함께 끄므로, 면제가 걸린 매니페스트에 선언을 추가하면 검증이 회복되지 않는다. 그 아래에서 대응 테스트가 없는 effect 이름 2건이 살아남아 있었고, 함께 정리했다.
43 lines
2.6 KiB
YAML
43 lines
2.6 KiB
YAML
feature: 게시판 설정 저장 파이프라인과 저장 훅 (B-2 / B-5)
|
|
|
|
description: |
|
|
게시판 설정도 저장 경로가 셋이다 — 관리자 화면의 벌크 저장, 값 하나만 바꾸는 단건 저장,
|
|
여러 게시판에 한꺼번에 적용하는 일괄 적용. 파이프라인 단계(캐시 무효화, 신고 알림 플래그
|
|
강제, 숫자 문자열 정규화)를 벌크 경로만 통과하고 있으면, 같은 값을 어느 경로로 저장했느냐에
|
|
따라 결과가 달라진다. 저장은 성공하고 파생 값만 어긋나므로 오류가 남지 않는다.
|
|
|
|
boolean 백필은 반대다 — 벌크 저장은 화면이 보낸 폼 전체가 기준이라 미제출 체크박스를
|
|
false 로 채워야 하지만, 단건 저장은 그 키 하나만 바꾸겠다는 뜻이다. 여기서 백필하면
|
|
운영자가 건드리지도 않은 다른 토글이 전부 꺼진다.
|
|
|
|
저장 훅(`core.module_settings.after_save`)의 구독자는 SEO 캐시 무효화다. 게시판 설정의
|
|
SEO 메타 템플릿을 바꿔도 캐시가 그대로면 봇 화면만 옛 값을 계속 보여준다.
|
|
|
|
axis_notes:
|
|
save_path: |
|
|
bulk_apply 는 게시판 여러 개에 같은 설정을 적용하는 경로다. 대상이 N개라 캐시 무효화도
|
|
N개 게시판에 걸려야 한다 — 한 건만 무효화하면 나머지는 옛 값을 유지한다.
|
|
카테고리·파이프라인 단계는 조합이 아니라 각 경로가 통과해야 할 목록이라 effects 로 둔다.
|
|
|
|
axes:
|
|
save_path: [single_key, bulk, bulk_apply]
|
|
|
|
effects:
|
|
# 파이프라인 통과 (B-2)
|
|
- single_key_save_invalidates_service_cache # 저장 직후 조회가 새 값을 본다
|
|
- single_key_save_does_not_backfill_booleans # 단건 저장이 미제출 토글을 끄지 않는다
|
|
- bulk_save_backfills_unsubmitted_booleans # 벌크 저장은 폼 전체가 기준 (기존 계약 유지)
|
|
- report_notification_flags_forced_on_single_key_save
|
|
- numeric_string_normalized_on_single_key_save
|
|
- board_settings_storage_isolated_in_tests # 테스트 저장소 격리 (실제 설정 파일 오염 차단)
|
|
|
|
# 저장 훅과 구독자 (B-5)
|
|
- module_settings_after_save_hook_fired
|
|
- seo_cache_invalidated_on_module_settings_save
|
|
- seo_cache_invalidated_on_bulk_apply # 일괄 적용은 대상 게시판 전부에 걸린다
|
|
- seo_cache_untouched_for_other_module # 다른 모듈 식별자의 저장에는 반응하지 않는다
|
|
|
|
test_files:
|
|
- modules/_bundled/sirsoft-board/tests/Unit/BoardSetSettingPipelineTest.php
|
|
- modules/_bundled/sirsoft-board/tests/Feature/Admin/BoardSettingsSeoCacheInvalidationTest.php
|