IaC, Kubernetes, Terraform, Jenkins의 관계 및 기술적 정리

SIMWOOHYUN·2025년 5월 17일
post-thumbnail

🧱 IaC, Kubernetes, Terraform, Jenkins의 관계 및 기술적 정리


1. 🔧 IaC (Infrastructure as Code)

📌 정의

Infrastructure as Code (IaC)는 인프라 구성을 코드로 작성하고 버전 관리하며 자동화하는 기술 방식이다.
기존에는 수동으로 서버를 만들고 설정했지만, IaC를 활용하면 스크립트 또는 선언형 설정 파일을 통해
서버, 네트워크, 스토리지, 배포 등의 작업을 자동화할 수 있다.

📌 대표적인 IaC 도구

  • Terraform: 클라우드 리소스를 코드로 정의하여 자동화
  • Ansible: 구성 자동화 및 설정 관리
  • Pulumi: 코드로 인프라를 생성 (TypeScript, Go 등 지원)
  • CloudFormation: AWS 전용 IaC 서비스

2. 🚢 Kubernetes (K8s)

📌 정의

Kubernetes는 컨테이너화된 애플리케이션의 배포, 확장, 운영을 자동화하는 컨테이너 오케스트레이션 플랫폼이다.
여러 서버(노드)에 걸쳐 컨테이너를 배치하고, 필요에 따라 복제하거나 자동 복구하는 기능을 제공한다.

📌 주요 개념

  • Pod: 컨테이너의 최소 실행 단위
  • Deployment: Pod의 배포와 업데이트를 정의
  • Service: 외부 또는 내부 통신을 위한 로드밸런서 역할
  • Volume: 저장소 관리
  • Namespace: 클러스터 리소스를 논리적으로 분리

3. 🌍 Terraform

📌 정의

Terraform은 HashiCorp에서 만든 IaC 도구로, 클라우드 인프라를 선언형 코드로 정의할 수 있게 한다.
코드를 통해 서버, 스토리지, 네트워크, 보안 정책 등을 정의하고, 실제 클라우드 인프라에 반영한다.

📌 Terraform의 역할

  • 클러스터 생성: EKS, GKE, AKS 등 Kubernetes 클러스터 생성 가능
  • CI/CD 연동: Jenkins에서 Terraform을 실행해 인프라 배포 자동화
  • 환경 일관성: dev/staging/prod 환경을 같은 코드로 재현 가능

📌 예시

provider "kubernetes" {
  config_path = "~/.kube/config"
}

resource "kubernetes_namespace" "staging" {
  metadata {
    name = "staging"
  }
}

4. ⚙️ Jenkins

📌 정의

Jenkins는 오픈소스 자동화 서버로, 소프트웨어 빌드, 테스트, 배포를 자동화하는 CI/CD 도구다.

📌 Jenkins의 주요 기능

  • GitHub, GitLab 등과 연동한 코드 변경 감지
  • Gradle, Maven, npm 등 빌드 도구 실행
  • 테스트 수행 (JUnit, Selenium, Cucumber 등)
  • 도커 이미지 빌드 및 푸시
  • K8s에 배포 (kubectl, Helm 사용)
  • Slack, 이메일, HTML 리포트로 결과 공유

📌 Jenkins Agent

  • Jenkins Master가 작업을 분배하는 실행 환경
  • 여러 Agent를 병렬로 구성해 다양한 환경에서 테스트 가능
  • jnlp, docker, builder 등 목적에 맞는 컨테이너로 구성 가능

5. 🔗 네 가지의 상호 작용 예시

📌 전체 자동화 파이프라인 흐름

  1. 개발자가 GitHub에 코드를 Push
  2. Jenkins가 GitHub webhook을 통해 변경 감지
  3. Jenkins가:
    • ./gradlew build로 빌드
    • 단위 테스트(JUnit 등) 수행
    • 코드 품질 검사(Checkstyle, Jacoco 등)
    • .jar 파일 패키징
  4. Jenkins가 도커 이미지를 빌드하고 레지스트리에 푸시
  5. Jenkins가 Terraform 스크립트 실행
    • 필요한 Kubernetes 네임스페이스, 서비스, 배포 구성
    • staging, production 클러스터에 리소스 배포
  6. Jenkins가 K8s에 kubectl 또는 Helm으로 배포
  7. Jenkins가 스테이징 환경에서 인수 테스트 자동 실행 (Selenium, Cucumber)
  8. Jenkins Dashboard에서 Stage View로 상태 확인

6. 📦 IaC 예시 vs 수동 작업 비교

항목수동 설정 방식IaC 방식 (Terraform)
EC2 서버 만들기AWS 콘솔에서 클릭 클릭resource "aws_instance" 정의
K8s 클러스터 구성CLI로 kubeadm 설정module "eks" 사용
배포 환경 구성ssh 접속 후 설정파일 수정YAML + Helm + Terraform
추적/관리안 됨, 사람이 기억해야 함Git 버전 관리됨
재현성환경마다 다름코드로 항상 같은 결과

7. ✅ 결론

  • IaC는 현대 DevOps의 기반이며, 코드로 인프라를 정의하고 통제함으로써 오류를 줄이고 일관성을 보장한다.
  • Terraform은 멀티클라우드 환경에서도 강력한 IaC 구현이 가능하다.
  • Kubernetes는 컨테이너 배포와 운영의 핵심 플랫폼이고,
  • Jenkins는 전체 흐름을 자동화하는 CI/CD 허브 역할을 한다.

이 네 가지를 조합하면 개발 → 빌드 → 테스트 → 배포 → 인프라 프로비저닝 전체를 자동화할 수 있다.

0개의 댓글