com um clique
monorepo-turborepo
모노레포 vs 멀티레포 선택 기준, Turborepo 구조 및 파이프라인 설정
Instalar com Codex ou Claude Copie este prompt, cole no Codex, Claude ou outro assistente e deixe que ele revise a página da skill e instale para você.
Menu
모노레포 vs 멀티레포 선택 기준, Turborepo 구조 및 파이프라인 설정
Instalar com Codex ou Claude Copie este prompt, cole no Codex, Claude ou outro assistente e deixe que ele revise a página da skill e instale para você.
Baseado na classificação ocupacional SOC
Spring Security 5.5.x + jjwt 0.10.7 레거시 JWT 인증 - WebSecurityConfigurerAdapter, OncePerRequestFilter, javax.servlet 환경
Spring Boot 3.x + Spring Security 6.x + jjwt 0.12.x 기반 모던 JWT 인증 패턴. SecurityFilterChain Bean, 람다 DSL, jakarta.servlet, Virtual Threads 적용
Unity 6 LTS 2D 모바일 게임용 uGUI 시스템 전문 스킬. Canvas/RectTransform/TextMeshPro, 모바일 UI 패턴(팝업·무한 스크롤·광고·IAP), 성능 최적화, UI Toolkit과의 선택 기준 포함.
아크라시아(akrasia, 자제력 없음) 학술 논쟁의 핵심 구도와 주요 연구자·문헌을 빠르게 파악할 수 있는 도메인 지식 스킬. 도덕윤리교육 전공 대학원생(석/박사)이 학위논문·KCI 투고·세미나 준비 시 고대–현대–한국 학계–도덕심리학 흐름을 한 번에 짚도록 구성. <example>사용자: "아리스토텔레스의 propeteia와 astheneia 구분을 인용하려는데 출처를 알려줘"</example> <example>사용자: "데이비슨이 의지박약을 어떻게 가능하다고 봤는지 핵심 논증을 정리해줘"</example> <example>사용자: "한국 도덕교육 학계에서 아크라시아 다룬 논문 있어?"</example>
아리스토텔레스 『니코마코스 윤리학』에서 akrasia(자제력없음)와 akolasia(무절제)의 5축 차이를 정밀하게 정리한 학위논문 자료 스킬. NE VII.4 1147b20-1148b14, VII.8 1150b29-1151a28, III.10-12 1117b23-1119b18 절별 분해와 표준 학자 해석(Bostock, Broadie-Rowe, Pakaluk, Hursthouse, Charles 등)을 포함. 도덕교육 적용을 위한 두 상태 차이의 함의 및 한국어 번역어 처리 권장안 제공. <example>사용자: "akrates와 akolastos를 prohairesis 측면에서 어떻게 구분해야 하나요?"</example> <example>사용자: "NE VII.4의 ἁπλῶς akrasia가 akolasia와 어떻게 갈라지는지 절별 분해해주세요"</example> <example>사용자: "Hursthouse의 연속체 모델을 도덕교육 적용 절에서 어떻게 활용할 수 있나요?"</example>
한국 위기 대응 자원(자살·자해·정신건강·여성·청소년·노인·다문화) 핫라인과 앱·챗봇 안전 가드 응답 패턴 종합. 꿈 해몽·정신건강 앱 등 자가 진단/감정 콘텐츠 도메인에서 위험 신호 포착 시 안전한 자원 안내 문구를 작성할 때 참조. <example>사용자: "꿈 해몽 앱에 위기 안내 문구를 어떻게 넣을까?"</example> <example>사용자: "한국에서 자살예방 핫라인 번호가 어떻게 바뀌었지?"</example> <example>사용자: "정신건강 챗봇 안전 가드 응답 템플릿을 짜줘"</example>
| name | monorepo-turborepo |
| description | 모노레포 vs 멀티레포 선택 기준, Turborepo 구조 및 파이프라인 설정 |
소스: https://turbo.build/repo/docs | https://github.com/vercel/turborepo 검증일: 2026-06-20
| 기준 | 모노레포 | 멀티레포 |
|---|---|---|
| 패키지 간 의존성 | 많음 (공유 컴포넌트/유틸) | 적음 (독립 서비스) |
| 팀 규모 | 한 팀이 여러 패키지 관리 | 팀별 독립 저장소 |
| 배포 단위 | 함께 배포되는 경우 많음 | 완전 독립 배포 |
| 변경 영향도 | 한 곳에서 파악 가능 | 저장소마다 확인 필요 |
| 도구 통일 | 중앙 관리 | 팀마다 다를 수 있음 |
모노레포 적합:
멀티레포 적합:
monorepo/
├── apps/ # 실행 애플리케이션
│ ├── web/ # Next.js 앱
│ ├── mobile/ # React Native
│ └── storybook/ # 컴포넌트 문서
├── packages/ # 공유 라이브러리
│ ├── ui/ # UI 컴포넌트 (tsup 빌드)
│ ├── utils/ # 유틸리티 함수
│ ├── types/ # 공유 TypeScript 타입
│ ├── tsconfig/ # 공유 tsconfig
│ └── eslint-config/ # 공유 ESLint 설정
├── turbo.json
├── pnpm-workspace.yaml # 또는 package.json workspaces
└── package.json # private: true
{
"name": "myorg",
"private": true,
"packageManager": "pnpm@11.8.0",
"scripts": {
"build": "turbo run build",
"dev": "turbo run dev --parallel",
"lint": "turbo run lint",
"test": "turbo run test",
"typecheck": "turbo run typecheck"
}
}
packages:
- "apps/*"
- "packages/*"
{
"$schema": "https://turbo.build/schema.json",
"globalEnv": ["NODE_ENV", "TURBO_TELEMETRY_DISABLED"],
"tasks": {
"build": {
"dependsOn": ["^build"], // 의존 패키지 build 먼저
"outputs": [".next/**", "dist/**", "!.next/cache/**"],
"cache": true
},
"dev": {
"cache": false,
"persistent": true // 장기 실행 프로세스
},
"lint": {
"cache": true,
"outputs": [".eslintcache"]
},
"test": {
"dependsOn": ["build"],
"outputs": ["coverage/**"],
"cache": true
},
"typecheck": {
"dependsOn": ["^typecheck"],
"cache": true
}
}
}
^ (caret) 의미: 의존하는 패키지의 해당 task를 먼저 실행
apps/web (ui 패키지 의존)
→ turbo run build 실행 시:
1. packages/ui build 먼저 실행
2. apps/web build 실행
// apps/web/package.json
{
"dependencies": {
"@myorg/ui": "workspace:*", // 항상 로컬 버전 사용
"@myorg/utils": "workspace:*",
"@myorg/types": "workspace:*"
}
}
workspace:* 장점:
// packages/ui/package.json
{
"name": "@myorg/ui",
"exports": {
".": {
"types": "./dist/index.d.ts",
"import": "./dist/index.mjs",
"require": "./dist/index.js"
}
},
"scripts": {
"build": "tsup src/index.ts --format esm,cjs --dts",
"dev": "tsup src/index.ts --format esm,cjs --dts --watch"
}
}
// packages/tsconfig/package.json
{
"name": "@myorg/tsconfig",
"files": ["base.json", "nextjs.json", "react.json"]
}
// packages/tsconfig/base.json
{
"compilerOptions": {
"strict": true,
"target": "ES2020",
"moduleResolution": "bundler"
}
}
// packages/types/package.json
{
"name": "@myorg/types",
"main": "./src/index.ts", // 타입만이면 빌드 불필요
"types": "./src/index.ts"
}
turbo run build # 캐시 히트 시 즉시 완료
turbo run build --force # 강제 재빌드
turbo run build --dry # 실행 계획만 확인 (실제 실행 안 함)
turbo login # Vercel 계정으로 로그인
turbo link # 현재 레포를 원격 캐시에 연결
장점: 팀원 간 / CI 간 캐시 공유 → 빌드 시간 40-85% 단축
{
"tasks": {
"build": {
"env": ["NEXT_PUBLIC_API_URL", "API_*"] // 변경 시 캐시 무효화
}
}
}
# 설치
pnpm add -D @changesets/cli
pnpm changeset init
# 변경사항 기록
pnpm changeset # 인터랙티브: 패키지 선택, 버전 타입, 설명
# 버전 적용
pnpm changeset version # package.json 버전 업데이트 + CHANGELOG 생성
# 발행
pnpm changeset publish # npm 발행
워크플로우:
개발 → changeset 작성 → PR 머지 → Release PR 자동 생성 → 승인 → 발행
# 특정 패키지만 실행
turbo run build --filter=@myorg/web
# 특정 패키지와 의존 패키지 포함
turbo run build --filter=@myorg/web...
# 변경된 패키지만 실행 (git 기반) — main 브랜치 대비
turbo run build --filter=[main...HEAD]
# 또는 간략하게
turbo run build --affected
# 실행 그래프 시각화
turbo run build --graph
# 병렬 실행 (dev 서버 여러 개)
turbo run dev --parallel
apps/web/
├── .env.local # 로컬 전용 (gitignore)
├── .env.development # 개발 환경
├── .env.production # 프로덕션 환경
└── .env.example # 필요 변수 목록 (git 포함)
❌ 루트에 .env 두지 않기: 각 앱이 독립적인 환경변수 관리 필요 ✅ .env.example는 git에 포함: 팀원이 필요한 변수 파악 가능
# ❌ 루트에서 패키지 직접 설치
npm install react # 루트 node_modules에 설치됨
# ✅ 특정 워크스페이스에 설치
pnpm add react --filter @myorg/web
pnpm add -D typescript --filter @myorg/ui
// ❌ turbo.json에 환경변수 선언 누락
// → 환경변수 변경해도 캐시 무효화 안 됨
// ✅ 사용하는 환경변수 명시
{
"tasks": {
"build": {
"env": ["NEXT_PUBLIC_API_URL"]
}
}
}
주의: pnpm 11(2026-04-28 출시)은 Node.js 22+ 필수. pnpm 10에서 11로 업그레이드 시 CI/개발 환경도 Node.js 22 이상으로 함께 올려야 한다.
# pnpm 11 주요 변경사항
# - Node.js 22+ 필수 (18/19/20/21 지원 종료)
# - 순수 ESM으로 전환
# - SQLite 기반 스토어 인덱스 (JSON-per-package → 단일 SQLite DB)
# - 자체 publish 구현 (npm CLI 폴백 제거)
Turborepo + pnpm 11 알려진 이슈 (Turborepo 2.9.x):
| 이슈 | 원인 | 상태 |
|---|---|---|
| multi-document YAML lockfile 파싱 실패 | pnpm 11의 configDependencies 사용 시 멀티 YAML 문서 생성 | Turborepo가 단일 YAML 문서만 지원 |
patchedDependencies flat-string 형식 | pnpm 11이 {path, hash} 대신 flat 해시로 변경 | serde_yaml 타입 불일치 |
대응 방법:
configDependencies 또는 patchedDependencies 사용 중이면 Turborepo 최신 패치 확인 후 업그레이드