# shared 레이어

도메인을 모르는 층. **다른 프로젝트에 그대로 복사해도 동작해야 한다.**

## import 경계

- 가능: shared 내부만
- 금지: 상위 레이어 전부 — **가장 흔한 위반 지점이다.**

## 여기 두는 것

- `api/` — HTTP 클라이언트 · 생성 타입(`_generated`) · envelope·camelCase 같은 공통 변환. **쿼리 팩토리는 여기 두지 않는다** — 도메인 쿼리는 전부 `entities/<domain>/api/`다.
- `ui/` — shadcn 생성물(파일 단위 import가 공식 관례)
- `lib/` · `config/` · `queryCache/` · `routing/`

## 두지 않는 것

- 특정 화면 이름이 들어간 코드 → pages 이상
- 화면 상태 · 배치

## 자주 나는 실수

- **shared 유틸이 상위 레이어 타입을 import** — 그 순간 shared가 아니다. 타입을 shared로 내리거나 유틸을 위로 올린다.
- **도메인 이름이 들어간 쿼리·목 데이터를 여기 두기** — `postQueries`·지원자 mock은 도메인을 안다. `entities/<도메인>/api/`가 자리다 (`query-factory` 스킬).
- `_generated/` 직접 수정 — 코드젠으로만 갱신한다(`pnpm codegen`).
- 새 라이브러리를 즉흥 도입 — `.claude/rules/dependencies.md` 결정표를 먼저 본다.

## 더 보기

`.claude/skills/query-factory/SKILL.md` · `feature-sliced-design/SKILL.md`
