문서 목차
이 페이지에서목차

feature-book_content_search

브릭 템플릿으로 책 안의 내용을 검색하는 기능을 추가할 때 사용합니다. book_content_search 번들의 검색 화면과 관련 코드를 배치합니다.

한마디로#

book_content_search 번들의 검색 화면과 관련 코드를 배치합니다.

무엇을·언제#

  • 무엇을 해주나요?
    • 책(PDF) 안의 글자를 검색하는 기능의 기본 코드 골격을 자동으로 만들어 줍니다.
    • 책 안 검색뿐 아니라 구글/네이버 같은 외부 검색 연결까지 함께 준비해 줍니다.
    • 화면(앱 쪽)부터 서버(백엔드) 쪽까지 필요한 파일들을 한 세트로 만들어 줍니다.
  • 언제 사용하나요?
    • 새로 "책 내용 검색" 기능을 처음 만들기 시작할 때 (뼈대를 잡을 때).
    • 이미 있는 책 내용 검색 모듈을 확장하거나 이름을 바꿔서 비슷한 기능을 또 만들 때.

핵심 용어#

용어쉬운 설명
feature(피처)/feature module하나의 완성된 기능 묶음. 여기서는 "책 내용 검색" 기능 한 세트
brick(브릭) / mason 미리 만들어 둔 코드 틀(brick)을 찍어내는 도구(mason). 붕어빵 틀과 반죽처럼, 같은 모양의 코드를 빠르게 생성
scaffold(스캐폴드)건물의 비계처럼, 본격 작업 전 자동으로 세워 주는 코드 뼈대
Clean Architecture코드를 역할별(화면/규칙/데이터)로 깔끔히 나눠 정리하는 설계 방식
PDF전자책 등에 쓰는 문서 파일 형식. 여기서는 검색 대상이 되는 책 파일
Backend / Serverpod앱 뒤에서 데이터를 처리하는 서버. Serverpod는 그 서버를 만드는 도구
Entity(엔터티)다루는 데이터의 핵심 개념. 예: "검색 결과" 한 건
UseCase(유스케이스)"구글에서 검색하기"처럼 사용자가 하는 하나의 동작 단위
Repository(리포지토리)데이터를 가져오고 저장하는 창구 역할의 코드
BLoC(블록)화면의 상태와 동작을 관리하는 부품(예: 검색 중/검색 완료 등을 챙김)
Page / Widget사용자가 보는 화면(Page)과 그 안의 작은 구성 조각(Widget)
GoRouter / Route앱에서 어느 화면으로 이동할지 길을 안내하는 길잡이
Dependency Injection(DI)필요한 부품을 알아서 끼워 넣어 주는 연결 방식
Unit / BDD test코드가 제대로 동작하는지 자동으로 점검하는 검사들
snake_case / PascalCase 이름 표기 규칙. 예: book_content_search(스네이크), PdfSearchResult(파스칼)

Generates a Clean Architecture-based feature module for book content search functionality. Provides integrated search features including in-PDF text search and Google/Naver external search integration.

Quick Start#

먼저 .cob/feature-layout.json을 읽고, 없으면 cob의 기존 legacy 트리 판정 → 나머지는 bundle을 따른다. marker를 보존하고 생성 배치 계약을 적용한다. 패키지는 <d>·console_<d>·<d>_server(type: module)·<d>_client; bundle.json(조립)·host-integration.json(결합)을 나누고 UI 번역은 역할별 lib/src/i18n/에 둔다.

cob compose -m feature.yaml

기능/엔티티 이름은 feature.yaml의 feature·models.entities에 선언한다. donor UI를 kernel에 복제하지 말고 필요한 server/client 공급과 compose UI의 의존 폐포를 확인한다.

Variables#

VariableTypeDefaultDescription
project_namestring-Project name (snake_case)
org_namestring-Organization name
org_tldstringcomTop-level domain
feature_name string book_content_search Feature module name (snake_case)
primary_entity string PdfSearchResult Primary domain entity name (PascalCase)

Generated Structure#

feature/{feature_name}/app/        # package: {feature_name}; console: sibling console/
├── lib/
│   ├── {feature_name}.dart
│   └── src/
│       ├── data/         # Repository implementation
│       ├── domain/       # Entity, UseCase, Repository Interface
│       ├── presentation/ # BLoC, Page, Widget
│       ├── route/        # GoRouter TypedRoute
│       └── i18n/         # 기능 소유 번역
└── test/                 # Unit, widget, golden (Patrol은 실행 앱 소유)

Backend Module#

A Serverpod backend module is generated alongside:

feature/{feature_name}/server/lib/src/
├── endpoint/     # CRUD endpoints
├── service/      # Business logic
├── model/        # Entity, DTO (.spy.yaml)
├── exception/    # Exception handling
├── validation/   # Input validation
└── host/         # 세션 인지 포트 계약 (호스트 import 금지)

SDK는 feature/{feature_name}/client/, 순수 테스트는 server/test/unit/에 둔다. DB/withServerpod 통합 테스트는 backend/{project_name}_server/test/integration/에 두고 bundle.json.hostTests에 등재한다. 신규 기본은 공식 4.0.3; 호스트 포트 bind(serverpod, …) / forSession(session)의 바인딩 부재·미구현 어댑터는 fail-closed로 실패한다.

Modern path. Generate this feature full-stack with cob compose -m feature.yaml — the backend comes from the backend_feature brick (13 backend: file toggles) plus one b-entity per models.entities, and cob auto-registers routes + the melos workspace. See the plugin README → Generation Workflows.

조건부 legacy (legacy 판정에서만). embedded serverpod_backend의 has_X 상태는 기존 donor 계약이다. 신규 bundle은 backend_feature를 기능 모듈에 합성하며 호스트에 embedded 업무 코드를 만들지 않는다.

primary_entity / secondary_entity are not raw Mason brick vars — pass them via cob apply --primary-entity/--secondary-entity or declare them under models.entities in feature.yaml.

Key Components#

Domain#

  • Entities: PdfSearchResult
  • UseCases: SearchInGoogle, SearchInNaver, SearchInPdf
  • Repository: IBookContentSearchRepository

Presentation#

  • BLoC: BookContentSearchBloc
  • Pages: BookContentSearchPage

조건부 legacy — legacy 판정에서만 raw Mason 사용#

Changing the feature_name variable automatically updates all file names, class names, and import paths:

mason make feature-book_content_search --feature_name content_search

검색어를 입력하면 문서를 찾습니다.

↑ ↓ 이동 · Enter 열기Esc 닫기