Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat: 20240728_CI/CD에 대해서_윤해진 #63

Merged
merged 3 commits into from
Aug 6, 2024
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
113 changes: 113 additions & 0 deletions _posts/2024-07-28-about-ci-cd.md
Original file line number Diff line number Diff line change
@@ -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(지속적 배포)**
Copy link
Contributor

@chan99k chan99k Aug 6, 2024

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

CD 는 Continuous Deploy (지속적 배포) 라는 의미를 가지기도 하지만, Continuous Delivery(지속적 전달) 이라는, 지속적 배포를 포함한 더 넓은 의미로도 쓰입니다. CI/CD 라고 묶어 말할 때, 일반적으로 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를 설정하고 자동화된 검사 과정을 추가합니다.
Comment on lines +97 to +98
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

ESLint, Stylelint 설정 -> Linter 설정으로 변경하고, Linter의 종류에 ESLint, Stylelint, Biome 등이 있다고 이야기해도 좋을거같아요. Linter 이외에도 코드 퀄리티 평가를 위해 Sonarqube 같은걸 사용하기도 합니다.

- **GitHub Actions에서의 Lint 체크**: 코드 변경 시마다 자동으로 ESLint와 Stylelint를 실행하여 코드 스타일을 검사하고, 문제가 있는 경우 이를 바로 피드백가능합니다.

**4.4 자동화된 배포**

- **Vercel 사용**: Vercel을 통해 애플리케이션을 자동으로 배포했습니다. GitHub와 연동하여 코드 변경이 발생할 때마다 자동으로 빌드 및 배포가 이루어지도록 설정합니다.

위와 같은 방향으로 CI/CD를 프로젝트에 녹일 수 있을 것입니다.

다양한 테스트 방법과 기술들이 있지만, 프로젝트의 성격과 성향에 따라 적절한 방식으로 CI/CD를 구축하는 것도 매우 중요한 부분일 것입니다.

### 5. 요약

CI/CD는 소프트웨어 개발에서 코드 품질을 유지하고, 개발 속도를 높이며, 팀 협업을 강화하는 데 필수적인 요소입니다. CI/CD를 통해 프로젝트의 일관성을 유지하고, 새로운 팀원이 쉽게 적응할 수 있도록 도울 수 있습니다.

팀이 바뀌는 경험하며 CI/CD의 중요성을 다시 한 번 깨달았으며, 앞으로의 진행하는 프로젝트에 이를 적용하여 더욱 효율적이고 안정적인 개발을 이루고자 합니다.
Loading