Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "webcraft",
"version": "0.8.0",
"version": "0.9.0",
"description": "웹 플랫폼 개발 지침(프론트·디자인 시스템·백엔드·API·DB·아키텍처)과 프로젝트 연결",
"author": {
"name": "dev-goraebap"
Expand Down
2 changes: 1 addition & 1 deletion plugins/webcraft/dist/claude/plugins/webcraft/package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "webcraft",
"version": "0.8.0",
"version": "0.9.0",
"private": true,
"type": "module"
}
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@
disable-model-invocation: true
name: api
description: 웹 플랫폼의 HTTP 계약, 오류 응답, 인증·권한, 첨부와 OpenAPI 생성 타입을 맞춥니다. 엔드포인트·DTO·권한·업로드 계약을 만들거나 고칠 때 사용합니다.
arc42: "8.1"
---

# API 계약
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@
disable-model-invocation: true
name: architecture
description: 웹 플랫폼의 모듈 경계, 상태 소유권, 외부 연동과 배포·복구 설계를 검토합니다. 여러 영역의 구조·새 기술·운영 방식을 바꿀 때 사용합니다.
arc42: "4, 7"
---

# 아키텍처
Expand All @@ -13,6 +14,7 @@ description: 웹 플랫폼의 모듈 경계, 상태 소유권, 외부 연동과
- 비밀값은 실행 환경의 비밀 저장 수단으로 관리합니다. 계정·접속 정보·업무 데이터는 공통 지침이나 시드에 넣지 않습니다.
- 되돌리기 어려운 기술 선택은 맥락·결정·대안을 프로젝트 기록에 남깁니다. 제품 요구사항과 구현 상태를 구분합니다.
- 운영 변경은 배포 순서·설정·데이터 이관·백업·복구·수동 작업을 검토 가능한 형태로 만듭니다. 인프라·호스트·태그·배포 권한은 프로젝트 정책입니다.
- 프로젝트의 아키텍처 정의서(arc42)를 쓸 때 Webcraft를 따르는 절은 지침 본문을 복사하지 않고, 각 지침의 `arc42` 값에 맞춰 지침 이름·플러그인 판·링크와 AGENTS.md 프로젝트 규칙 표의 예외만 적습니다. Webcraft 지침에 원천이 없는 절(1, 3 등)은 프로젝트의 요구사항·코드·운영 문서에서 채우고, 채울 원천이 없으면 비어 있다고 먼저 알립니다.

제품이 사용자에게 에이전트 플러그인을 제공하면 [제품 플러그인 관리](references/product-plugins.md)를 읽습니다.

Expand Down
Original file line number Diff line number Diff line change
@@ -1,3 +1,7 @@
---
arc42: "8.1"
---

# 제품 플러그인 관리

제품이 사용자에게 MCP 연결과 사용법을 제공할 때 적용합니다. 저장소 개발용 스킬과 사용자에게 배포할 스킬은 읽는 사람과 목적이 다르므로 원본을 나눕니다.
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@
disable-model-invocation: true
name: backend
description: Java·Spring Boot·jOOQ 기반 모듈형 모놀리스의 도메인, 서비스, 저장소와 조회 경계를 구현합니다. 서버 기능·유스케이스·모듈 구조를 만들거나 고칠 때 사용합니다.
arc42: "8.2, 5, 2"
---

# 백엔드
Expand Down
Original file line number Diff line number Diff line change
@@ -1,3 +1,7 @@
---
arc42: "8.2"
---

# 코드 규칙

- 역할을 Controller·Service·Query·Repository·Requests·Views·ErrorCode 이름으로 드러냅니다. 피처별 Service가 읽기·쓰기를 함께 제공합니다. 저장소·조회 구현은 Jooq처럼 기술 이름을 붙이고 QueryRepository처럼 역할을 섞지 않습니다.
Expand Down
Original file line number Diff line number Diff line change
@@ -1,3 +1,7 @@
---
arc42: "8.1, 5"
---

# 모듈 간 계약

