본문 바로가기
kmooc/클라우드 시대를 위한 기술 스택 - DevOps와 마이크로서비스 입문

1주차 : DevOps와 마이크로 서비스 기초

by book_lover 2025. 1. 26.

DevOps란 무엇인가?

DevOps는 **Development(개발)**와 **Operations(운영)**의 합성어로, 소프트웨어 개발과 운영을 통합하여 협업과 효율성을 높이는 방법론입니다. 이는 전통적인 개발 운영 체계에서 발생하던 비효율성과 문제점을 해결하기 위해 등장했습니다.

전통적인 개발 운영 체계의 문제점

  1. 개발팀과 운영팀의 분리: 서로 다른 목표(개발팀은 신속한 배포, 운영팀은 안정성 유지)로 인해 협업이 원활하지 않음.
  2. 책임 전가: 장애 발생 시 원인 파악이 어렵고, 개발팀과 운영팀 간 책임을 미루는 경향.
  3. 빠르고 안정적인 배포의 어려움: 폭포수 모델과 같은 전통적 방법론은 변경과 피드백 반영이 어렵고, 잦은 배포를 지원하지 못함.

DevOps 라이프사이클

DevOps는 소프트웨어 개발부터 운영까지 모든 단계를 통합적으로 관리하며, 각 단계는 자동화와 협업으로 최적화됩니다

 

  1. Plan (계획): 요구사항 정의 및 개발 계획 수립.
  2. Develop (개발): 코드 작성 및 버전 관리.
  3. Build (빌드): 코드를 실행 가능한 애플리케이션으로 패키징.
  4. Test (테스트): 자동화된 테스트 수행으로 품질 검증.
  5. Release (릴리스): 배포 준비 완료 상태로 전환.
  6. Deploy (배포): 운영 환경에 애플리케이션 배포.
  7. Operate (운영): 안정적인 서비스 유지 및 관리.
  8. Monitor (모니터링): 실시간 모니터링으로 문제 사전 감지 및 대응.

DevOps의 장점

    1. 빠른 배포:
      • 자동화를 통해 소프트웨어를 신속히 제공하며 시장 변화에 유연하게 대응합니다

 

    •  
  1. 높은 품질:
    • 지속적 테스트와 피드백 루프를 통해 오류를 조기에 발견하고 수정합니다
  2. 효율성 증가:
    • 반복 작업 자동화로 리소스를 절약하고 생산성을 높입니다
  3. 협업 강화:
    • 팀 간 장벽을 허물고 공동 목표 달성을 위한 협력을 촉진합니다

DevOps 도입 시 과제

  1. 문화적 저항:
    • 기존 팀 구조와 업무 방식에서 벗어나야 하므로 초기 저항이 있을 수 있습니다
  2. 복잡성 증가:
    • 다양한 도구와 기술 통합으로 인해 IT 인프라가 복잡해질 수 있습니다
  3. 보안 문제:
    • 빠른 배포 속도와 보안 요구 사항 간 균형을 맞추는 것이 도전 과제입니다
  4. 초기 비용 부담:
    • 새로운 도구 및 인프라 도입에 따른 초기 비용이 발생할 수 있습니다

DevOps의 핵심 요소: CALMS 모델

CALMS 모델은 DevOps 성공을 위한 다섯 가지 핵심 요소를 정의합니다.

  1. Culture (문화):
    • 변화를 받아들이고 협업하며, 실패를 학습 기회로 삼는 문화를 조성.
    • 팀원 간 역할 존중과 공동 목표 달성을 위한 협력 강조.
  2. Automation (자동화):
    • 반복적인 작업을 자동화하여 효율성을 극대화하고 오류를 최소화.
    • CI/CD(지속적 통합 및 배포)와 Everything-as-Code(모든 것을 코드로 관리) 철학 포함.
  3. Lean (린):
    • 불필요한 작업 제거와 지속적 개선을 통해 효율적인 프로세스 구축.
    • 사용자에게 가치를 전달하는 데 중점을 둠.
  4. Measurement (측정):
    • 성과 지표를 통해 지속적 개선을 위한 데이터를 수집하고 분석.
    • 배포 시간, 장애 빈도, 사용자 수 등 다양한 지표 활용.
  5. Sharing (공유):
    • 지식과 정보를 투명하게 공유하여 협업 강화.
    • 성공과 실패를 팀 전체가 공유하며 공동 책임을 강조.

https://velog.io/@pgby/PM-DevOpsSRE%EB%9E%80

DevOps의 장점

  • 빠른 배포: 자동화와 협업을 통해 소프트웨어를 신속히 제공.
  • 안정성 향상: 지속적 테스트와 모니터링으로 장애를 예방.
  • 효율성 증가: 반복 작업 자동화로 리소스 절약 및 생산성 향상.

