2026년 상식닷컴 선정 식당 & 카페 리스트
최근에 오픈한 호텔을 찾는다면 살펴보세요

모노레포의 디렉터리 구조 추천은?

_____
Q1: 모노레포란 무엇인가요?
A1: 모노레포(Monorepo)는 여러 프로젝트를 하나의 리포지토리에서 관리하는 방식을 의미합니다. 여러 패키지 또는 서비스가 동일한 저장소 내에 존재하여 코드 공유, 버전 관리, 빌드 및 배포를 통합할 수 있습니다.

---

Q2: 모노레포의 기본 디렉터리 구조는 어떻게 되나요?
A2: 일반적으로 `packages` 또는 `projects` 폴더를 루트에 두고, 그 하위에 각 프로젝트 또는 패키지별 디렉터리를 두는 구조를 추천합니다.

예시:
```
/monorepo-root
/packages
/package-a
/package-b
/tools
/scripts
package.json
lerna.json (또는 기타 도구 설정 파일)
tsconfig.json (모노레포 전체 공통 설정)
```

---

Q3: 프로젝트별 폴더 명명 규칙은 어떻게 하는 것이 좋나요?
A3: 명확하고 일관된 네이밍을 사용하는 것이 좋습니다. 예를 들어, `package-` 접두사로 패키지를 구분하거나, 서비스 확장자 없이 프로젝트 이름만 사용합니다.
- `package-ui`
- `service-api`
이처럼 목적에 따라 구분을 명확히 하면 관리가 용이합니다.

---

Q4: 공통 코드나 라이브러리는 어디에 두어야 하나요?
A4: `packages/common`, `packages/shared` 또는 `libs` 같은 디렉터리를 만들어 공통 유틸리티, 타입, 컴포넌트를 분리하는 것이 좋습니다.
```
/packages
/common
/package-a
/package-b
```

---

Q5: 빌드 스크립트, 설정 파일 위치는 어디가 적합한가요?
A5: 빌드 관련 스크립트, 설정 파일(예: ESLint, Prettier, Jest, TypeScript 설정)은 모노레포 루트에 배치하여 전체 프로젝트에서 공통으로 사용하게 설정하는 것이 유지보수에 유리합니다.

---
Q6: 여러 언어 또는 프레임워크가 혼재할 경우 어떻게 구조화해야 하나요?
A6: 언어 또는 기술별로 상위 디렉터리를 나누는 방법이 있습니다.
예:
```
/packages
/js
/package-a
/go
/service-api
/python
/data-pipeline
```

---

Q7: 왜 모노레포에서 루트에 `packages` 폴더를 두는 것이 권장되나요?
A7: 모든 하위 프로젝트를 한 곳에서 관리하면 탐색성이 높아지고, 빌드 도구 및 패키지 매니저(예: Yarn Workspaces, Lerna)가 인식하기 쉬워 작업 효율이 향상됩니다.

---

Q8: 모노레포 구조를 개선하기 위한 팁이 있나요?
A8:
- 프로젝트별 명확한 경계 설정
- 공통 코드 분리 및 재사용 극대화
- CI/CD 파이프라인에서 프로젝트별 영향 범위 자동 감지
- 각 패키지의 독립적인 `package.json` 유지
- 루트에 공통 의존성 및 관리 설정 집중 배치

---

Q9: 예를 들어 React 프로젝트와 Node.js API가 함께 있을 때 추천하는 구조는?
A9:
```
/packages
/web (React 프로젝트)
/api (Node.js 서버)
/shared (공통 유틸 라이브러리)
```

---

Q10: 모노레포 관리 도구와 디렉터리 구조는 어떤 관계가 있나요?
A10: Lerna, Nx, Rush 등의 도구는 특정 구조를 요구하기보다는 `packages` 폴더 내에 각 패키지를 두는 방식을 표준으로 채택합니다. 도구별 권장 구조를 참고하여 일관성을 맞추는 것이 좋습니다.

---

요약:
모노레포 디렉터리 구조는 루트에 `packages` 폴더를 두고, 각 패키지별로 서브 디렉터리를 생성하는 형태가 가장 일반적이며 관리에 용이합니다. 공통 라이브러리는 별도 폴더로 분리하고, 빌드 및 설정 파일은 루트에 배치하는 것이 권장됩니다. 프로젝트 특성에 따라 언어나 프레임워크별 분리도 고려할 수 있습니다.
모노레포(Monorepo) 구조는 여러 프로젝트를 하나의 저장소에서 관리하는 방식으로, 프로젝트 간의 의존성 관리와 코드 공유를 용이하게 해줍니다.

모노레포를 사용할 때의 디렉터리 구조는 팀의 필요와 프로젝트의 성격에 따라 달라질 수 있지만, 일반적으로 다음과 같은 구조를 추천합니다: ``` /my-monorepo │ ├── /packages │ ├── /package-a │ │ ├── src │ │ ├── tests │ │ ├── package.json │ │ └── README.md │ │ │ ├── /package-b │ │ ├── src │ │ ├── tests │ │ ├── package.json │ │ └── README.md │ │ │ └── /shared-utils │ ├── src │ ├── tests │ ├── package.json │ └── README.md │ ├── /apps │ ├── /app-a │ │ ├── src │ │ ├── public │ │ ├── package.json │ │ └── README.md │ │ │ └── /app-b │ ├── src │ ├── public │ ├── package.json │ └── README.md │ ├── /scripts │ ├── build.js │ ├── test.js │ └── deploy.js │ ├── /configs │ ├── eslint.js │ ├── babel.config.js │ └── tsconfig.json │ ├── package.json └── README.md ``` 디렉터리 구조 설명 1. packages : 패키지들을 저장하는 디렉터리입니다.

독립적인 라이브러리나 모듈이 여기에 위치합니다.

각 패키지는 자신만의 `package.json`, 소스 코드 (`src`), 테스트 파일 (`tests`) 등을 가집니다.

예를 들어, `package-a`, `package-b`는 독립적인 라이브러리이고, `shared-utils`는 여러 패키지에서 공유할 수 있는 유틸리티 라이브러리입니다.



2. apps : 애플리케이션들에 대한 디렉터리입니다.

각각의 애플리케이션 또한 자신만의 소스 코드, 정적 파일 및 의존성 관리를 위한 `package.json` 파일을 가집니다.



3. scripts : 모든 프로젝트에서 공통으로 사용할 수 있는 스크립트들이 위치합니다.

여기에서는 빌드, 테스트, 배포를 위한 자동화 스크립트를 관리할 수 있습니다.



4. configs : ESLint, Babel, TypeScript 등 구성 파일들이 위치합니다.

이곳에 설정을 모아두면 각 패키지나 애플리케이션에서 일관된 환경을 유지할 수 있습니다.



5. root package.json : 모노레포 전체의 의존성을 정의하고, 공통 스크립트를 정의하는데 사용되는 최상위 `package.json`입니다.



6. README.md : 모노레포의 전반적인 설명과 각 디렉터리에 대한 간략한 설명을 포함합니다.

이 구조는 팀과 프로젝트의 요구 사항에 맞게 조정될 수 있으며, 기계적이고 중복된 설정을 피하고, 더 나은 코드 공유와 관리를 가능하게 합니다.

모노레포 구조 선정 시 팀 협업을 고려하여 일관성과 용이성을 강조하는 것이 중요합니다.

작성자: 김예주 [비회원] | 작성일자: 1년 전 2025-04-09 03:10:50
조회수: 163 | 댓글: 0 | 좋아요: 0 | 싫어요: 0
내용이 부정확하다면 싫어요를 클릭해주세요.