모듈 루트에는 다른 모듈이 참조할 공개 계약과 공개 값 타입을 둡니다. 다른 모듈은 내부 application·domain·infrastructure 타입을 참조하지 않습니다.
Expand Down
Original file line number Diff line number Diff line change
@@ -1,3 +1,7 @@
---
arc42: "8.1"
---

# 모듈 간 조회

명령은 공개 계약으로 처리합니다. 조회는 표시값 조립과 결과 집합 결정의 요구를 구분합니다.
Expand Down
Original file line number Diff line number Diff line change
@@ -1,3 +1,7 @@
---
arc42: "8.2"
---

# 도메인 오류와 서비스 오류

오류를 판정하는 주체에 따라 책임을 나눕니다. 도메인은 업무 불변식과 의미 있는 상태 전이를 알고, application 서비스는 요청 주체·자원 부재·접근 권한·동시 변경을 판정합니다.
Expand Down
Original file line number Diff line number Diff line change
@@ -1,3 +1,7 @@
---
arc42: "8.2, 5, 6"
---

# 계층과 명령

모듈은 단수 이름으로 두고 내부를 application·domain·infrastructure로 나눕니다. 모듈 루트의 Facade·Spi·Event가 공개 계약입니다. 다른 모듈의 내부 패키지를 직접 참조하거나 순환 호출하지 않습니다.
Expand Down
Original file line number Diff line number Diff line change
@@ -1,3 +1,7 @@
---
arc42: "8.2"
---

# 조회 포트

화면 조회 포트 `XxxQuery`는 그 조회를 소유한 서비스와 같은 피처의 application에 둡니다. 서비스와 조회 포트는 1:1로 구성합니다. 구현은 infrastructure의 package-private `JooqXxxQuery`에 둡니다. 도메인 저장소 구현과 합치지 않습니다.
Expand Down
Original file line number Diff line number Diff line change
@@ -1,3 +1,7 @@
---
arc42: "8.1"
---

# 공유와 참조

application은 유스케이스·피처별로, domain은 애그리거트별로 나눕니다. 두 축은 독립적이며 서비스 하나가 여러 애그리거트를 조율할 수 있습니다. 처음에는 계층 루트에 두고 실제로 여러 단위가 생길 때 나눕니다.
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@
disable-model-invocation: true
name: database
description: Flyway와 jOOQ를 사용하는 프로젝트의 스키마 변경, 기존 데이터 이관, 생성 코드 동기화를 수행합니다. 테이블·열·마이그레이션·DB 이관을 다룰 때 사용합니다.
arc42: "8.3, 2, 7"
---

# DB와 마이그레이션
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@
disable-model-invocation: true
name: design-system
description: Astryx 기반 웹 앱에서 테마·아이콘·부품 조합·앱 셸·페이지 배치·반응형과 화면 상호작용을 일관되게 구현합니다. 부품·스타일·테마·레이아웃·화면 패턴을 만들거나 바꿀 때 사용합니다.
arc42: "8.5, 2"
---

# 디자인 시스템
Expand Down
Original file line number Diff line number Diff line change
@@ -1,3 +1,7 @@
---
arc42: "9"
---

# 지침 개선 기록

## 2026-11-05 · 제작 맥락의 화면 노출
Expand Down
Original file line number Diff line number Diff line change
@@ -1,3 +1,7 @@
---
arc42: "8.6, 5"
---

# 앱 셸과 모바일 탐색

