Super Kawaii Cute Cat Kaoani
본문 바로가기
⚙️ Back-end/Devops

DevOps 및 마이크로 서비스 정리

by wonee1 2025. 6. 21.
728x90

DevOps 소개


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

  • 개발팀과 운영팀이 분리되어 있어 협업 부족.
  • 사용자의 피드백 반영 어려움.
  • 빠르고 안정적인 배포 어려움 (폭포수 모델 한계).
  • 애자일 도입 시에도 전통 체계와 충돌.

🔹 DevOps의 개념과 핵심

  • DevOps = Development + Operations
  • 개발과 운영의 통합 → 자동화 + 협업을 통해 효율성 제고.

 

🔹DevOps 주요 단계

Dev

  1. 계획 (Plan) : 개발 및 배포 계획
  2. 코드 작성 (Code) : 소프트웨어의 코드 작성
  3. 빌드 (Build): 컴파일 및 패키징
  4. 테스트 (Test) : 검증

Ops

  1. 릴리스 (Release): 코드 배포 가능한상태
  2. 배포 (Deploy) : 애플리케이션을 배포
  3. 운영 (Operate) : 안정적 유지
  4. 모니터링 (Monitor) : 문제 사전 감지

계획, 코드 작성을 제외한 부분은 자동화를 통해 도와준다

 

 

 

🔹 DevOps 필수 요소: CALMS 모델

  • Culture: 변화 수용, 협업, 실패로부터 학습
  • Automation: CI/CD, Everything-as-Code(인프라 설정, 애플리케이션 배포, 보안정책)
  • Lean: 낭비 제거, 효율적인 가치 전달
  • Measurement: 결과 측정 (배포 시간, 사용자 수, 버그 또는 장애 반복횟수 등)
  • Sharing: 지식 공유, 공동 책임

 

 

지속적 통합 및 배포


🔹 지속적 통합 및 배포 (CI/CD)

  • CI (지속적 통합): 코드 변경 시 자동 빌드/테스트 → 충돌 사전 예방
  • CD (지속적 배포/전달): 자동 배포로 빠르고 안정적인 서비스 제공
  • 장점: 효율성, 안정성, 빠른 피드백 반영 가능
  • CI 단계를 통과한 코드는 자동으로 빌드, 추가 테스트를 거쳐 배포
  • 자동화된 테스트를 통해 코드 배포 전, 문제를 사전에 발견하고 해결할 수 있음
  • 새로운 기능 및 수정사항을 빠르게 전달할 수 있음

 

🔹 CI/CD 도구 구성

  • 협업 도구
    • Confluence
      • 문서화 도구 : 프로젝트에 대한 정보 공유, 문서 관리
    • Jira software
      • 이슈 트래킹, 프로젝트 관리 도구
        • 작업 항목 관리, 팀 협업을 도움개발
  • 개발도구
    • Eclipse,Spring
      • 코드 작성
  • 형상관리도구
    • github, bitbucket
      • 소스 코드 버전 관리, 개발 코드 저장 및 관리
        • 코드를 가져와서 빌드와 테스트 진행 가능
  • CI 서버
    • jenkins
      • CI/CD 파이프라인 자동화를 책임
      • 여러 작업을 자동으로 실행
        • GitHub에서 코드를 가져와 빌드, 단위 테스트 진행, 기타 자동화된 테스트 수행 가능
        • Junit나 Postman 같은 테스트 도구와 연동 가능
  • 컨테이너
    • Docker
      • 코드를 커테이너 이미지로 빌드, Doker hub 이미지를 저장할 때 활용
  • 배포 및 운영
    • Kubernetes
      • 해당 이미지로부터 여러 개의 컨테이너를 자동으로 생성 관리 확장할 수 있음
  • 이벤트 알림 및 모니터링
    • slack
      • jenkins와 토합
      • 전체 파이프라인의 상태, 문제 발생 부분을 실시간 모니터링

 

 

마이크로서비스의 DevOps에서의 역할


🔹 마이크로서비스 아키텍처 (MSA)

  • 기존의 모놀리스 구조는 전체 재배포가 필요해 유연성과 확장성 부족.
  • 마이크로서비스는 기능별로 나뉘어 독립적으로 개발·배포·운영 가능.
  • 클라우드 환경에서 많이 사용, 개별적으로 배포와 업데이트 운영이 가능
  • 작고 독립적인 소프트웨어 프로세스 시스템 전체의 안정이 높음

 

