DPM Core는 Turborepo를 기반으로 한 모노레포 Next.js 프로젝트입니다. 여러 애플리케이션과 공유 라이브러리를 하나의 저장소에서 관리하여 코드 재사용성과 개발 효율성을 높였습니다.
dpm-core-client/
├── apps/ # 애플리케이션들
│ ├── admin/ # 관리자 앱
│ └── client/ # 클라이언트 앱
├── packages/ # 공유 패키지들
│ ├── shared/ # 공통 컴포넌트/유틸리티
│ └── api/ # API 통신 라이브러리
├── package.json # 루트 설정
├── turbo.json # Turborepo 설정
├── tsconfig.base.json # 공통 TypeScript 설정
└── yarn.lock # 의존성 락 파일
- 위치:
apps/admin/ - 포트:
3001 - 목적: 관리자용 대시보드 및 관리 기능
- 특징:
- Next.js 15.3.3 기반
- React 19 사용
- 관리자 전용 UI/UX
- 세션 관리 및 사용자 관리
- 위치:
apps/client/ - 포트:
3000 - 목적: 일반 사용자용 애플리케이션
- 특징:
- Next.js 15.3.3 기반
- React 19 사용
- React Query 데이터 관리
- 사용자 인증 및 세션 관리
- 위치:
packages/shared/ - 목적: 앱 간 공유되는 컴포넌트, 유틸리티, 타입 정의
- 주요 내용:
- UI 컴포넌트 (Button, Avatar, Card, Drawer, Popover)
- 아이콘 컴포넌트
- 인증 클라이언트/서버 유틸리티
- 공통 유틸리티 함수
- 타입 정의
- 스타일 변형 관리
- 위치:
packages/api/ - 목적: 외부 API 통신을 위한 공통 HTTP 클라이언트
- 주요 내용:
- HTTP 클라이언트 설정
- 인증 관련 API
- 공통 API 유틸리티
- 모노레포: Turborepo
- 패키지 관리: Yarn Workspaces
- TypeScript: 5.x
- 코드 포맷팅: Biome
- 애니메이션: Motion.js
- Next.js: 15.3.3
- React: 19.0.0
- Tailwind CSS: 4.x
- UI 컴포넌트: Radix UI
- 데이터 관리: React Query (client 앱)
- 인증: Better Auth
- HTTP 클라이언트: Axios
# 의존성 설치
yarn install
# 모든 패키지 빌드
yarn build
# 로컬 인증서 발급
# hosts파일 수정 필수 -> local.dpmcore.o-r.kr
. ./ssl.sh
# 프록시 서버 실행
docker compose up -d
# 모든 앱 동시 실행
yarn dev
# 개별 앱 실행
yarn workspace @dpm-core/admin dev # 관리자 앱 (포트 3001)
yarn workspace @dpm-core/client dev # 클라이언트 앱 (포트 3000)# 전체 빌드
yarn build
# 개별 빌드
yarn workspace @dpm-core/admin build
yarn workspace @dpm-core/client buildNext.js 앱에서 @dpm-core/shared 패키지의 'use client' 디렉티브를 유지하기 위해 transpilePackages 설정을 사용합니다:
// apps/admin/next.config.ts, apps/client/next.config.ts
const nextConfig: NextConfig = {
transpilePackages: ['@dpm-core/shared'],
};- shared 패키지: 소스 코드 직접 참조 (
src/index.ts) - api 패키지: 빌드된 결과물 참조 (
dist/index.js)
{
"dependencies": {
"@dpm-core/shared": "workspace:*",
"@dpm-core/api": "workspace:*"
}
}- Biome를 사용한 일관된 코드 포맷팅
- TypeScript 강제 사용
- 엄격한 타입 검사 적용
- 'use client' 디렉티브 명시적 사용
- Radix UI 기반 컴포넌트 개발
- Tailwind CSS 사용
- Better Auth 사용
- 서버/클라이언트 분리된 인증 로직
- 세션 기반 인증 시스템
- 해결방법:
transpilePackages설정 확인 - shared 패키지:
main: "src/index.ts"설정 확인
- 해결방법: 상대 경로 import 사용
- 예시:
import { cn } from '../../utils/cn'
- dist 폴더 충돌:
rm -rf packages/*/dist후 재빌드 - 의존성 문제:
yarn install --force실행
package.json: 루트 설정 및 워크스페이스 정의turbo.json: Turborepo 태스크 설정tsconfig.base.json: 공통 TypeScript 설정biome.json: 코드 포맷팅 설정yarn.lock: 의존성 잠금 파일