최근에 많은 기업에서 모노레포라는 개념에 대해서 도입을 하고 있다.
나도 프로젝트를 경험하면서 벌써 3번째 모노레포 프로젝트를 진행하고 있다. 근데 사용하는 이유에 대해서
정확히 잘 알고 있지 않은 것 같아서 모노레포의 개념과 왜 사용하는지 장점과 단점이 뭔지 알아보면 좋을 것 같다.
⭐️ 모노레포가 무엇일까?
두 개 이상의 프로젝트 코드를 하나의 버전 관리 저장소에서 관리하는 방법!!
그럼 이러한 개념이 왜 나왔을까?
➡️ 가장 대표적인 이유는 큰 규모의 소프트웨어를 하는 프로젝트에서 발생하는 여러 문제를 해결하기 위해서입니다.
일단 내가 처음 하는 리액트 프로젝트에서 진행하면서 admin과 client 두 개의 role을 관리하면서 프로젝트 레포를 각각
관리하기 힘들다고 판단을 하였고, 다음 프로젝트에서 모노레포라는 개념을 사용해서 롤을 관리를 하며 공통으로 사용하는
컴포넌트는 따로 관리하여 더 개발의 효율성을 높일 수 있다고 느꼈습니다.
💡 어떤 어려움이 있을까?
- 중복되는 코드
- 코드 저장소의 복잡성으로 의사소통의 어려움
💬 모노레포의 특징/장점
- 모듈화 : 코드를 모듈화를 하여서 필요한 모듈만 가져와서 사용이 가능하다.
- 의존성 관리 : 모든 코드가 단일 코드 저장소에 있기에 의존성 문제를 빠르게 해결할 수 있다.
- 협업 : 단일 코드 저장소에 인하여 개발자들 간의 협업 능력이 향상이 된다.
- 코드 품질 : 리팩터링시 모든 프로젝트의 상황을 고려하기 때문에 코드 품질을 일관성 있게 유지가 된다.
🔥 모노레포의 단점
- 복잡성 : 하나의 저장소에서 사용을 하기 때문에 코드 충돌이 자주 발생할 수 있다.
- 빌드 시간 증가 : 모든 프로젝트의 빌드를 해야하기 때문에 시간이 오래 걸릴 수 있다.
- 변경 사항 : 공통된 부분이나 하나의 저장소에서 관리하기에 코드 하나에 모든 영역에 영향이 갈 수 있다.
내가 했던 프로젝트 중에 Stack-Knowledge라는 프로젝트가 있는데 거기서 사용한 모노레포 디렉터리 구조에
대해서 조금 이야기 해볼까 한다.
전체적인 디렉토리 구조는 이렇다.
- apps
- admin
- assets
- components
- client
- assets
- components
- storybook
- packages
- api
- common
- components
- assets
- tsconfig
- types
추천하는 모노레포 강의
FECONF 2022 [B2] 일백 개 패키지 모노레포 우아하게 운영하기
내가 느낀 모노레포의 힘 💪🏻
과연 모노레포를 정말 써야할까?
나의 답변은 늘 항상 같다. 필요할 때, 상황에 맞게 유동적으로 사용을 하는 것이 맞다.
내가 권한을 관리하면서 많은 사용자를 요구하고 더 큰 프로젝트로 환경을 원한다면 사용하는 것이 좋다고 생각을 하지만,
꼭 그렇다고 하는 것은 아니다. 또 위에서 내가 소개한 토스 모노레포 강의뿐만 아니라 더 많은 토스 기업의 모노레포 환경에
대해서 공부를 하고 있는 참고하면 좋을 레퍼런스를 참고한다!!!