728x90
DevOps 소개
🔹 전통적인 개발 운영 체계의 문제점
- 개발팀과 운영팀이 분리되어 있어 협업 부족.
- 사용자의 피드백 반영 어려움.
- 빠르고 안정적인 배포 어려움 (폭포수 모델 한계).
- 애자일 도입 시에도 전통 체계와 충돌.
🔹 DevOps의 개념과 핵심
- DevOps = Development + Operations
- 개발과 운영의 통합 → 자동화 + 협업을 통해 효율성 제고.
🔹DevOps 주요 단계
Dev
- 계획 (Plan) : 개발 및 배포 계획
- 코드 작성 (Code) : 소프트웨어의 코드 작성
- 빌드 (Build): 컴파일 및 패키징
- 테스트 (Test) : 검증
Ops
- 릴리스 (Release): 코드 배포 가능한상태
- 배포 (Deploy) : 애플리케이션을 배포
- 운영 (Operate) : 안정적 유지
- 모니터링 (Monitor) : 문제 사전 감지
계획, 코드 작성을 제외한 부분은 자동화를 통해 도와준다
🔹 DevOps 필수 요소: CALMS 모델
- Culture: 변화 수용, 협업, 실패로부터 학습
- Automation: CI/CD, Everything-as-Code(인프라 설정, 애플리케이션 배포, 보안정책)
- Lean: 낭비 제거, 효율적인 가치 전달
- Measurement: 결과 측정 (배포 시간, 사용자 수, 버그 또는 장애 반복횟수 등)
- Sharing: 지식 공유, 공동 책임
지속적 통합 및 배포
🔹 지속적 통합 및 배포 (CI/CD)
- CI (지속적 통합): 코드 변경 시 자동 빌드/테스트 → 충돌 사전 예방
- CD (지속적 배포/전달): 자동 배포로 빠르고 안정적인 서비스 제공
- 장점: 효율성, 안정성, 빠른 피드백 반영 가능
- CI 단계를 통과한 코드는 자동으로 빌드, 추가 테스트를 거쳐 배포
- 자동화된 테스트를 통해 코드 배포 전, 문제를 사전에 발견하고 해결할 수 있음
- 새로운 기능 및 수정사항을 빠르게 전달할 수 있음
🔹 CI/CD 도구 구성
- 협업 도구
- Confluence
- 문서화 도구 : 프로젝트에 대한 정보 공유, 문서 관리
- Jira software
- 이슈 트래킹, 프로젝트 관리 도구
- 작업 항목 관리, 팀 협업을 도움개발
- 이슈 트래킹, 프로젝트 관리 도구
- Confluence
- 개발도구
- Eclipse,Spring
- 코드 작성
- Eclipse,Spring
- 형상관리도구
- github, bitbucket
- 소스 코드 버전 관리, 개발 코드 저장 및 관리
- 코드를 가져와서 빌드와 테스트 진행 가능
- 소스 코드 버전 관리, 개발 코드 저장 및 관리
- github, bitbucket
- CI 서버
- jenkins
- CI/CD 파이프라인 자동화를 책임
- 여러 작업을 자동으로 실행
- GitHub에서 코드를 가져와 빌드, 단위 테스트 진행, 기타 자동화된 테스트 수행 가능
- Junit나 Postman 같은 테스트 도구와 연동 가능
- jenkins
- 컨테이너
- Docker
- 코드를 커테이너 이미지로 빌드, Doker hub 이미지를 저장할 때 활용
- Docker
- 배포 및 운영
- Kubernetes
- 해당 이미지로부터 여러 개의 컨테이너를 자동으로 생성 관리 확장할 수 있음
- Kubernetes
- 이벤트 알림 및 모니터링
- slack
- jenkins와 토합
- 전체 파이프라인의 상태, 문제 발생 부분을 실시간 모니터링
- slack
마이크로서비스의 DevOps에서의 역할
🔹 마이크로서비스 아키텍처 (MSA)
- 기존의 모놀리스 구조는 전체 재배포가 필요해 유연성과 확장성 부족.
- 마이크로서비스는 기능별로 나뉘어 독립적으로 개발·배포·운영 가능.
- 클라우드 환경에서 많이 사용, 개별적으로 배포와 업데이트 운영이 가능
- 작고 독립적인 소프트웨어 프로세스 시스템 전체의 안정이 높음
백엔드 서비스들은 클러스터 안에서 독립적으로 운영하며 각기 다른 기능을 담당한다.
독립적으로 운영 필요한 데이터를 서비스에 제공한다.
🔹마이크로서비스의 장점
- 독립적인 서비스 운영, 빠른 문제 대응
- 팀별 소규모 기능 개발 가능
- 장애 격리, 빠른 확장 가능
🔹마이크로서비스의 단점
- 설계 복잡성, 테스트 어려움
- 운영 관리 복잡
- 서비스 간 통신 문제 가능 (API, 인프라 구성 주의)
🔹마이크로 서비스가 적합하지 않은 경우
- 정의된 도메인이 명확하지 않은 경우
- 효울성 향상이 보장되지 않은 경우
- 규모가 작거나 복잡하지 않은 경우
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