Files
Gnuboard7/modules/_bundled/gnuboard7-hello_module/docs/data-model.md
T
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

4.0 KiB

Hello 모듈 — 데이터 모델

모델·소유 테이블·마이그레이션·Enum · 진입점: AGENTS.md

모델

모델 테이블 fillable 관계 특성
Memo gnuboard7_hello_module_memos 3 - -

Memo 하나이며 fillable 이 셋뿐입니다. 관계도 특성(SoftDeletes·검색 색인 등)도 없습니다 — "모델은 이런 모양이다" 를 보이는 데 그 이상이 필요하지 않기 때문입니다.

실제 모듈이 모델에 붙이는 것들(관계·캐스팅·스코프·SoftDeletes·검색 색인·HasUserOverrides)은 그것을 실제로 쓰는 확장의 문서를 참고합니다.

소유 테이블

테이블 모델
gnuboard7_hello_module_memos Memo

gnuboard7_hello_module_memos 하나입니다. 테이블 이름에 확장 식별자 전체가 접두사로 들어가는 것에 주의합니다 — 확장은 같은 데이터베이스를 공유하므로, 짧은 이름(memos)을 쓰면 다른 확장과 충돌합니다.

복제해서 새 모듈을 만들 때 이 접두사도 함께 바꿔야 합니다. 마이그레이션 파일명·클래스 안의 테이블 이름·모델의 $table 이 모두 대상입니다.

마이그레이션

마이그레이션 1개.

파일 생성 테이블 변경 테이블 down()
2026_04_21_000001_create_gnuboard7_hello_module_memos_table.php gnuboard7_hello_module_memos gnuboard7_hello_module_memos ✅

하나이며 테이블 생성뿐입니다. 한국어 comment 와 down() 이 붙어 있는 것이 규약의 본보기입니다.

실제 모듈에서 새 컬럼을 더할 때는 이 create_* 파일을 고치지 않습니다 — 이미 설치된 사이트는 그 파일을 다시 실행하지 않으므로 반영되지 않습니다. 새 add_* 파일을 더하고, 기존 행을 손봐야 하면 upgrades/ 의 업그레이드 스텝 백필을 함께 씁니다.

Enum

Enum 이 없습니다.

없습니다. 메모에는 상태도 분류도 없어 닫힌 어휘가 생기지 않았습니다.

실제 모듈에서 상태·타입·분류를 다룰 때는 문자열 리터럴이 아니라 Enum 을 단일 출처로 둡니다 — 화면 필터 옵션·검증 게이트·실제 기록 값 셋이 같은 Enum 에서 파생되지 않으면, 빠진 값으로 기록된 행이 어떤 필터로도 도달할 수 없게 됩니다.

Repository

클래스 종류 설명
MemoRepository 구현 메모 Repository 구현체
MemoRepositoryInterface 인터페이스 메모 Repository 인터페이스

인터페이스와 구현이 1:1 로 짝을 이룹니다. MemoService 는 인터페이스만 주입받습니다 — 구체 클래스를 타입힌트하면 그 Service 를 다른 구현으로 바꿀 수 없고, 테스트에서 대역을 끼울 수도 없습니다.

바인딩은 모듈 서비스 프로바이더가 담당합니다. 새 Repository 를 더할 때는 인터페이스·구현· 바인딩 셋을 함께 만듭니다 — 바인딩을 빠뜨리면 주입 시점에 해결 실패로 드러납니다.