Files
HeuJung 6c63536f81 docs(core,extensions): 확장 20개 개발자 문서 완비와 문서 소유 이관
번들 확장 20개 전부에 AGENTS.md · README.md · docs/ 를 채우고, 코어가 들고
있던 확장 소유 문서 두 갈래를 그 확장으로 옮긴다. 번들 템플릿의 컴포넌트·
핸들러·레이아웃 상세와 확장이 구독하는 활동 로그 훅 목록이 그 대상이며,
코어에는 총계와 링크만 남아 확장이 기능을 늘릴 때 코어 문서를 고쳐야 하던
역방향 의존이 사라진다.

전수 완비를 확인하고 강제를 조인다 — 문서 동반 룰을 대상 목록 없는 error 로
승격하고, 검사 스크립트가 문서 미보유를 실패로 올리며, 미채움 마커 baseline 을
0 으로 기록한다. 한쪽만 조이면 "새 확장이 문서 없이 들어와도 초록" 인 상태가
남는데 그 결과는 이상 0건과 구분되지 않는다.

집필 과정에서 드러난 생성기 결함 셋을 함께 고친다. 스케줄 주기 열이 계약 키를
읽지 않아 모든 확장에서 '-' 였고, 네임스페이스를 붙인 핸들러 등록 키가 수집에서
통째로 빠졌으며, README 골격이 폐기된 히어로 배지를 계속 찍어내고 있었다.
셋 다 산출물이 아니라 원천이 틀린 것이라, 가드의 모집단에 생성기 출력 자체를
넣어 다음 확장이 같은 상태로 태어나는 경로를 막는다.
2026-08-31 22:57:36 +09:00

5.2 KiB

Hello 플러그인 — 설정·권한·라우트

설정 스키마·권한·메뉴·라우트·의존 관계 · 진입점: AGENTS.md

설정 스키마

키 타입 기본값 설명
log_enabled boolean true 로그 기록 사용

기본값 파일: config/settings/defaults.json · 설정 화면 레이아웃: resources/layouts/admin/plugin_settings.json

하나뿐이며 그 하나가 규약의 본보기입니다.

log_enabled 는 이 플러그인의 부가 동작(로그 기록)을 끄는 토글입니다. 부가 동작은 설정으로 끌 수 있어야 한다는 것이 규약이며, 설정 없이 무조건 동작하면 그 확장을 설치한 사이트는 멈출 방법이 없습니다.

읽기는 plugin_setting()(또는 PluginSettingsService)으로 하며, 리스너가 동작 직전에 확인합니다 — 등록 시점에 확인하면 설정을 바꿔도 다음 재부팅까지 반영되지 않습니다.

설정 화면은 resources/layouts/admin/plugin_settings.json 이 그립니다. 파일 이름이 계약이므로 코어가 이 고정 경로를 찾으며, 이름을 바꾸면 설정 화면 자체가 사라집니다.

권한

선언된 권한이 없습니다.

선언하지 않습니다. 이 샘플에는 접근을 나눌 화면도 데이터도 없습니다.

설정 변경은 코어의 플러그인 설정 권한이 관장합니다. 플러그인이 자기 권한을 선언할 때는 {확장식별자}.{카테고리}.{액션} 으로 이름이 조립되므로 다른 확장과 겹칠 걱정이 없습니다.

메뉴

등록하는 메뉴가 없습니다.

등록하지 않습니다. 이 샘플에는 자체 관리 화면이 없습니다.

설정은 코어의 플러그인 목록에서 이 플러그인의 설정으로 들어가는 공통 경로를 씁니다 — 코어가 resources/layouts/admin/plugin_settings.json 을 찾아 그리므로 자체 메뉴가 필요 없습니다.

메뉴를 등록할 때는 권한과 짝을 이뤄야 합니다. 권한만 추가하고 메뉴를 빠뜨리면 화면에 도달할 길이 없고, 반대면 눌러도 403 입니다.

라우트

종류 파일 URL prefix
web src/routes/web.php /plugins/gnuboard7-hello_plugin/...

확장 라우트는 활성 상태인 확장의 것만 등록됩니다. 라우트 정의를 바꾸면 라우트 캐시 재생성이 필요합니다.

web.php 하나뿐이며, 플러그인도 라우트를 가질 수 있다는 사실을 보이기 위한 예시입니다.

URL prefix 가 /plugins/{식별자}/ 로 고정되는 것에 주의합니다. 확장이 다른 확장이나 코어의 경로를 침범하지 않도록 코어가 강제하는 규칙이며, 이 네임스페이스 밖의 경로를 선언하면 어느 쪽이 이기는지가 설치 순서에 좌우됩니다.

모든 라우트에 name() 이 필요합니다. 라우트를 바꾼 뒤에는 라우트 캐시를 다시 굽습니다 — 확장 라우트는 활성 상태인 확장의 것만 등록되고, 캐시에 없는 라우트는 예외도 경고도 없이 404 가 됩니다.

의존 관계

이 확장이 의존하는 확장

확장 유형 버전 제약 번들
gnuboard7-hello_module 모듈 >=0.1.0 ✅

이 확장에 의존하는 확장 (이 확장을 비활성화하면 함께 영향을 받습니다)

없음.

gnuboard7-hello_module 에 의존합니다(>=0.1.0).

이 의존 선언 자체가 학습 포인트입니다. 훅 구독은 상대가 없으면 발화하지 않을 뿐이라 보통은 manifest 의존으로 올리지 않습니다 — "없으면 그 기능만 비는" 관계이기 때문입니다. 그런데 이 샘플은 그 모듈의 훅을 보는 것 자체가 목적이라 모듈 없이는 존재 이유가 없습니다.

실제 플러그인에서는 이 둘을 구분해 판단합니다:

관계 의존 선언
없으면 그 기능만 비고 나머지는 정상 선언하지 않는다 (훅 구독으로 충분)
없으면 확장이 성립하지 않는다 manifest 의존으로 선언

의존을 과하게 선언하면 그 확장을 비활성화할 때 이쪽까지 함께 막히고, 부족하게 선언하면 상대가 없을 때 조용히 아무 일도 하지 않습니다.