diff --git a/_posts/2024-07-28-about-ci-cd.md b/_posts/2024-07-28-about-ci-cd.md new file mode 100644 index 0000000..1d361f0 --- /dev/null +++ b/_posts/2024-07-28-about-ci-cd.md @@ -0,0 +1,113 @@ +--- +layout: post +title: CI/CD의 개념과 필요성 +author: 윤해진 +categories: 기술세미나 +banner: + image: https://raw.githubusercontent.com/Kernel360/blog-image/main/2024/0223/spring-batch-tutorial.jpeg + background: "#000" + height: "100vh" + min_height: "38vh" + heading_style: "font-size: 4.25em; font-weight: bold; text-decoration: underline" + tags: [ci/cd, 기술세미나] +--- + +### 1. 이런 글을 쓰게 된 배경 + +최근 진행한 헤커톤에서 팀원 교체를 경험하게 되었습니다. + +서로 다른 코드 스타일로 인해 전체 소스코드가 개발이 진행되며 조금씩 어지러워진다는 느낌이 들기도 하였습니다. 이는 프로젝트의 규모가 커지며 더 심각하게 느껴질 수 있는 부분일 것입니다. 따라서 저는 위와같은 어려움을 겪으며 CI(지속적 통합)와 CD(지속적 배포)의 필요성을 느끼게 되었습니다. + +팀원이 변경될 때마다 발생하는 문제를 최소화하고, 코드 품질을 유지하며, 개발 속도를 높일 수 있는 방법을 찾기 위해 CI/CD와 관련하여 글을 작성하게 되었습니다. + +이 글에서는 CI/CD가 왜 중요한지, 어떻게 구현할 수 있는지, 그리고 앞으로 프로젝트에 어떻게 적용가능한지를 공유하고자 합니다. + +### 2. CI/CD가 왜 필요한가요? + +CI/CD는 소프트웨어 개발에서 중요한 역할을 하는 두 가지 개념입니다. + +**2.1 CI(지속적 통합)** + +지속적 통합(CI)은 개발자가 작성한 코드를 자주 그리고 자동으로 통합하는 과정을 의미합니다. + +- **빠른 버그 발견 및 수정**: 코드 변경이 발생할 때마다 자동으로 테스트를 실행하여 버그를 조기에 발견하고 수정할 수 있습니다. +- **코드 일관성 유지**: 여러 개발자가 동시에 작업하더라도 코드베이스의 일관성을 유지할 수 있습니다. +- **통합의 부담 감소**: 작은 단위로 자주 통합함으로써 대규모 통합의 부담을 줄일 수 있습니다. + +**2.2 CD(지속적 배포)** +지속적 배포(CD)는 코드를 자동으로 빌드, 테스트, 배포하는 과정을 포함합니다. + +- **빠른 기능 제공**: 새로운 기능을 사용자에게 빠르게 제공할 수 있습니다. +- **높은 배포 신뢰성**: 자동화된 배포 프로세스를 통해 배포 과정에서 발생할 수 있는 실수를 줄일 수 있습니다. +- **배포 프로세스 간소화**: 반복적이고 수동적인 배포 작업을 자동화하여 개발자의 부담을 줄입니다. + +이러한 이점으로 지속적인 통합과 배포를 하여 소프트웨어 개발 라이프 사이클을 간소화, 가속화가 가능합니다. + +### 3. 어떻게 CI/CD를 수행할 수 있나요? + +CI/CD를 구현하기 위해서는 다음과 같은 도구와 원칙을 따를 수 있습니다. + +**3.1 소스 코드 관리** + +- 소스코드를 적절하게 관리함으로 코드의 변경사항을 효율적으로 관리할 수 있습니다. + +**3.2 자동화된 빌드** + +- 빌드툴을 사용하여 코드 자동 빌드가 가능합니다. + +- 프로젝트에 맞는 빌드 스크립트를 작성하여 빌드 과정을 자동화할 수 있습니다. + +- 추가적으로 빌드 실패시 다양한 피드백을 받을 수 있습니다. + +**3.3 자동화된 테스트** + +- 다양한 테스트를 통하여 각 모듈, 혹은 더 상위의 개념을 테스트 할 수 있습니다 + 이런 테스트는 자동으로 실행되며, 테스트 결과를 즉시 확인 가능합니다. + +**3.4 코드 스타일 검사** + +- 사람들 마다 다른 코드 스타일을 일정한 규칙에 맞춰 검사 할 수 있습니다. + 검사 결과를 즉각적로 확인하여 코드의 일관성을 유지할 수 있습니다. + +**3.5 자동화된 배포** + +- 다양한 배포툴을 사용하여 자동화 된 배포가 가능합니다. + +**3.6 모니터링과 로깅** + +- 다양한 모니터링 도구를 사용하여 애플리케이션 상태를 실시간으로 모니터링 가능합니다. + 이로 프로젝트에 문제가 발생하였을 때, 신속한 대응이 가능합니다. + +### 4. 우리 프로젝트에 어떻게 녹일 수 있나요? + +앞으로 프로젝트를 진행할 때 아래와 같은 방법으로 CI/CD를 적용할 수 있습니다. + +**4.1 프로젝트 초기 설정** + +- **GitHub 사용**: 소스 코드를 GitHub에 저장하고, 팀원들과의 협업을 위해 브랜치 전략을 도입합니다. +- **GitHub Actions 설정**: GitHub Actions를 사용하여 코드 변경이 있을 때마다 자동으로 빌드 및 테스트가 실행되게 합니다. + +**4.2 자동화된 테스트** + +- **테스트 스크립트 작성**: 단위 테스트와 통합 테스트를 자동으로 실행하는 스크립트를 작성합니다. +- **CI 파이프라인 구성**: GitHub Actions를 통해 각 코드 변경 시 자동으로 테스트가 실행되도록 파이프라인을 구성합니다. + +**4.3 코드 스타일 검사 도입** + +- **ESLint 설정**: JavaScript 코드의 일관성을 유지하기 위해 ESLint를 설정하고 자동화된 검사 과정을 추가합니다. +- **Stylelint 설정**: CSS 코드의 일관성을 유지하기 위해 Stylelint를 설정하고 자동화된 검사 과정을 추가합니다. +- **GitHub Actions에서의 Lint 체크**: 코드 변경 시마다 자동으로 ESLint와 Stylelint를 실행하여 코드 스타일을 검사하고, 문제가 있는 경우 이를 바로 피드백가능합니다. + +**4.4 자동화된 배포** + +- **Vercel 사용**: Vercel을 통해 애플리케이션을 자동으로 배포했습니다. GitHub와 연동하여 코드 변경이 발생할 때마다 자동으로 빌드 및 배포가 이루어지도록 설정합니다. + +위와 같은 방향으로 CI/CD를 프로젝트에 녹일 수 있을 것입니다. + +다양한 테스트 방법과 기술들이 있지만, 프로젝트의 성격과 성향에 따라 적절한 방식으로 CI/CD를 구축하는 것도 매우 중요한 부분일 것입니다. + +### 5. 요약 + +CI/CD는 소프트웨어 개발에서 코드 품질을 유지하고, 개발 속도를 높이며, 팀 협업을 강화하는 데 필수적인 요소입니다. CI/CD를 통해 프로젝트의 일관성을 유지하고, 새로운 팀원이 쉽게 적응할 수 있도록 도울 수 있습니다. + +팀이 바뀌는 경험하며 CI/CD의 중요성을 다시 한 번 깨달았으며, 앞으로의 진행하는 프로젝트에 이를 적용하여 더욱 효율적이고 안정적인 개발을 이루고자 합니다.