728x90
반응형
안녕하세요! 오늘은 여러 클라이언트 애플리케이션과 서버 애플리케이션을 포함하는 Monorepo 환경에서 효과적인 브랜치 전략을 구축하는 방법에 대해 이야기해보려 합니다. 이 전략은 코드 품질을 유지하고, 모든 서비스에 걸쳐 원활한 배포 프로세스를 보장하기 위해 설계되었습니다.
📒 소개
Monorepo는 여러 프로젝트를 하나의 저장소에서 관리하는 방식으로, 코드의 재사용성과 일관성을 높이는 데 유용합니다. 하지만 여러 애플리케이션이 함께 개발되고 배포되다 보면 브랜치 관리가 복잡해질 수 있습니다. 이에 따라, 효율적인 브랜치 전략을 수립하는 것이 중요합니다.
📗 워크플로우 이미지 참고
워크플로우의 전반적인 흐름을 이해하기 위해 위 이미지를 참고하세요.
이미지 설명
배포 브랜치 'master'
- 제품으로 출시될 수 있는 브랜치
- 'develop' 브랜치를
merge(병합)
을 통해 최종본을 릴리즈 - CI/CD 트리거를 통해 자동화 배포 진행
개발 브랜치 'develop'
- 프로젝트를 진행하는 주요 브랜치
- 'feature' 브랜치로
issues(이슈)
,feat(기능)
별로 분배 Pull requests(검토 및 병합)
을 통해 관리
기능 별 브랜치 'feature'
- 각 기능이나 이슈별로 나뉘어 개발
- 개별적인
push(배포)
를 통해 'develop' 브랜치에서 통합
브랜치 생성 및 병합 과정
- 초기 브랜치:
master
와develop
브랜치가 존재하며,develop
브랜치는master
에서 시작됩니다. - 버그 수정:
develop
브랜치에 지속적으로 버그 수정 커밋 추가 - 기능 추가: 새로운 기능 추가 시
develop
브랜치에서feature
브랜치 생성 - 병합: 기능 완료 후
feature
브랜치를develop
브랜치로 병합 - 릴리즈 준비:
develop
브랜치에서release
브랜치 생성 후 QA 진행 - 최종 병합: QA 통과 시
release
브랜치를master
와develop
브랜치로 병합 - 버전 태그:
master
브랜치에 버전 태그 추가
🙏 필수 규칙
Monorepo 내에서 일관성과 질서를 유지하기 위해 다음 규칙을 엄격히 준수해야 합니다:
- 각 서비스별 전용 배포 브랜치: 각 서비스(클라이언트 애플리케이션과 서버)는 자체적인 배포 브랜치를 가져야 합니다. 이 브랜치는 프로덕션 환경에 코드를 배포하는 데 사용됩니다.
- 각 서비스별 전용 개발 브랜치: 각 서비스는 자체적인 개발 브랜치를 가져야 합니다. 이 브랜치는 새로운 기능 개발과 버그 수정을 통합하는 데 사용됩니다.
- 마스터 브랜치: 프로덕션 릴리스 준비가 된 코드를 나타내는 중앙
master
브랜치가 있어야 합니다. 이 브랜치는 항상 안정적이고 배포 가능한 상태여야 합니다.
브랜치 구조
개요
브랜치 구조는 각 서비스의 병렬 개발 및 배포 프로세스를 지원하도록 조직되어 있습니다. 주요 브랜치는 다음과 같습니다:
master
: 프로덕션 릴리스 준비가 된 최신 안정적인 코드fork
: 클라이언트 개발 주요 개발 브랜치 (각각의 fork 브랜치 존재)
test/service1
: service1 테스트 배포 브랜치deploy/service1
: service1 배포 브랜치test/service2
: service2 테스트 배포 브랜치deploy/service2
: service2 배포 브랜치test/service3
: service3 테스트 배포 브랜치deploy/service3
: service3 배포 브랜치develop/server
: 서버 애플리케이션의 주요 개발 브랜치test/server
: 서버 애플리케이션의 통합 및 시스템 테스트를 위한 스테이징 브랜치deploy/server
: 서버 애플리케이션의 배포 브랜치
브랜치 설명
master
- 목적: 프로덕션 릴리스 준비가 된 최신 안정적인 코드를 포함하는 메인 브랜치입니다.
- 사용법: 테스트 및 승인이 완료된 서비스별 개발 브랜치(
develop/<서비스명>
)에서 변경 사항을 병합합니다. - 중요 사항: 항상 배포 가능한 상태여야 하며, 테스트되지 않거나 불안정한 코드는 병합을 피해야 합니다.
🙂 클라이언트 애플리케이션 브랜치
fork
받은 개인의 브랜치
- 목적: service1, service2, service3 클라이언트 애플리케이션의 주요 개발 브랜치입니다.
- 사용법: 개발자는 이 브랜치에서 기능 브랜치를 생성하고, 완료된 작업을
test/<서비스명>
에 보낸 후 문제가 없으면master
브랜치로 병합합니다. - 워크플로우:
- 기능 개발 및 버그 수정
- 브랜치 내에서 코드 리뷰 및 테스트
master
로 병합 준비
test/service1
, test/service2
, test/service3
- 목적: 클라이언트 테스트를 위한 스테이징 영역입니다.
- 사용법: 안정성이 확보될 때까지 개인의
fork
브랜치에서 코드를 받아 철저히 테스트합니다. - 워크플로우:
- 다른 서비스와의 통합 테스트
- 성능 및 회귀 테스트
- 발견된 버그는 개인의
fork
브랜치에서 수정 후 푸시
deploy/service2
, deploy/service2
, deploy/service3
- 목적: 해당 클라이언트 애플리케이션의 배포 브랜치입니다.
- 사용법: 각 클라이언트에 특정한 코드를
master
에서 이 브랜치로 병합하여 배포합니다. - 워크플로우:
master
에서 코드 수신- 프로덕션 환경으로의 배포 프로세스 트리거
🙃 서버 애플리케이션 브랜치
develop/server
- 목적: 서버 애플리케이션의 주요 개발 브랜치입니다.
- 사용법: 활성 개발이 이루어지며, 개발자는 기능 브랜치를 완료 후 병합합니다.
- 워크플로우:
- 기능 개발 및 버그 수정
test/server
로 이동하기 전 초기 테스트
test/server
- 목적: 서버 애플리케이션의 통합 및 시스템 테스트를 위한 스테이징 영역입니다.
- 사용법: 안정성이 확보될 때까지
develop/server
에서 코드를 받아 철저히 테스트합니다. - 워크플로우:
- 다른 서비스와의 통합 테스트
- 성능 및 회귀 테스트
- 발견된 버그는
develop/server
에 수정 사항 푸시
deploy/server
- 목적: 서버 애플리케이션의 배포 브랜치입니다.
- 사용법:
test/server
에서 테스트를 통과하고master
에 병합된 코드를 받아 프로덕션에 배포합니다. - 워크플로우:
master
에서 코드 수신- 프로덕션 환경으로의 배포 프로세스 트리거
⭐ 배포 프로세스 ⭐
🙂 클라이언트 배포 순서
- 개발:
master
에서 fork를 받아 개인의 브랜치에서 기능 브랜치를 생성하여 작업합니다. - 테스트:
test/<서비스명>
브랜치 내에서 코드를 테스트합니다. - 마스터로 병합: 안정화되면 변경 사항을
master
에 병합합니다. - 배포:
master
에서 해당 클라이언트에 특정한 코드를deploy/<서비스명>
으로 병합하여 프로덕션에 배포합니다.
🙃 서버 배포 순서
- 개발:
develop/server
에서 기능 브랜치를 생성하여 작업합니다. - 개발 브랜치로 병합: 완료된 기능은
develop/server
로 병합합니다. - 테스트 서버에서 테스트: 변경 사항을
test/server
로 병합하여 통합 및 시스템 테스트를 수행합니다. - 마스터로 병합: 모든 테스트를 통과한 후 코드를
master
에 병합합니다. - 배포:
master
에서 코드를deploy/server
로 병합하여 프로덕션에 배포합니다.
위의 브랜치 전략을 준수함으로써 효율적인 개발과 신뢰할 수 있는 배포를 지원하는 구조화된 워크플로우를 보장할 수 있습니다. 이 문서에 설명된 필수 규칙과 모범 사례를 따르면, 팀은 높은 코드 품질을 유지하고 통합 이슈를 줄일 수 있습니다. Monorepo 환경에서의 효과적인 브랜치 관리는 프로젝트에 굉장히 중요하다고 생각합니다. 피드백은 항상 환영합니다!
참고 자료:
감사합니다!
728x90
반응형
'개발일지 > 기타' 카테고리의 다른 글
SQL과 NoSQL의 차이 (5) | 2024.11.10 |
---|---|
모니터링의 중요성 : 성능 비교의 기회 (0) | 2024.11.08 |
Node.js의 내부 작동 방식을 이해하기 (2) | 2024.08.17 |
Node.js의 내부 구조를 이해하기 (0) | 2024.08.16 |
[오픈소스] 오픈소스는 어디서부터 봐야할까? (0) | 2024.07.01 |