Nx
모노레포(Monorepo) 관리를 위한 강력한 빌드 시스템이자 워크플로우 도구입니다.
여러 앱과 라이브러리를 하나의 저장소에서 관리하도록 설계된 툴입니다.
단순히 여러 프로젝트를 한곳에 모으는 것을 넘어, 규모가 커질 때 발생하는 복잡성을 제어하는 데 특화되어 있습니다.
왜 모노레포를 사용하는가?
모두가 자기 저장소에 프롲젝트간 코드 재사용이 어렵다.
시스템전체가 20개정도의 다른 저장소로 나눠져있다.
관련된 저장소를 함께 묶자 모노레포에 넣자
AI 에이전트가 좋은 결정을 하기위해서도 필요하다. 여러 저장소를 수정할 수 없다.
Nx 디렉토리 구조
- Workspace
- : 모든 코드와 프로젝트가 담기는 최상위 루트 폴더입니다.
- Apps
- : 실제 실행 가능한 애플리케이션이 위치
- 예: React, Angular, Next.js, NestJS 앱 등
- 각 앱은 독립적으로 빌드/서버 실행 가능
- Libs
- 재사용 가능한 코드 모음
- 여러 앱에서 공통으로 사용하는 모듈
- 비즈니스 로직, UI 컴포넌트, 유틸 등
Apps, Libs는 Nx의 핵심 철학입니다.
코드는 최대한 Libs에 작성하고, Apps는 Libs를 의존합니다.
- nx.json
-
- Nx 전체 설정
- 프로젝트 의존성 그래프 설정
- 캐싱 전략 설정
- project.json (또는 workspace.json)
- 각 프로젝트의 빌드/테스트/린트 설정
- 최근 버전에서는 프로젝트별 project.json 분리 방식 사용
- ex) apps/web-app/project.json
- ex) libs/ui/project.json
- tsconfig.baas.json
- TypeScript 경로 매핑 설정
- libs import 시 경로 단축 지원
- Generators
- : 표준화된 구조의 앱이나 라이브러리를 명령어로 자동 생성합니다. (예: nx g @nx/react:lib my-lib)
- Executors
- : 빌드, 테스트, 린트 같은 작업을 실행하는 추상화된 명령어입니다. (nx build my-app)
의존성 흐름: apps → feature libs → shared libs
Nx는 내부적으로 의존성 그래프를 관리를 합니다.
nx graph
프로젝트가 늘어나도 빌드속도가 느려지지 않게 하는 단계
- Affected Commands (영향도 분석): 코드 변경 시 전체를 다시 빌드하지 않고, 수정된 부분과 그에 의존하는 프로젝트만 찾아내서 테스트/빌드합니다.
- 명령어: nx affected:build
- Computation Caching (캐싱): 한 번 실행된 작업 결과물을 로컬에 저장합니다. 코드가 변하지 않았다면 다음 실행 시 0초 만에 결과를 불러옵니다.
- Dependency Graph (의존성 그래프): 프로젝트 간에 누가 누구를 참조하는지 시각적으로 보여줍니다. 아키텍처가 꼬이는 것을 방지할 수 있습니다.
- 명령어: nx graph
- Task Pipeline: 특정 작업(예: 빌드)을 수행하기 전 반드시 실행되어야 할 작업(예: 테스트)의 순서를 정의합니다.
출처
JetBrains Javascript day 2025 - victorsavkin
728x90
반응형
'클린아키텍처' 카테고리의 다른 글
| 멀티 프로세스 (0) | 2024.10.13 |
|---|---|
| [공유] (번역) 우리들을 위한 디자인 패턴 (0) | 2023.11.07 |
| 모놀리식 아키텍처의 한계 (0) | 2023.06.05 |
| 디자인 패턴의 종류 (0) | 2023.03.19 |
| 우아콘2022 - 아키텍처 발표 (1) | 2022.10.21 |
댓글