큰 원칙
코어는 업데이트 가능한 영역이고 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 라우트로 해결 가능한지 확인합니다.