"린트, 테스트, 배포까지 자동화: CI/CD 개념부터 구성까지"

2025. 8. 1. 18:04·💻 개발/※ 참고 지식
728x90
반응형
오프닝

 

프론트엔드 개발을 하면서 코드 품질을 유지하고, 안정적으로 배포하는 방법에 대한 고민이 늘 있었다.

 

그러던 중 CI/CD라는 개념을 접하게 되었고, 이를 실제 프로젝트에 어떻게 적용할 수 있는지 공부해보게 되었다.

 

이번 포스팅에서는 CI/CD가 무엇이며, 왜 중요한지에 대해 정리해보았다.

 

 

 

CI/CD란?

 

1) CI (Continous Integration, 지속적인 통합)

: 개발자들이 작은 단위로 자주 코드를 병합하고, 병합 시마다 자동으로 테스트와 빌드를 수행하여 문제를 빠르게 발견하는 과정

 

(1) 예시 상황

  • main 브랜치에 PR을 보내자마자
  • GitHub Actions가 자동으로 npm run build, npm run test, npm run lint를 돌림
  • 문제가 있으면 병합 못하게 막음
  • → 버그나 린트 오류가 main에 올라갈 일이 없음!

2) CD (Continous Delivery / Deployment, 지속적인 배포)

: 테스트를 통과한 코드를 자도응로 배포 가능한 상태로 만들거나, 실제 운영 서버에 자동 배포까지 하는 과정

 

(1) 예시 상황

  • main에 머지하면 자동으로 Vercel이 배포
  • 혹은 staging 서버까지는 자동, 운영은 수동 승인

 

 

 

CI/CD 파이프라인 구성 요소
단계 설명 예시 도구
1. 코드 푸시 개발자가 Git에 변경사항 업로드 GitHub, GitLab
2. 자동 빌드 프로젝트를 실행 가능한 형태로 번들링 Webpack, Vite, Rollup
3. 자동 테스트 유닛/통합 테스트 자동 실행 Jest, Playwright, Vitest
4. 린트 & 포맷 코드 스타일 자동 검사/수정 ESLint, Prettier
5. 배포 테스트 통과 후 서버에 배포 Vercel, Netlify, AWS S3 + CloudFront

 

1) CI/CD 관련 용어 요약

  • Lint: 코드 스타일 체크 도구
  • Unit Test: 작은 단위 함수나 컴포넌트를 검증하는 테스트
  • Build: 프로젝트를 실제 서비스 가능한 코드로 번들링하는 과정
  • 배포(Deployment): 사용자에게 서비스가 도달하도록 서버에 코드 올리는 일

2) 흐름 예시

(1) 개발자가 GitHub에 push

(2) GitHub Actions가 자동으로:

  - Lint 검사 (eslint)

  - Unit test 실행 (jest)

  - Build 실행 (vite build)

(3) 모두 성공하면 → Vercel로 자동 배포

 

 

 

프론트엔드에서 CI/CD가 중요한 이유

 

1) 코드 품질 유지

  • 작은 UI 오류도 사용자 경험에 직접 영향.
  • CI로 테스트·린트 자동화하면 오류를 미리 차단 가능.

2) 빠른 피드백

  • 코드 푸시하자마자 자동 테스트 → 문제 발생 시 즉시 알림.
  • 버그를 조기에 발견하고 빠르게 대응할 수 있음.

3) 협업 효율 향상

  • 누가 병합하든 자동 체크로 기본 품질 보장.
  • 팀원 간 충돌 줄이고, 안심하고 작업 가능.

4) 안정적인 배포

  • CD로 배포 자동화하면 수동 실수 줄어듦.
  • main 브랜치 머지 시 바로 운영에 반영되도록 설정 가능.

 

 

 

CI/CD 도입 시 고려할 점

1) 테스트 커버리지가 충분한가?

  • CI의 핵심은 자동화된 테스트를 기반으로 품질을 검증하는 것이다.
  • 하지만 테스트 코드가 거의 없다면 CI를 돌려도 신뢰성이 떨어질 수밖에 없다.
  • 프론트엔드라면 최소한 컴포넌트 단위 테스트나 렌더링 확인 정도는 갖춰야 했다.

2) 빌드 시간이 과도하게 오래 걸리지는 않는가?

  • CI 파이프라인이 복잡하거나 빌드 시간이 너무 길면 푸시할 때마다 대기 시간이 발생하고, 이는 오히려 개발 리듬을 방해하게 된다.
  • vite와 같이 빠른 번들러를 쓰거나, 캐시를 잘 활용하는 설정이 필요했다.

3) 병합 조건과 트리거를 어떻게 구성할 것인가?

  • 무조건 모든 브랜치에 CI/CD를 적용하면 효율이 떨어진다.
  • 예를 들어 develop 브랜치에는 프리뷰 배포만, main 브랜치에는 운영 배포만 수행되도록 브랜치 전략을 설정하는 것이 필요했다.

4) 비용 및 리소스 제한은 고려했는가?

  • GitHub Actions나 Vercel은 무료 요금제에서도 CI/CD 기능을 제공하지만, 무제한은 아니었다.
  • 빌드 횟수, 테스트 시간, 동시 실행 수 등에 제한이 있어 잦은 커밋이 많은 프로젝트라면 요금제 초과가 발생할 수 있었다.

