99클럽 26일차 TIL: 아키텍처 패턴 - 모노레포
2024. 4. 29. 21:11ㆍ개발 공부
728x90
반응형
#1. 오늘의 학습 키워드
개발 아키텍처 패턴 중 모노레포에 대해
- 모놀리식 아키텍처 및 MSA에 대해 알아보았다.
- 모놀리식:
- MSA
- 이제는 모노레포에 대해서 알아보자
#2. 공부한 내용
1. 멀티레포
- MSA로 프로젝트를 진행할 때, 서비스 별 레포지토리를 별도로 가지게 되어서,
레포지토리가 2개 이상일 때 멀티레포라고 부른다.
- 요즘 어떤 프로젝트를 개발한다고 했을 때, 웬만해서는 MSA 멀티레포로 개발하게 된다.
- 보통 프론트엔드, 백엔드 나눠서 진행하게 되기 때문.
1) 장점
- MSA 의 장점과 거의 동일시하면 된다.
- 독립적인 빌드, 배포로 인한 개발 생산성
- 기술 스택의 다양성 등
2) 단점
- 레포지토리가 많아질 수록, 매번 세팅에 대한 작업과, 패키지 관리에 대한 유지 비용이 든다.
- 또한, 레포지토리 간 독립성에 의하여 오히려 중복되는 코드 부분이 많아질 수 있다.
- 보통은 유틸에 관련 된 부분의 중복이 많아질 수 있다.
- ex) 메일 전송 유틸, pdf 전환 유틸 등등
- 보통은 유틸에 관련 된 부분의 중복이 많아질 수 있다.
2. 모노레포
- 하나의 레포지토리를 사용하지만, 개별적인 패키지 관리 및 빌드 배포 사용이 가능한 구조: 모노레포
- 모노레포는 모놀리식 아키텍처와 MSA 아키텍처와 동일 선상에 두고 비교하면 안 된다.
- 모노레포는 MSA 아키텍처 구현을 좀 더 좋은 방식으로 하기 위한 것으로 생각하면 된다.
1) 장점
- 기존 MSA의 대부분 장점을 가지고 있음
- 서비스 별 빌드, 배포 가능
- 서비스끼리의 영향이 크지 않음
- 새로운 프로젝트를 생성하는 데에 오버헤드가 크지 않다.
- 통합된 버전 관리에서 오는 편의성
- 유틸 등 공통적인 부분에서의 코드 재사용 및 리소스 공유
2) 단점
- 초기 세팅의 어려움
- 모노레포 구조를 구현하기 위해서는 yarn, npm 등 패키지 관리 툴을 사용해야 한다.
- 다른 서비스끼리 같은 패키지를 사용했을 때, 버전을 맞춰줘야 한다.
#3. 오늘의 회고
- 우선 그동안 모노레포, MSA, 모놀리식을 같은 선상의 개념으로 생각했지만, MSA, 모놀리식은 개발 방법론에 가까운 것 같고, 모노레포는 MSA를 구현하기 위한 구조 중 하나로 스스로 정리를 했다.
- MSA는 일반적으로 멀티레포 구조로 관리하는 게 일반적이고, 멀티레포 구조의 단점을 상쇄하고자 등장한 것이 모노레포 구조라고 생각하면 좋을 것 같다.
- 개인적으로 본인이 이렇게 헷갈렸던 이유는, 처음 입사했을 때 회사에서 사용 중이던 프로젝트 구조는 MSA 모노레포 구조를 모방한 모놀리식 구조여서 그랬던 것 같다.
- 입사한 지 얼마 안 됐을 때는 회사도 창업한 지 얼마 안 됐을 때라 초기 개발 중이어서 모놀리식 구조로 개발 생산성을 높이는 동시에, 레포지토리 내 코드 구조는 미리 모듈 별로 구분을 하고, 모듈 별로 프론트엔드, 백엔드를 나눈 후 실제로 모노레포 구조에서 쓰이는 패키지 관리자인 yarn 을 쓰고 있었다.
- 그리고 추후 빠른 출시를 거쳐서 MSA로 변경할 생각이었다.
- 그러나 node → spring 으로의 리팩토링 때문에 무산 되었다.
- 그때 모노레포(와 거의 흡사한) 구조를 접하고 느낀 점:
- 프로젝트 전체가 하나의 저장소로 관리되더라도 코드 구조가 명확하기에 의외로 복잡하진 않다.
- 그리고 프론트, 백 가리지 않고 공통 된 부분을 가져다 쓸 수 있는 것은 장점이다.
- 또한 단일 레포지토리에서 모든 코드 변경 사항을 관리하기에 깃 컨벤션 등 코드 컴토 프로세스를 통합할 수 있어서 서로의 진행 사항을 좀 더 명확히 알 수 있었다.
- 그러나 결국 단일 디렉토리 하에 모든 코드가 있는 것이기에, 처음 접했을 때는 어지러울 수 밖에 없었다.
- 디렉토리의 수 자체도 엄청 많았기 때문에.
728x90
반응형
'개발 공부' 카테고리의 다른 글
99클럽 28일차 TIL: JWT (1) | 2024.05.01 |
---|---|
99클럽 27일차 TIL: 아키텍처 패턴 - SOA (0) | 2024.04.30 |
99클럽 25일차 TIL: 아키텍처 패턴 - MSA (2) | 2024.04.28 |
99클럽 24일차 TIL: 아키텍처 패턴 - 모놀리식 (4) | 2024.04.27 |
99클럽 23일차 TIL: Thread (Java, Spring) (0) | 2024.04.26 |