DevOps는 전통적인 IT 환경에서 발생하던 문제점을 극복하고, 변화하는 비즈니스 요구에 유연하게 대응할 수 있는 현대적 소프트웨어 개발 및 운영 방법론으로 자리 잡고 있습니다.

 

https://www.altexsoft.com/blog/devops-principles-practices-and-devops-engineer-role/

https://www.orientsoftware.com/blog/advantages-and-disadvantages-of-devops/


CI/CD는 *지속적 통합(Continuous Integration)*과 *지속적 전달 또는 배포(Continuous Delivery/Deployment)*의 약자로, 소프트웨어 개발과 배포 과정을 자동화하고 효율화하는 데 초점을 둔 개발 방법론입니다. 이는 DevOps의 핵심 요소로, 소프트웨어 개발 주기를 빠르고 안정적으로 만들어줍니다.

CI/CD의 구성 요소

1. 지속적 통합 (CI)

  • 정의: 여러 개발자가 작성한 코드 변경 사항을 정기적이고 자동으로 통합하는 프로세스.
  • 주요 특징:
    • 코드 변경 시 자동 빌드 및 테스트 실행.
    • 코드 충돌 및 통합 문제를 조기에 발견하여 해결.
    • Jenkins, Travis CI, CircleCI와 같은 도구를 사용해 구현 가능.
  • 장점:
    • 코드 품질 유지.
    • 개발자 간 협업 촉진.
    • 통합 문제로 인한 병목 현상 최소화.

2. 지속적 전달 (Continuous Delivery)

  • 정의: CI 이후의 단계로, 테스트를 통과한 코드를 항상 배포 가능한 상태로 유지하는 프로세스.
  • 특징:
    • 운영 환경에 배포하기 전 수동 승인을 포함할 수 있음.
    • 배포 준비 상태를 유지하면서 안정성을 확보.
  • 도구: Jenkins, GitLab CI/CD 등.

3. 지속적 배포 (Continuous Deployment)

  • 정의: 지속적 전달의 확장으로, 테스트를 통과한 코드를 자동으로 운영 환경에 배포하는 프로세스.
  • 특징:
    • 사람의 개입 없이 완전 자동화된 배포.
    • 빠른 사용자 피드백 반영 가능.
  • 장점:
    • 릴리스 주기 단축.
    • 사용자 경험 개선.

전통적인 개발 방식과 CI/CD의 차이점

항목 전통적인 방식 CI/CD 방식
코드 병합 빈도 기능 완성 후 대규모 병합 → 병합 충돌 발생 가능성 높음 코드 변경 시마다 자주 병합 → 충돌 문제 조기 발견
테스트 과정 수동 테스트 중심 → 시간 소요 및 오류 발생 가능 자동화된 테스트 → 신속하고 일관된 품질 검증
배포 속도 및 안정성 수작업 배포 → 느리고 불안정 자동화된 배포 → 빠르고 안정적
문제 해결 속도 QA 단계에서 문제 발견 → 수정에 많은 시간 소요 초기 단계에서 문제 발견 및 해결 → 개발 주기 단축

CI/CD 파이프라인

CI/CD 파이프라인은 소프트웨어 개발부터 배포까지의 과정을 자동화한 워크플로입니다. 주요 단계는 다음과 같습니다:

  1. 빌드(Build): 소스 코드를 컴파일하고 애플리케이션을 패키징.
  2. 테스트(Test): 단위 테스트, 통합 테스트 등 자동화된 테스트 수행.
  3. 릴리즈(Release): 운영 환경에 배포 가능한 상태로 준비.
  4. 배포(Deploy): 스테이징 또는 프로덕션 환경에 코드 배포.
  5. 모니터링 및 피드백(Monitoring & Feedback): 애플리케이션 성능 모니터링 및 사용자 피드백 수집.

CI/CD 도구

  • Jenkins: 오픈소스 도구로 커스터마이징 용이.
  • GitLab CI/CD: GitLab과 완벽히 통합된 솔루션.
  • CircleCI: 클라우드 기반으로 빠른 빌드 속도 제공.
  • Docker & Kubernetes: 컨테이너 기반 애플리케이션 빌드 및 오케스트레이션 지원.

CI/CD의 장점

  1. 효율성 향상: 자동화로 개발 주기 단축 및 생산성 증가
  2. 품질 개선: 초기 단계에서 문제를 발견하여 안정성 확보
  3. 지속적인 배포 가능: 새로운 기능을 빠르게 사용자에게 제공
  4. 비용 절감: 수작업 감소로 인한 시간 및 리소스 절약

결론

CI/CD는 현대 소프트웨어 개발에서 필수적인 접근 방식으로, 자동화를 통해 개발 속도와 품질을 동시에 향상시킵니다. 이를 통해 팀은 더 자주, 더 신뢰성 있게 소프트웨어를 사용자에게 제공할 수 있습니다.