5) 민감한 정보나 환경변수 관리 방법은 안전한가?

  • CI 환경에서 API 키, DB 주소, 시크릿 값 등을 다뤄야 할 때는 반드시 .env 파일이 아닌 환경변수 설정 기능을 활용해야 했다.
  • 특히 Vercel, GitHub Actions 등에서는 프로젝트 설정에서 환경변수를 따로 관리할 수 있도록 제공하고 있었다.

 

 

 

마무리

 

이번에 CI/CD에 대해 정리하면서, 개발 효율성과 안정성을 높이기 위해 왜 많은 팀들이 CI/CD를 도입하는지 조금은 이해할 수 있었다.

 

아직 직접 파이프라인을 구축해본 경험은 없지만, React 기반 프로젝트에서 GitHub Actions와 Vercel을 활용해 실제로 적용해보고 싶다는 생각이 들었다.

 

 

[React] React 프로젝트에 Vercel + GitHub Actions로 CI/CD 구축하기

시작하며 "린트, 테스트, 배포까지 자동화: CI/CD 개념부터 구성까지"오프닝 프론트엔드 개발을 하면서 코드 품질을 유지하고, 안정적으로 배포하는 방법에 대한 고민이 늘 있었다. 그러던 중 CI/CD

pangil-log.tistory.com

하지만 파이프라인을 구축해볼 수 있었고, 위의 글을 확인해보면 도움이 될 것이다!

728x90
반응형

'💻 개발 > ※ 참고 지식' 카테고리의 다른 글

MVC 패턴 완전 정복: 왜, 어떻게, 그리고 어디까지 나눠야 하는가  (1) 2025.10.26
[10분 테코톡] 타미의 CSR과 SSR  (0) 2025.10.09
"환경 변수 관리 완벽 가이드: .env 파일의 모든 것"  (0) 2025.03.26
"프론트엔드 아키텍처 선택: MFE와 모놀리식?"  (0) 2025.02.20
"효율적인 프로젝트 관리를 위한 GitHub 칸반 보드 사용법"  (0) 2025.02.12
'💻 개발/※ 참고 지식' 카테고리의 다른 글
  • MVC 패턴 완전 정복: 왜, 어떻게, 그리고 어디까지 나눠야 하는가
  • [10분 테코톡] 타미의 CSR과 SSR
  • "환경 변수 관리 완벽 가이드: .env 파일의 모든 것"
  • "프론트엔드 아키텍처 선택: MFE와 모놀리식?"
pangil_kim
pangil_kim
기록을 통해 지속적인 성장을 추구합니다.
  • pangil_kim
    멈추지 않는 기록
    pangil_kim
  • 전체
    오늘
    어제
  • 📝 글쓰기
      ⚙️ 관리

    • 분류 전체보기 (405) N
      • 💻 개발 (176) N
        • ※ 참고 지식 (9)
        • 🦕 React (13)
        • 🎩 Next.js (25)
        • 📘 TypeScript (4)
        • 📒 JavaScript (8)
        • 🟩 Node.js (7)
        • 📀 MySQL (24)
        • 🌸 Spring Boot (5)
        • 👷 SveleteKit (24)
        • 🩵 Flutter (11)
        • 🌀 Dart (2)
        • 🌈 CSS (5)
        • 🔸Git (1)
        • 🔥 Firebase (4)
        • 🧑🏻‍💻 코테 (29) N
        • 🕸️ 알고리즘 (4)
        • 🌤️ AWS (1) N
      • 📋 프로젝트 (4) N
        • ☄️ 트러블 슈팅 (2) N
        • 🧑🏻‍💻 서비스 소개 (2)
      • ✍🏻 회고 (52) N
        • ☀️ 취준일지 (6) N
        • 🍀 우테코 (32)
        • 👋 주간회고 (1) N
      • 📰 정보 공유 (12)
      • 🧑🏻‍💻 개발자라면? (1)
      • 🏫 한동대학교 (153)
        • Database (15)
        • Software Engineering (18)
        • EAP (22)
        • 일반화학 (26)
        • 25-1 수업 정리 (19)
        • Computer Networking (36)
        • OPIc (2)
        • 미술의 이해 (15)
  • 최근 글

  • 인기 글

  • 태그

    부트캠프
    GLS
    typeScript
    CCM
    computer networks and the internet
    웹 프론트엔드 8기
    데이터베이스
    FE
    csee
    고윤민교수님
    날솟샘
    컴네
    설교
    우아한테크코스
    웹개발
    QT
    예배
    프리코스
    어노인팅
    글로벌리더십학부
    찬양
    전산전자공학부
    묵상
    한동대학교
    우테코 8기
    프론트엔드
    날마다 솟는 샘물
    네트워킹
    우테코
    주일
  • 최근 댓글

  • 250x250
  • hELLO· Designed By정상우.v4.10.4
pangil_kim
"린트, 테스트, 배포까지 자동화: CI/CD 개념부터 구성까지"
상단으로

티스토리툴바