본문 바로가기
Infra

[K8S] DevOps

by kmkhm 2025. 5. 26.

빠르게 변화하는 서비스 환경 속에서, 개발과 운영 간의 경계를 허물고 자동화를 통해 효율성을 높이는 것이 매우 중요해졌습니다. 이를 가능하게 해주는 대표적인 접근 방식이 바로 DevOps(Development + Operations)입니다.

 

먼저 개발자가 SpringBoot 서버를 작성한다고 가정하고,  DevOps의 핵심 개념 중 하나인 CI/CD(지속적 통합과 지속적 배포) 전체 파이프라인 흐름을 간단히 설명드리겠습니다.

 

1. 개발자가 소스 코드 작성

- 이 과정에서 개발자가 소스코드를 작성하고 GitHub에 push를 합니다.

2. Jenkins가 Github 변경 감지

- Jenkins는 WebHook 또는 Polling 방식으로 변경 감지를 합니다.

- 변경시, Jenkins는 소스코드를 Pull하게 됩니다.

- 이후, build.gradle에 정의된 의존성을 다운로드 받게 됩니다.

3. Jenkins가 gradle로 빌드 수행

- Jenkins는 빌드 명령어를 통해 jar파일을 생성하게 됩니다.

4. Jenkins가 Docker 이미지 생성

- DockerFile을 기반으로 애플리케이션 Docker 이미지를 생성하게 됩니다.

5. Jenkins가 DokcerHub에 이미지 푸시

- 생성ㄹ한 이미지를 DockerRegistry에 업로드 합니다.

6. Jenkins가 쿠버네티스에 명령어로 배포

- Jenkins가 CI/CD 파이프라인에서 쿠버네티스에 배포 요청을 합니다.

7. 쿠버네티스가 Pod 생성

- 쿠버네티스가 DockerRegistry에서 이미지를 Pull받고 됩니다.

- containerd가 이미지를 기반으로 컨테이너를 만들고, Pod 내부에 컨테이너가 실행되며 애플리케이션 구동됩니다.

- 최종적으로 개발자가 작성한 애플리케이션이 Pod 단위로 구동되어 클러스터 내에서 서비스됩니다.

 

 

DevOps Cycle

DevOps는 개발(Dev)과 운영(Ops)을 하나의 연속된 사이클로 통합하여, 코드 작성부터 배포, 서비스 운영, 모니터링까지의 모든 과정을 자동화하고 최적화하는 문화 또는 접근 방식입니다.

 

 

1. Plan

- 개발을 시작하기 전 요구사항 정리, 일정 계획, 협업 방식 수립에 초점을 둡니다.

  • Jira, Redmine: 프로젝트 일정 및 이슈 트래킹
  • Notion: 문서 정리 및 아이디어 정리
  • Slack: 팀 간의 실시간 커뮤니케이션

2. Code

- 개발자가 실제 기능을 구현하고, 코드 품질을 분석하고, 테스트 코드를 작성합니다.

  • IntelliJ IDEA: Java 기반의 대표적인 개발 IDE
  • OpenJDK: Java 실행환경
  • Spring Boot: 백엔드 프레임워크
  • JUnit: 단위 테스트 프레임워크
  • FindBugs, PMD: 정적 코드 분석 도구
  • GitHub: 소스코드 형상 관리 및 공유

3. CI

- GitHub에 Push한 코드를 Jenkins가 감지하고, 자동으로 빌드 및 테스트를 수행합니다.

  • Gradle, Maven: 빌드 및 의존성 관리
  • Docker: 컨테이너 기반의 환경 구성
  • Jenkins: 자동화된 빌드 및 테스트 수행

4. Test

- 기능이 잘 작동하는지, 성능은 문제없는지, 테스트 커버리지는 충분한지 확인하는 단계입니다.

  • JUnit: 기능 테스트 수행
  • JMeter: 성능 부하 테스트
  • JaCoCo: 코드 커버리지 측정

5. CD 

- 테스트를 통과한 코드는 자동으로 프로덕션에 배포되며, 롤백과 버전 관리도 손쉽게 할 수 있습니다.

  • Dockerfile, YAML: 컨테이너 및 K8s 배포 정의
  • Helm, Kustomize: 선언적 Kubernetes 배포 도구
  • ArgoCD: GitOps 기반의 자동 배포
  • DockerHub: 컨테이너 이미지 저장소

 

6. Operate

- 서비스가 실제로 구동되고, 트래픽 라우팅, 보안, 네트워크 등이 처리됩니다.

  • containerd: 컨테이너 런타임
  • etcd: Kubernetes 상태 저장
  • NGINX: Ingress 또는 프록시 서버
  • Calico, Istio: 네트워크 및 서비스 메시 구성

'Infra' 카테고리의 다른 글

[K8S] 배포를 하기전에 알아야 할 것들  (2) 2025.05.28
[K8S] DevOps 환경 구축하기  (0) 2025.05.28
[K8S] Component  (0) 2025.05.25
[K8S] PV, PVC, Deployment, Service, HPA  (0) 2025.05.25
[K8S] ConfigMap & Secret  (0) 2025.05.25

댓글