백엔드 서비스들은 클러스터 안에서 독립적으로 운영하며 각기 다른 기능을 담당한다.
독립적으로 운영 필요한 데이터를 서비스에 제공한다.

 

 

 

🔹마이크로서비스의 장점

  • 독립적인 서비스 운영, 빠른 문제 대응
  • 팀별 소규모 기능 개발 가능
  • 장애 격리, 빠른 확장 가능

🔹마이크로서비스의 단점

  • 설계 복잡성, 테스트 어려움
  • 운영 관리 복잡
  • 서비스 간 통신 문제 가능 (API, 인프라 구성 주의)

🔹마이크로 서비스가 적합하지 않은 경우

  1. 정의된 도메인이 명확하지 않은 경우
  2. 효울성 향상이 보장되지 않은 경우
  3. 규모가 작거나 복잡하지 않은 경우

 

 

DevOps와 마이크로서비스의 관계


🔹DevOps와 마이크로서비스의 관계

  • MSA는 DevOps와 찰떡궁합.
  • 각 마이크로서비스에 대해 개별 자동화 파이프라인 적용 가능
  • 컨테이너화(Kubernetes)와 CI/CD 자동화(Jenkins)를 통해 효과적인 운영 가능

 

🔹마이크로서비스가 DevOps에 미치는 영향

 

1. 개발 방식의 변화

 

마이크로서비스는 각각 독립된 서비스

  • 하나의 큰 애플리케이션(모놀리스)이 아닌, 작고 독립적인 서비스들의 집합.
  • 각 서비스는 독립적으로 개발, 배포, 운영 가능 → DevOps와 궁합이 잘 맞음.

 

2. DevOps는 빠르고 자주 배포 가능한 환경을 지향

  • 마이크로서비스는 소규모 단위의 코드 변경과 배포에 적합.
  • → 서비스 변경이 전체 시스템에 영향 주지 않음 → 다운타임 최소화 가능.

3. 시스템 안정성과 오류 대응 능력 향상

  • 마이크로서비스 구조에서는 하나의 서비스에 장애가 발생해도 전체 시스템이 중단되지 않는다
  • 문제가 발생한 서비스만 독립적으로 수정 및 재배포 가능하여, 빠르게 대응할 수 있고 운영 안정성이 높아진다.
  • 이는 DevOps가 추구하는 지속적인 개선과 문제 해결 중심의 운영 문화와 잘 부합한다.

 

4. 자동화와 컨테이너 기반 운영 환경에 최적화

  • 마이크로서비스는 보통 Docker 등의 컨테이너로 구성되며, Kubernetes와 같은 오케스트레이션 도구를 통해 자동화된다.
  • DevOps 환경에서는 이러한 컨테이너 기반 서비스에 대해 빌드, 테스트, 배포, 확장까지 자동화된 파이프라인을 구성할 수 있다.
  • 서비스마다 개별 파이프라인을 가질 수 있어, 하나의 오류가 다른 서비스에 영향을 주지 않고 독립적으로 운영된다.

 

 

컨테이너란?

  • 어디서나 동일하게 실행될 수 있도록 애플리케이션과 그 실행환경을 함께 묶은 경랑 가상회 기술
  • 주로 Docker를 사용해서 만든다
실행 단위 OS 전체 + 앱 앱만 실행
용량 무거움 (수 GB) 가벼움 (수 MB~)
부팅 속도 느림 (수 분) 빠름 (수 초)
격리 수준 강력 (완전한 OS) 중간 (호스트 공유)
대표 도구 VMware, VirtualBox Docker, containerd

 

 

5. 유지보수 및 확장성 측면의 이점

  • 특정 기능에 대한 요청이나 트래픽 증가가 있을 경우, 해당 마이크로서비스만 확장(Scale-out) 하면 된다.
  • 전체 시스템을 건드리지 않고 필요한 부분만 관리할 수 있어 자원 낭비 없이 효율적인 운영이 가능.
  • 이는 DevOps에서 강조하는 지속적 확장성과 가용성 확보라는 운영 목표를 효과적으로 실현할 수 있게 한다.
728x90