Day 52 - Jenkins, 웹 개발 파이프라인을 활용할 방법?

이유승·2025년 2월 23일

* 프로그래머스, 타입스크립트로 함께하는 웹 풀 사이클 개발(React, Node.js) 5기 강의 수강 내용을 정리하는 포스팅.

* 원활한 내용 이해를 위해 수업에서 제시된 자료 이외에, 개인적으로 조사한 자료 등을 덧붙이고 있음.


1. 배경 설명

  • Jenkins는 개발자가 작성한 코드를 자동으로 빌드, 테스트, 배포하는 과정을 통해 개발 주기의 효율성을 극대화하는 도구입니다.

  • 특히, 지속적 통합(Continuous Integration)과 지속적 배포(Continuous Delivery)를 실현하여, 반복적인 수동 작업을 줄이고 안정적인 소프트웨어 제공이 가능하도록 돕습니다.


2. Jenkins의 개념 및 사용 이유

2.1 Jenkins의 개념

  • 자동화 서버:
    Jenkins는 소스 코드의 빌드, 테스트, 배포 과정을 자동화하여 개발 사이클을 단축합니다.
  • 플러그인 생태계:
    수백 가지의 플러그인을 통해 다양한 도구(예: Git, Docker, Slack 등)와의 연동이 가능하며, 기능 확장이 용이합니다.
  • 분산 빌드:
    Master-Agent 아키텍처를 지원하여, 여러 빌드 노드에서 병렬로 작업을 수행할 수 있습니다.

2.2 사용 이유

  • 빠른 피드백 제공:
    코드 변경 후 자동 빌드 및 테스트를 통해 문제를 신속하게 파악할 수 있습니다.
  • 일관된 빌드 환경:
    모든 빌드 과정을 자동화함으로써, 사람에 의한 오류를 줄이고 일관된 결과물을 생성합니다.
  • 확장성과 유연성:
    다양한 플러그인과 커스터마이징 옵션을 통해 조직의 요구에 맞춰 기능을 확장할 수 있습니다.

3. 웹 개발 파이프라인 내 Jenkins의 역할

Jenkins는 웹 개발 파이프라인의 핵심 구성 요소로서 다음과 같은 역할을 수행합니다.

  1. 자동 빌드 및 테스트:
    • 소스 코드 변경 시, 자동으로 빌드와 테스트를 수행하여 코드의 안정성을 검증합니다.
  2. CI/CD 파이프라인 구성:
    • Jenkins Pipeline을 활용해 빌드, 테스트, 배포의 전체 과정을 코드로 정의하고 자동화할 수 있습니다.
  3. 분산 처리:
    • Master-Agent 구조를 통해 여러 환경에서 병렬로 작업을 수행, 빌드 속도를 향상시킵니다.
  4. 통합 모니터링 및 피드백:
    • 대시보드를 통해 빌드 결과, 테스트 로그, 배포 상태를 실시간으로 확인할 수 있어 문제 발생 시 신속하게 대응할 수 있습니다.

4. Jenkins의 주요 구성 요소 및 아키텍처

  • Jenkins Master:
    중앙 관리 서버로, 빌드 스케줄링, 플러그인 관리, 사용자 인터페이스 제공 등을 담당합니다.
  • Jenkins Agent(또는 Node):
    실제 빌드와 테스트 작업을 수행하는 워커 노드로, Master의 지시에 따라 작업을 실행합니다.
  • Jenkins Pipeline:
    스크립트 기반의 파이프라인 정의 방식으로, 빌드부터 배포까지의 전체 프로세스를 코드로 관리할 수 있습니다.
  • 플러그인(Plugins):
    Git, Docker, Slack 등 다양한 외부 도구와의 연동을 가능하게 하는 확장 모듈로, Jenkins의 기능을 보완합니다.

5. Windows 환경에서 Jenkins 설치 및 사용 방법

