프로젝트 아키텍처
LibreChat의 모노레포 워크스페이스 구조 및 패키지 경계 개요.
Monorepo 구조
LibreChat은 명확하게 정의된 워크스페이스 경계를 가진 모노레포(monorepo)로 구성되어 있습니다:
| 작업 공간 | 언어 | 측면 | 의존성 | 목적 |
|---|---|---|---|---|
/api | JS (레거시) | 백엔드 | packages/api, packages/data-schemas, packages/data-provider, @librechat/agents | Express 서버 — 변경 사항 최소화 |
/packages/api | TypeScript | 백엔드 | packages/data-schemas, packages/data-provider | 새로운 백엔드 코드가 위치함 (TS 전용, /api에서 사용) |
/packages/data-schemas | TypeScript | 백엔드 | packages/data-provider | 데이터베이스 모델/스키마, 백엔드 프로젝트 간 공유 가능 |
/packages/data-provider | TypeScript | 공유 | — | 공유 API 타입, endpoint, 데이터 서비스 — 프론트엔드와 백엔드 모두에서 사용 |
/client | TypeScript/React | 프론트엔드 | packages/data-provider, packages/client | 프론트엔드 SPA |
/packages/client | TypeScript | 프론트엔드 | packages/data-provider | 공유 프론트엔드 유틸리티 |
주요 원칙
/packages/api내의 모든 신규 백엔드 코드는 반드시 TypeScript여야 합니다./api변경 사항을 최소한으로 유지하세요./packages/api를 호출하는 얇은 JS 래퍼(thin JS wrappers) 형태여야 합니다.- 데이터베이스 관련 공유 로직은
/packages/data-schemas에 위치해야 합니다. - 프론트엔드/백엔드 공유 API 로직(endpoints, types, data-service)은
/packages/data-provider에 위치합니다.
빌드 및 설치
| 명령어 | 목적 |
|---|---|
npm run smart-reinstall | 의존성 설치(lockfile 변경 시) + Turborepo를 통한 빌드 |
npm run reinstall | Node/npm 버전 변경 후 또는 의존성 상태가 의심될 때 클린 설치 |
npm run build | Turborepo를 통해 모든 컴파일된 코드 빌드 (병렬, 캐시됨) |
npm run frontend | 모든 컴파일된 코드를 순차적으로 빌드 (레거시 대체 방식) |
npm run build:data-provider | 변경 사항 적용 후 packages/data-provider 재빌드 |
npm run backend | 백엔드 서버 시작 |
npm run backend:dev | 파일 감시 모드로 백엔드 시작 (개발용) |
npm run frontend:dev | HMR이 포함된 프론트엔드 개발 서버 시작 (포트 3090, 백엔드 실행 필요) |
- Node.js:
v24.16.0 - npm:
v11.16.0 - 데이터베이스: MongoDB
- 백엔드는
http://localhost:3080/에서, 프론트엔드 개발 서버는http://localhost:3090/에서 실행됩니다.
참고
전체 코딩 표준 및 관례에 대한 자세한 내용은 Code Standards and Conventions를 참조하세요.
이 가이드는 어떤가요?