모노레포를 위한 CI/CD
변경된 파일을 기준으로 선택적으로 작업을 실행하는 방법을 포함하여 모노레포의 CI/CD 파이프라인을 최적화하는 전략을 살펴봅니다.
모노레포를 위한 CI/CD은(는) CoddyKit의 무료 DevOps Bootcamp 강의입니다. 이것은 4개 중 1번째 강의입니다. 아래에서 전체 강의를 무료로 읽을 수 있으며, 내장 코드 에디터와 24/7 AI 튜터와 함께 브라우저에서 직접 실습할 수 있습니다. 이 강의는 DevOps Bootcamp 학습 경로의 일부이며, 진행 상황이 웹과 CoddyKit 앱에 동기화됩니다. DevOps Bootcamp 강의에는 총 4개의 강의가 포함되어 있습니다.
모노레포란 무엇인가요
모노레포는 여러 프로젝트 또는 애플리케이션의 코드를 하나의 저장소에 담는 방식입니다. 서비스나 라이브러리마다 별도의 저장소를 두는 대신 모든 것이 한곳에 있습니다.
각 책마다 별도의 건물을 두는 대신 하나의 건물(저장소)에 많은 책(프로젝트)이 있는 큰 도서관을 떠올려 보세요. 이 방식은 특히 CI/CD에서 장점과 단점이 모두 있습니다.
모노레포의 CI/CD 과제
모노레포는 코드를 쉽게 공유할 수 있다는 장점이 있지만, 지속적 통합/지속적 배포(CI/CD) 처리 흐름에서는 다음과 같은 문제가 생길 수 있습니다.
- 느린 빌드: 모든 변경 사항이 모든 프로젝트에 대한 전체 빌드와 검사 모음을 실행하면 처리 흐름이 매우 느려집니다.
- 리소스 낭비: 관련 없는 작업을 불필요하게 실행하면 빌드 시간과 리소스가 소모됩니다.
- 개발자 불만: 피드백을 받기까지 오래 걸리면 개발 속도가 느려질 수 있습니다.
선택적 CI/CD의 필요성
효율적인 모노레포 CI/CD의 핵심은 선별성입니다. 처리 흐름이 다음 작업을 지능적으로 수행하도록 해야 합니다.
- 무엇이 변경되었는지 식별합니다.
- 변경 사항의 영향을 받은 프로젝트에 대해서만 CI/CD 작업을 실행합니다.
이 방식은 시간을 절약하고 리소스 사용량을 줄이며 개발자에게 더 빠른 피드백을 제공합니다.
경로에 따른 트리거: `on.paths`
GitHub Actions는 워크플로 트리거에서 paths 필터를 사용하여 강력한 선별 기능을 제공합니다. 변경될 때 워크플로를 실행할 디렉터리나 파일을 지정할 수 있습니다.
이 경로 밖의 파일이 변경되면 워크플로가 실행되지 않습니다. 모노레포에 안성맞춤입니다!
on:
push:
branches:
- main
paths:
- 'apps/frontend/**'
- 'libs/shared/**'실제 경로 필터 사용
다음은 apps/backend 디렉터리 또는 특정 README.md 파일에 변경 사항이 푸시될 때만 실행되는 간단한 워크플로입니다.
이렇게 하면 백엔드 서비스와 관련된 검사나 빌드만 실행됩니다.
name: Backend CI
on:
push:
branches:
- main
paths:
- 'apps/backend/**'
- 'README.md'
jobs:
build-backend:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Build backend app
run: echo "Building backend..."경로 무시하기: `paths-ignore`
대부분의 변경 사항에는 워크플로를 실행하되 특정 파일만 수정된 경우(예: 문서나 로그 파일)에는 건너뛰고 싶을 때가 있습니다. 이때 paths-ignore 필터를 사용하면 됩니다.
이 필터는 paths와 비슷하게 작동하지만 워크플로를 트리거하지 않을 파일을 지정합니다.
on:
pull_request:
branches:
- main
paths-ignore:
- 'docs/**'
- '**/*.md'`git diff`를 사용한 동적 선택 실행
더 복잡한 논리에는 워크플로 단계에서 git diff와 같은 Git 명령을 사용하여 변경 사항을 동적으로 확인할 수 있습니다. 이를 통해 사용자 지정 조건을 만들 수 있습니다.
예를 들어 특정 폴더에서 변경이 발생했는지 확인하고 출력 변수를 설정하여 후속 작업을 실행할지 결정할 수 있습니다.
조건부 작업 실행 예시
이 워크플로 단계는 git diff를 사용하여 현재 커밋과 기본 브랜치 사이에서 apps/api/ 아래의 파일이 변경되었는지 확인합니다. 변경되었다면 출력 변수 api_changed를 'true'로 설정합니다.
그런 다음 이 출력값으로 'API 배포' 작업의 실행 여부를 제어할 수 있습니다.
jobs:
check-changes:
runs-on: ubuntu-latest
outputs:
api_changed: ${{ steps.diff.outputs.api_changed }}
steps:
- uses: actions/checkout@v4
- name: Check API changes
id: diff
run: |
if git diff --quiet ${{ github.event.before }} ${{ github.sha }} -- apps/api/;
then
echo "api_changed=false" >> $GITHUB_OUTPUT
else
echo "api_changed=true" >> $GITHUB_OUTPUT
fi
deploy-api:
needs: check-changes
if: needs.check-changes.outputs.api_changed == 'true'
runs-on: ubuntu-latest
steps:
- name: Deploy API
run: echo "Deploying API..."CI/CD를 위한 모노레포 구조
체계적인 모노레포 구조는 선택적 CI/CD를 크게 단순화합니다. 관련 파일과 프로젝트를 명확하게 정의된 디렉터리로 묶으면 paths 필터를 효과적으로 사용하기 쉽습니다.
/apps/frontend/apps/backend/libs/shared/docs
명확하게 분리하면 워크플로의 대상을 정확하게 지정할 수 있습니다.
모노레포 CI/CD 퀴즈
모노레포에서 CI/CD를 최적화하는 것은 개발 속도와 효율적인 리소스 사용을 유지하는 데 중요합니다. 규모가 크고 통합된 코드 기반의 문제를 가장 잘 해결하는 전략이 무엇인지 생각해 보세요.
복습 및 다음 단계
선택적 작업 실행을 구현하여 모노레포의 CI/CD 문제를 해결하는 방법을 배웠습니다. GitHub Actions의 paths 필터와 고급 git diff 기법을 사용하면 처리 흐름이 필요한 작업만 실행하도록 할 수 있습니다.
그 결과 피드백이 빨라지고 비용이 줄어들며 개발 환경이 더 원활해집니다. 워크플로를 더욱 세밀하게 조정하여 효율성을 높이는 방법을 계속 탐색해 보세요!
자주 묻는 질문
“모노레포를 위한 CI/CD” 강의는 무료인가요?
네 — “모노레포를 위한 CI/CD” 전체 내용을 이 웹사이트에서 무료로 읽을 수 있습니다. 인터랙티브하게 실습하려면(내장 코드 에디터와 24/7 AI 튜터), CoddyKit PRO로 업그레이드하면 DevOps Bootcamp 강의 전체를 잠금 해제할 수 있습니다. DevOps Bootcamp 강의에는 총 4개의 강의가 포함되어 있습니다.
“모노레포를 위한 CI/CD”에서 뭘 배우나요?
변경된 파일을 기준으로 선택적으로 작업을 실행하는 방법을 포함하여 모노레포의 CI/CD 파이프라인을 최적화하는 전략을 살펴봅니다. 브라우저에서 직접 실행하는 실습 코드로 DevOps Bootcamp을(를) 배우며, 24/7 AI 튜터가 강의를 진행하면서 질문에 답변해줍니다.
DevOps Bootcamp을(를) 시작하는 데 경험이 필요한가요?
사전 경험은 필요하지 않습니다. CoddyKit의 DevOps Bootcamp은(는) 초급자부터 고급 학습자까지를 위해 구성되어 있으므로, 여기서 시작하거나 처음부터 시작할 수 있으며 자신의 속도대로 진행할 수 있습니다. 이것은 4개 중 1번째 강의입니다.
“모노레포를 위한 CI/CD” 강의는 얼마나 걸리나요?
대부분의 CoddyKit 강의는 약 5~10분이 소요됩니다. 각 강의는 간결하고 인터랙티브하여 꾸준한 진행이 가능하며, 웹과 앱에서 중단한 부분부터 바로 시작할 수 있습니다.
이 DevOps Bootcamp 강의에서 코드를 작성하고 실행할 수 있나요?
네. 모든 DevOps Bootcamp 강의에는 내장 코드 에디터가 포함되어 있으므로, 브라우저에서 바로 실제 코드를 작성하고 실행한 후 즉시 AI 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.
이 강의의 모든 강의
- 모노레포를 위한 CI/CD
- 저장소 간 워크플로
- 중앙 집중식 워크플로 관리
- 경로 필터링 및 선택적 빌드