앱 셸([AppFrame](https://github.com/dev-goraebap/dev.goraebap/blob/main/site/src/shared/ui/layouts/app/AppFrame.tsx))은 Astryx AppShell과 SideNav 위에 메뉴·페이지·휴대폰 탐색을 조립합니다. 메뉴·테마·밀도는 페이지마다 새로 만들지 않습니다.
Expand Down
Original file line number Diff line number Diff line change
@@ -1,3 +1,7 @@
---
arc42: "8.8"
---

# Astryx 작업 절차

## 구현 전
Expand Down
Original file line number Diff line number Diff line change
@@ -1,3 +1,7 @@
---
arc42: "8.8"
---

# Primitives (기본 부품)

버튼·라벨·아바타·입력처럼 독립된 UI 역할을 가진 부품은 Astryx를 직접 import합니다. 이름만 바꾼 래퍼를 만들어 API를 복제하지 않습니다. 고래밥의 기준은 테마 변형·크기와 쓰임 구분이며, 부품의 모든 API는 공식 문서(`astryx component <이름>`)를 따릅니다.
Expand Down
Original file line number Diff line number Diff line change
@@ -1,3 +1,7 @@
---
arc42: "8.8"
---

# Composites (조합 부품)

여러 기본 부품을 묶어 반복해 쓰는 단위입니다. 조합은 값과 동작을 props로 받고 제품의 API·라우트·업무 정책을 직접 소유하지 않습니다. Playground 템플릿과 견본은 같은 조합을 import하며 그 안에 같은 UI를 다시 만들지 않습니다. FSD의 widgets와 같은 분류가 아닙니다.
Expand Down
Original file line number Diff line number Diff line change
@@ -1,3 +1,7 @@
---
arc42: "8.7"
---

# 문구·본문과 검증

## 화면 문구를 넣는 기준
Expand Down
Original file line number Diff line number Diff line change
@@ -1,3 +1,7 @@
---
arc42: "8.7"
---

# 생성 양식

제목과 본문이 있는 것을 만들고 고칠 때는 한 양식([ComposeForm·ComposeSurface](https://github.com/dev-goraebap/dev.goraebap/tree/main/site/src/shared/ui/patterns/compose))을 대화상자·페이지·휴대폰에서 같이 씁니다. 몇 칸으로 끝나는 변경은 [짧은 양식](dialog.md)을 씁니다.
Expand Down
Original file line number Diff line number Diff line change
@@ -1,3 +1,7 @@
---
arc42: "8.7, 6"
---

# 데이터 상태

조회 결과가 없거나 늦거나 실패했을 때의 화면입니다. 상태마다 사용자가 할 수 있는 다음 행동이 다르므로 구분해서 보입니다.
Expand Down
Original file line number Diff line number Diff line change
@@ -1,3 +1,7 @@
---
arc42: "8.6"
---

# 공통 다이얼로그

모든 대화상자는 한 틀([AppDialog](https://github.com/dev-goraebap/dev.goraebap/blob/main/site/src/shared/ui/composites/dialog/AppDialog.tsx))을 씁니다. 머리·스크롤 본문·선택적 바닥이며 긴 본문에서도 본문만 스크롤하고 제목·닫기·마지막 동작은 보입니다. 제품 화면은 Astryx Dialog를 직접 쓰지 않습니다.
Expand Down
Original file line number Diff line number Diff line change
@@ -1,3 +1,7 @@
---
arc42: "8.5"
---

# 아이콘

아이콘은 명령·상태·대상을 구분하는 시각 언어입니다. 화면은 의미 이름(`search`, `back`, `layout-list`)으로 아이콘을 부르고, 의미 이름에서 Solar 아이콘으로 가는 매핑은 [생성 스크립트](https://github.com/dev-goraebap/dev.goraebap/blob/main/site/scripts/generate-icons.mjs) 한 곳에 둡니다. 사용하는 이름만 생성하며, 이름을 더하면 스크립트를 다시 실행합니다.
Expand Down
Original file line number Diff line number Diff line change
@@ -1,3 +1,7 @@
---
arc42: "8.7"
---

# 입력과 상호작용

어떤 상호작용을 어느 표면에서 할지 정합니다. 개별 도구의 동작은 [검색·필터·표시](search-filter.md), 대화상자의 배치는 [공통 다이얼로그](dialog.md), 제목·본문 작성은 [생성 양식](creation-form.md)이 소유합니다.
Expand Down
Original file line number Diff line number Diff line change
@@ -1,3 +1,7 @@
---
arc42: "8.6"
---

# 페이지 배치

페이지([Page](https://github.com/dev-goraebap/dev.goraebap/blob/main/site/src/shared/ui/layouts/page/Page.tsx))는 머리 줄·배너 자리·툴바·적용 줄·본문의 순서를 고정합니다. 머리와 툴바는 고정하고 본문만 스크롤합니다. 구현 전에 기존 Page와 같은 역할의 화면을 읽고 각 조작을 보기·조건·표시·주 동작으로 나눕니다.
Expand Down
Original file line number Diff line number Diff line change
@@ -1,3 +1,7 @@
---
arc42: "8.5"
---

# 모션

움직임은 위치가 바뀌었거나 새 내용이 도착했음을 알릴 때, 또는 절차 완료를 한 번 축하할 때만 씁니다. 장식으로 반복하는 움직임을 두지 않습니다.
Expand Down
Original file line number Diff line number Diff line change
@@ -1,3 +1,7 @@
---
arc42: "8.8"
---

# 패턴의 글·코드·실행 견본

화면을 만들기 전에 해당 패턴의 사용 기준, 구현 파일, 실행 견본을 함께 읽습니다. 글은 선택 기준과 지킬 조건, 코드는 배치와 동작, 견본은 상태와 화면 크기를 바꾸어 확인하는 데 씁니다.
Expand Down
Original file line number Diff line number Diff line change
@@ -1,3 +1,7 @@
---
arc42: "8.6"
---

# 미리보기 패널

목록을 그대로 둔 채 항목을 차례로 훑을 때 목록 옆에 여는 비모달 패널입니다. Linear는 Space 키로, Plane은 행 클릭으로 엽니다. 우리는 Plane과 달리 미리보기 대상을 주소에 남겨 뒤로가기·새로고침·공유가 같은 화면을 엽니다. 구현은 키트의 [peek](https://github.com/dev-goraebap/dev.goraebap/tree/main/site/src/shared/ui/patterns/routing)와 [PeekLayout](https://github.com/dev-goraebap/dev.goraebap/tree/main/site/src/shared/ui/layouts/peek)·[InboxLayout](https://github.com/dev-goraebap/dev.goraebap/tree/main/site/src/shared/ui/layouts/peek)·[InboxPane](https://github.com/dev-goraebap/dev.goraebap/tree/main/site/src/shared/ui/layouts/peek)이 맡습니다.
Expand Down
Original file line number Diff line number Diff line change
@@ -1,3 +1,7 @@
---
arc42: "8.8"
---

# 기본 레퍼런스의 사용과 갱신

프로젝트 디자인·기존 부품·사용자가 준 참고 화면이 있으면 그것을 우선합니다. 지정이 없을 때 [workspace 키트](https://github.com/dev-goraebap/dev.goraebap/blob/main/site/src/shared/ui/README.md)를 출발점으로 씁니다. 키트는 선택해서 채택하는 설계와 코드의 스냅샷이며 제품 전체를 자동 생성하는 템플릿이 아닙니다.
Expand Down
Original file line number Diff line number Diff line change
@@ -1,3 +1,7 @@
---
arc42: "8.6, 6"
---

# 라우트 마스킹

자기 주소가 있는 작성·수정 양식을 데스크톱 목록 위 대화상자로 엽니다. 목록은 그대로 두고 주소창에는 양식의 실제 주소를 보입니다. 상태·복귀와 직접 링크의 계약은 frontend의 [화면 전환](../../frontend/references/navigation.md)이 소유하고, 키트의 [routed-panel](https://github.com/dev-goraebap/dev.goraebap/blob/main/site/src/shared/ui/patterns/routing/routed-panel.ts)이 구현합니다.
Expand Down
Original file line number Diff line number Diff line change
@@ -1,3 +1,7 @@
---
arc42: "8.7"
---

# 검색·필터·표시

목록의 도구는 세 가지 역할로 나눕니다. 검색은 글자로 좁히고, 필터는 속성 값으로 거르고, 표시는 같은 결과를 어떻게 보일지(보기 방식·정렬·그룹) 정합니다. 도구는 이 순서로 같은 좁은 간격에 두고 만들기는 넓은 간격 뒤에 둡니다. 뷰·탭 알약으로 도구를 만들지 않습니다.
Expand Down
Original file line number Diff line number Diff line change
@@ -1,3 +1,7 @@
---
arc42: "8.5"
---

# 간격과 크기

앱의 크기는 rem과 테마 토큰으로 씁니다. 1px 선과 그림자만 px로 둡니다. 그래야 루트 글자 크기를 키울 때 부품 높이·간격·모서리가 함께 커집니다.
Expand Down
Original file line number Diff line number Diff line change
@@ -1,3 +1,7 @@
---
arc42: "8.5"
---

# 면과 경계

화면은 네 단계의 면으로 쌓습니다. 안쪽에 놓이는 면은 바깥보다 한 단계 위입니다. 같은 단계의 면을 겹치면 경계가 사라지므로 카드 안에 같은 카드를 넣지 않습니다.
Expand Down
Original file line number Diff line number Diff line change
@@ -1,3 +1,7 @@
---
arc42: "8.5"
---

# 테마와 색상

테마는 색·글자·간격·면·경계·모서리와 부품 변형의 기본값을 한 곳에서 정합니다. 프로젝트가 값을 정하지 않았으면 [기본 테마](https://github.com/dev-goraebap/dev.goraebap/blob/main/site/src/shared/ui/foundations/theme.ts)에서 출발합니다. Stone 테마를 확장하며 Astryx 내부 클래스 덮어쓰기와 `!important`를 쓰지 않습니다.
Expand Down
Original file line number Diff line number Diff line change
@@ -1,3 +1,7 @@
---
arc42: "8.5"
---

# 글자

조밀한 업무 화면의 글자는 네 크기로 위계를 만듭니다. 크기를 화면마다 새로 정하지 않고 테마의 `--text-*` 토큰을 씁니다.
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@
disable-model-invocation: true
name: frontend
description: React·TypeScript 웹 앱의 TanStack Router/Query 데이터 흐름, 폼 초안과 화면 전환을 구현합니다. 페이지·컴포넌트·프론트 상태를 만들거나 고칠 때 사용합니다.
arc42: "8.4, 2"
---

# 프론트엔드
Expand Down
Original file line number Diff line number Diff line change
@@ -1,3 +1,7 @@
---
arc42: "8.4"
---

# 상태와 데이터 흐름

| 상태 | 소유자 |
Expand Down
Original file line number Diff line number Diff line change
@@ -1,3 +1,7 @@
---
arc42: "8.4, 6"
---

# 화면 전환

첫 화면에 필요한 조회는 라우트 loader에서 준비하고 컴포넌트와 같은 queryOptions·캐시를 씁니다. 캐시가 있으면 오래됐어도 즉시 그리고 뒤에서 갱신하며(stale-while-revalidate), 캐시 신선도 조건으로 첫 그림을 거르지 않습니다. 앱 안 링크에 포인터나 초점이 오면 그 화면을 미리 준비합니다(intent prefetch). 화면마다 붙이지 않고 문서에 한 번 걸어 `pointerover`·`focusin`에서 앱 안 `a[href]`를 라우터의 preload로 준비하고, 같은 주소는 10초에 한 번만 부릅니다. 캐시가 없으면 다음 화면이 준비될 때까지 지금 화면을 유지하며, 가리는 막을 두지 않고 150ms가 지나면 콘텐츠 카드 위쪽 테두리에만 진행 표시를 띄웁니다. 누른 메뉴의 선택 표시는 응답 전에 옮기고, 캐시로 먼저 그린 본문이 서버 최신본과 다르면 읽는 글을 바로 바꾸지 않고 "최신 내용 보기" 안내만 띄웁니다. 메뉴·링크 진입, 뒤로 돌아오기, 검색 조건 변경을 구분해 로딩·스크롤·캐시 정책을 정합니다. 화면 표현은 디자인 시스템의 [데이터 상태](../../design-system/references/data-states.md)를 따릅니다.
Expand Down
Original file line number Diff line number Diff line change
@@ -1,3 +1,7 @@
---
arc42: "8.4, 5"
---

# 코드 작성

파일 배치와 레이어·슬라이스·공개 API는 공식 `feature-sliced-design` 스킬을 따릅니다. 이 워크플로우에서 FSD 규칙과 검사기를 별도로 유지하지 않습니다.
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
---
name: goraebap-mode
description: 웹 플랫폼의 기능 구현, 버그 수정, 구조 변경을 작업에 맞는 절차와 프론트·백엔드 지침으로 연결합니다. 프로젝트 AGENTS.md가 Webcraft 지침을 따른다고 밝혔을 때, 또는 사용자가 이 작업 방식을 이름으로 요청했을 때만 씁니다. 그 밖의 프로젝트에서는 쓰지 않습니다.
arc42: "none"
---

# 웹 플랫폼 작업 방식
Expand Down
Original file line number Diff line number Diff line change
@@ -1,3 +1,7 @@
---
arc42: "none"
---

# 버그 수정

1. 기대·실제 동작, 재현 입력, 환경을 확보합니다. 가능한 경우 수정 전 실패를 직접 재현합니다.
Expand Down
Original file line number Diff line number Diff line change
@@ -1,3 +1,7 @@
---
arc42: "none"
---

# 지침 개선

1. 실제 실패나 사용자 피드백을 근거로 빠진 규칙·잘못된 도구·놓친 검증 중 원인을 찾습니다. 한 사례를 모든 프로젝트의 절대 규칙으로 만들지 않습니다.
Expand Down
Original file line number Diff line number Diff line change
@@ -1,3 +1,7 @@
---
arc42: "none"
---

# 기능 구현

1. 누가 어떤 상황에서 무엇을 할 수 있어야 하는지와 수용 조건을 확인합니다. 기존 설계와 충돌하면 제품 선택을 먼저 해결합니다.
Expand Down
Original file line number Diff line number Diff line change
@@ -1,3 +1,7 @@
---
arc42: "none"
---

# 조사

1. 질문의 범위와 답을 확인할 근거를 정합니다. 코드, 테스트, 설계·결정 순으로 필요한 부분을 읽습니다.
Expand Down
Original file line number Diff line number Diff line change
@@ -1,3 +1,7 @@
---
arc42: "none"
---

# 리팩터링

1. 유지할 동작과 바꿀 구조를 분리해 적습니다. 호출자와 외부 계약을 확인합니다.
Expand Down
Original file line number Diff line number Diff line change
@@ -1,3 +1,7 @@
---
arc42: "none"
---

# 에셋 맡기기

에이전트는 로고, 아이콘 그림, 일러스트, 빈 상태 그림, 화면에 쓰는 이미지를 직접 만들지 않고 에셋 역할에 맡깁니다. 글은 [글쓰기 맡기기](writer.md)를 따르고, 이 문서는 그림과 이미지 자산을 누가 만들고 어떻게 맡기는지 정합니다. 화면 코드, 아이콘 라이브러리에 이미 있는 아이콘([아이콘 규칙](../../design-system/references/icons.md)), 외부에서 받아 쓰는 라이선스 자산은 맡기지 않습니다.
Expand Down
Original file line number Diff line number Diff line change
@@ -1,3 +1,7 @@
---
arc42: "none"
---

# 이어받기 문서

설치된 Webcraft 플러그인 판이 프로젝트 AGENTS.md의 최소 판보다 낮거나, 세션 중에 플러그인이 갱신돼 지침이 맞지 않거나, 필요한 지침을 읽을 수 없을 때는 추측으로 진행하지 않습니다. 지금까지의 작업 상태를 이어받기 문서로 남기고 플러그인 설치·갱신 방법과 새 세션에서 읽을 문서 경로를 사용자에게 알립니다.
Expand Down
Loading
Loading