Plextype Docsv0.10.0
Guides
시작하기
setup, DB 초기화, 개발 서버 실행
프로젝트 구조
코어와 개인 확장 영역
Extensions
기능별 폴더, 라우트 연결, registry·Trigger
Layouts & Page
기본 레이아웃과 홈 페이지 교체
Project API
기능별 API·스키마와 DB 적용 절차
Posts
게시판 스킨과 issuetracker 구조
Components
공통 UI 컴포넌트 사용 기준
Previews
기본 제공 화면 확인
운영 규칙
upstream 패치와 커스텀 충돌 방지
Documentation
문서 작성과 유지 기준
Documentation

프로젝트 구조

Gjworks는 코어 업데이트와 개인 커스텀을 분리하기 위해 라우트, 모듈, registry, extensions를 역할별로 나눕니다.

큰 원칙

코어는 업데이트 가능한 영역이고 extensions는 프로젝트별 자유 영역입니다. 사용자가 코어 파일을 직접 수정하지 않아도 레이아웃, 홈, 스킨, 추가 라우트를 바꿀 수 있어야 합니다.

이 구조의 목표는 “코어 업데이트를 받을 수 있는 프로젝트”입니다. 커스텀 기능의 원본은 src/extensions의 기능별 폴더에 모으고, src/app에는 Next.js가 읽는 연결 파일을 둡니다. src/modules와 src/core의 기본 동작은 유지합니다.

주요 디렉토리

  • src/app: Next.js App Router 라우트입니다. 코어 라우트는 직접 수정하지 않는 것을 권장합니다.
  • src/app/(modules): 기본 모듈 라우트와 일부 확장 연결 파일이 있습니다. 경로만으로 소유권을 판단하지 않고 확장의 routes.json도 확인합니다.
  • src/app/(pages): 일반 문서/소개/정적 페이지 라우트입니다.
  • src/app/(extensions): 확장 라우트의 연결 파일 영역입니다. 구현 원본은 기능 폴더에 있으며 Git 추적 여부는 각 프로젝트 정책으로 결정합니다.
  • src/modules: 비즈니스 모듈입니다. UI는 action을 통해 데이터에 접근하고 query를 직접 호출하지 않습니다.
  • src/layouts: 코어가 제공하는 기본 레이아웃입니다.
  • src/core/registry/defaultHomePage.tsx: 코어 fallback으로 제공되는 기본 홈 페이지입니다.
  • src/core/registry: extensions가 없을 때 사용하는 fallback registry입니다.
  • src/extensions: 기능별 원본과 공유 등록 지점입니다. store, service, partners 등은 독립 기능, posts/issuetracker, user/gjworks 등은 코어를 확장하는 기능·스킨입니다.
src/modules/posts/                         코어 게시판 (유지)
src/extensions/posts/issuetracker/          액션·스킨·registry·capability
src/modules/user/                          코어 회원 (유지)
src/extensions/user/gjworks/                회원 스킨·오버라이딩
src/extensions/store/                      Store 원본
  routes/                                 페이지 구현
  api/                                    API 구현
  actions/                                비즈니스 로직·쿼리
  routes.json                             Next.js 연결 목록
  registry.tsx                            메뉴·등록 정보

Action Layer 규칙

.tsx 페이지와 컴포넌트는 Prisma query를 직접 호출하지 않습니다. 데이터 흐름은 Component/Page → Action → Query 순서를 따릅니다. 관리자 전용 action은 이름 중간에 Admin을 포함하고, 서버 action 함수명은 Action으로 끝냅니다.

권장 흐름
src/modules/posts/tpl/default/list.tsx
  -> getDocumentListAction()
  -> getDocumentListQuery()
  -> prisma.document.findMany()

피해야 할 흐름
tsx 컴포넌트 -> prisma.document.findMany()

코어와 확장의 경계

새 페이지는 해당 기능의 routes/에 작성하고 routes.json에 연결을 선언한 뒤 npm run extensions:sync를 실행합니다. 게시판 확장은 src/extensions/posts/[feature] 안에 액션·스킨·등록 정보를 모읍니다. 독립 기능은 src/extensions/[feature] 안에 구현과 registry.tsx를 둡니다. DB 모델은 해당 기능의 prisma/schema.prisma 또는 prisma/schema/*.prisma에 둡니다.

코어와 확장을 한 폴더로 합치는 작업이 아닙니다. 등록 장치, 공용 UI, 인증·권한 등 공유 기능은 복제하지 않습니다. 폴더 단위 소스 정리와 독립 설치 패키지는 다르며, 다른 확장의 의존성 및 DB 설치 절차는 별도로 확인해야 합니다.

반대로 코어의 인증, 게시판, 댓글, 첨부파일 같은 공통 기능을 수정해야 할 때는 먼저 trigger, capability, extension 라우트로 해결 가능한지 확인합니다.

Plextype Docsv0.10.0Extensions first, core clean.
ⓒ gjworks
On this page
큰 원칙주요 디렉토리Action Layer 규칙코어와 확장의 경계
Recent changes
feat: extension sync 기능 추가 및 쉬운설치 추가
v0.10.0891b287
fix: 알림 관리 기능 추가
v0.10.01409f51
스토어의 앱상품 등록
v0.10.019d39c8