쿠버네티스 어나더 클래스 지상편: Sprint1 Day10 데브옵스 한방 정리
개발에서 배포까지 과정
개발 소스 —커밋→ 소스 코드 저장소(Github) — CI/CD 환경 빌드 + 라이브러리 다운로드 → 최종 실행 파일 생성 → 컨테이너 빌드 + 컨테이너 베이스 이미지 다운로드 → 컨테이너 이미지 업로드 → K8s 배포 → 컨테이너 생성
DevOps에서 가장 중요한 것: 개발 → 빌드 → 실행 파일
개발과 빌드, 실행에서 JVM(OpenJDK)가 필요하다.
인프라 환경 구성이 필요한 이유
개발환경: 개발자 통합 테스트용, 여러 개발자들이 같이 사용
검증환경: 전문 테스트 담당자용, 최대한 운영 환경에 동일하게 구성 (보안 해제, 임시 저장소 X)
운영환경: 이중화 구성 필수, 오픈소스가 이중화 구성이 가능한지 확인 필요
CI/CD 환경(빌드/배포 툴이 설치된 서버)이 필요한 이유
한 사람이 개발하는건 아니기 때문에, 여러 개발자들의 코드를 통합해야 한다.
컨테이너 배포와 기존 배포 방식의 차이
기존 구성: 실행 파일을 인프라 환경으로 복사 → 파일을 실행하는 명령 전송
컨테이너 구성: 컨테이너 빌드 → 이미지 업로드 → K8s 이미지 다운로드 → 컨테이너 실행
⇒ 개발과 빌드에서 실행 파일을 생성하는 것은 항상 존재한다.
⇒ DevOps가 많이 거대해졌지만, 핵심은 개발과 빌드에서 실행 파일을 생성하는 것이다.
DevOps의 세부적인 단계
계획 → 개발 → 빌드 → 테스트 → 릴리즈 → 배포 → 운영 → 모니터링
개발에서 커밋을 하면 App이 자동으로 빌드되어 운영 환경에 배포되는 파이프라인을 만드는 것이다
DevOps를 구성하는 오픈소스들
계획 - 일정 , 이슈, 협업: Jira, Notion, Redmine, Slack
개발 - 언어, 툴, 프레임워크, 테스트 코드, 코드 분석, 협업: 일반적으로 기업 내부에 제품을 설치하고, 외부용은 잘 사용하지 않는다.
빌드 - 소스, 컨테이너: 빌드 자체는 Gradle을 주로 사용하는 추세지만 라이브러리는 Maven에서 다운로드 받는다. 내부용으로는 Nexus 저장소를 사용한다.
테스트 - 기능, 성능, 커버리지: JUnix, JMeter, Jacoco, 테스트 케이스들이 전체 로직에서 많은 부분을 차지할 수록 App의 신뢰도가 높음
릴리즈 - 도커, K8s: 배포 가능한 패키지 제작
배포 - 도커, K8s: Kustomiz, Helm, argoCD
운영 - 런타임, 네트워크, 데이터베이스: containerd, etcd, calico, nginx, istio
모니터링 - 자원 사용량, App 로그, 트래픽 흐름: Grafana, Loki, Prometheus, Jager, Zipkin
Slack을 선호하는 이유
DevOps 파이프라인 운영 중 발생한 알람을 필요한 대화창으로 전송할 수 있다.
그외 다른 Ops들
GitOps: DevOps 파이프라인을 Git 하나로 통일(이슈, 협업 관리, 빌드, 테스트, 배포)
DevSecOps: DevOps에 보안적 요소까지 자동화(Sonarqube, Trivy)
MLOps: 머신러닝 및 AI를 위한 자동화, 개발자와 데이터 분석가 사이에 커뮤케이션을 위한 파이프라인 구성(Kubeflow, Airflow, Knative, KServe)
LLMOps: 거대 언어 모델의 머신 러닝에 특화된 파이프라인 구성
FinOps: 클라우드 환경 비용 절감에 포커스를 두고 파이프라인 구성
답변 0