5.1 설치 전 준비 사항

  • Java 설치:
    Jenkins는 Java 기반으로 동작하므로, Java 공식 사이트에서 Java JDK를 설치해야 합니다.
  • 시스템 요구 사항:
    Windows 10/11 환경에서 원활하게 작동합니다.

5.2 Jenkins 설치 단계

  1. Jenkins 다운로드:
  2. 설치 실행:
    • 다운로드한 설치 파일을 실행하고, 설치 마법사의 안내에 따라 설치를 진행합니다.
  3. 초기 설정:
    • 설치 후 웹 브라우저를 통해 Jenkins 대시보드(기본 주소: http://localhost:8080)에 접속합니다.
    • 초기 관리자 암호를 입력하고, 추천 플러그인 설치 옵션을 선택하여 기본 환경을 구성합니다.
  4. Jenkins Agent 설정 (선택 사항):
    • Master-Agent 구조를 활용하려면 추가적인 Agent 노드를 설정하고, Jenkins 대시보드에서 관리할 수 있습니다.

5.3 설치 확인 및 테스트

  • Jenkins 대시보드에서 "New Item"을 생성해 간단한 빌드 작업을 설정한 후, 정상적으로 빌드가 수행되는지 확인합니다.

6. 기대 효과 및 검증 절차

기대 효과

  • 자동화된 빌드 및 테스트:
    코드 변경 시 자동으로 빌드와 테스트가 이루어져, 빠른 피드백과 높은 코드 품질을 유지할 수 있습니다.
  • 효율적인 배포 파이프라인:
    Jenkins를 통한 CI/CD 파이프라인 구축으로, 일관된 배포 환경과 무중단 업데이트가 가능합니다.
  • 확장성과 유연성:
    다양한 플러그인과 분산 빌드 기능을 활용해 대규모 프로젝트에서도 효율적인 빌드 환경을 제공합니다.

검증 절차

  • 대시보드 모니터링:
    Jenkins 대시보드에서 빌드 히스토리 및 로그를 확인하여, 빌드 및 테스트 결과를 검증합니다.
  • 테스트 파이프라인 실행:
    간단한 파이프라인을 구성해, 자동화된 빌드와 배포가 정상적으로 이루어지는지 확인합니다.

7. 더 고민해보기..

  1. Jenkins Pipeline을 활용한 복잡한 CI/CD 파이프라인 구성 방법은 무엇인가요?
    • 파이프라인 스크립트 작성 예제와 단계별 구성 방법을 다룰 수 있습니다.
  2. Jenkins 플러그인 생태계에서 주요 플러그인과 활용 사례는 무엇인가요?
    • Git, Docker, Slack 연동 등 다양한 플러그인 설정 및 사용 방법에 대해 설명할 수 있습니다.
  3. Jenkins Master-Agent 아키텍처 구성 및 성능 최적화 방법은 무엇인가요?
    • 분산 빌드 환경에서의 최적화 및 관리 전략에 대해 구체적으로 논의할 수 있습니다.

  • Jenkins를 활용하면 자동화된 빌드 및 테스트, 효율적인 배포 파이프라인 구축이 가능해지며, 개발 주기를 단축하고 코드 품질을 향상시킬 수 있습니다.










웹 개발 파이프라인 실습 방법..?

  • 소프트웨어의 개념과 이론 정도를 수박 겉핧기 식으로 백날 공부하는 것 보다, 직접 사용해보는게 백 배는 더 도움이 된다 할 수 있습니다.

  • 따라서 실습 방법을 고민 할 필요성이 있습니다..



개인 프로젝트에서 Docker, Kubernetes, Jenkins 활용 방안

  • 개인 블로그 프로젝트는 상대적으로 소규모이지만, 아래와 같은 방식으로 Docker, Kubernetes, Jenkins를 활용하여 개발 및 운영 경험을 확장하고, 향후 프로젝트 확장 시 대비할 수 있습니다.

1. Docker 활용

  • 개발 환경 컨테이너화:
    Docker를 사용하면 프론트엔드, 백엔드, 데이터베이스 등 각 서비스의 실행 환경을 컨테이너로 분리할 수 있습니다.

    • 예: Docker Compose를 통해 React.js, Supabase, 기타 필요한 서비스를 하나의 구성으로 관리하면 "내 컴퓨터에서는 잘 되는데" 문제를 예방할 수 있습니다.
  • 일관된 배포 환경:
    Docker 이미지를 사용하여 로컬, 스테이징, 프로덕션 환경 간에 동일한 실행 환경을 보장할 수 있습니다.


2. Jenkins 활용

  • CI/CD 파이프라인 자동화:
    Jenkins를 도입하면 GitHub에 코드 커밋 시 자동 빌드, 테스트, 린트 검사, 그리고 배포까지의 과정을 자동화할 수 있습니다.

    • 예: 코드 변경 시 Jenkins가 자동으로 테스트를 실행하고, 빌드 실패 시 알림을 주어 빠른 피드백을 제공할 수 있습니다.
  • 품질 관리 및 안정성 강화:
    자동화된 빌드 및 테스트 환경을 구축하면 코드 품질을 유지하고, 배포 오류를 사전에 방지할 수 있습니다.


3. Kubernetes 활용

  • 컨테이너 오케스트레이션 학습:
    Kubernetes는 보통 대규모 시스템에 사용되지만, 개인 프로젝트에서 학습 목적으로 활용할 수 있습니다.

    • 예: Docker로 구성한 블로그 애플리케이션을 로컬 Kubernetes 클러스터(Minikube 또는 Docker Desktop의 Kubernetes)를 통해 배포해보며, 롤링 업데이트나 자가 치유 같은 기능을 경험할 수 있습니다.
  • 확장 가능성 준비:
    만약 프로젝트가 성장하거나 자체 서버 혹은 클라우드 인프라로 전환할 경우, Kubernetes를 이용해 다수의 컨테이너를 효율적으로 관리하고 확장할 수 있습니다.


4. 종합 활용 시나리오

  1. 개발 및 테스트 단계:

    • Docker: 모든 서비스를 컨테이너화하여 로컬 개발 환경 구축 (Docker Compose 활용).
    • Jenkins: 코드 변경 시 자동 빌드, 테스트, 린트 검사를 실행해 빠른 피드백 확보.
  2. 배포 단계:

    • 초기 배포: Vercel과 같은 PaaS를 이용해 간편하게 배포.
    • 향후 확장: 자체 서버 또는 클라우드 환경에서 Kubernetes를 활용하여 무중단 배포, 롤링 업데이트, 자가 치유 기능을 구현.
  3. 운영 및 모니터링:

    • Jenkins와 연동된 CI/CD 파이프라인을 통해 정기적인 테스트 및 배포를 유지하고, Docker/Kubernetes 환경에서 로그 및 상태 모니터링을 통해 운영 안정성을 강화.

5. 후속 질문 제안

  1. Docker Compose를 활용하여 로컬 개발 환경을 어떻게 구성할 수 있을까요?

    • 각 서비스별 컨테이너 구성과 네트워킹 설정 방법에 대해 자세히 설명할 수 있습니다.
  2. Jenkins와 GitHub Actions를 병행하여 CI/CD 파이프라인을 구축하는 방법은 무엇인가요?

    • 두 도구의 장단점 및 실제 적용 사례를 비교 분석할 수 있습니다.
  3. Minikube나 Docker Desktop의 Kubernetes 기능을 활용한 로컬 클러스터 구성 및 실습 방법은 무엇인가요?

    • Kubernetes 클러스터 구성 방법과 이를 통해 얻을 수 있는 학습 효과에 대해 논의할 수 있습니다.
profile
프론트엔드 개발자를 준비하고 있습니다.

0개의 댓글