DevOps는 Development와 Operations의 합성어다.
말 그대로 개발과 운영을 분리된 조직이나 역할로만 보지 않고, 하나의 서비스 생명주기를 함께 책임지는 방식을 의미한다.
전통적인 환경에서는 보통 다음과 같이 역할이 나뉘는 경우가 많았음.
이 구조는 역할 분리가 명확하다는 장점은 있지만, 실제 서비스 운영에서는 여러 문제가 발생하기 쉬웠음.
예를 들어,
이런 문제를 해결하기 위해 등장한 접근 방식이 DevOps다.
DevOps는 단순히 특정 도구를 사용하는 것이 아니라,
개발부터 배포, 운영, 모니터링까지를 하나의 흐름으로 보고 협업과 자동화를 강화하는 문화이자 실천 방법이라고 볼 수 있음.
서비스가 단순하던 시기에는 몇 달에 한 번 배포해도 큰 문제가 없었음.
하지만 현재는 상황이 다름.
즉, 현대적인 시스템에서는 변경이 자주 일어나는 것이 기본 상태다.
이때 개발과 운영이 분리돼 있으면 다음 문제가 생김.
DevOps는 이런 문제를 줄이기 위해 다음을 지향함.
전통적인 IT 조직에서는 팀별 역할이 강하게 분리되는 경우가 많았음.
이런 구조를 흔히 사일로(Silo) 구조라고 부른다.
예를 들어 다음과 같은 흐름이 생김.
겉보기에는 절차가 있어 보이지만 실제로는 비효율이 큼.
특히 운영팀 입장에서는 안정성이 최우선이고, 개발팀 입장에서는 기능 출시가 우선인 경우가 많아서 목표 충돌이 발생함.
수동 배포는 다음과 같은 방식으로 이루어지는 경우가 많았음.
이 방식은 소규모 환경에서는 가능할 수 있지만, 시스템이 커질수록 위험이 급격히 증가함.
즉, 수동 배포는 재현성과 일관성이 떨어짐.
같은 작업을 언제, 누가, 어느 서버에서 수행하더라도 동일한 결과가 나와야 하는데, 수동 방식에서는 이 보장이 약함.
DevOps는 협업 문화가 매우 중요함.
개발과 운영을 서로 다른 이해관계자로 보는 것이 아니라, 같은 서비스 품질을 책임지는 공동 주체로 보는 관점이 필요함.
문화 측면에서 중요한 요소는 다음과 같음.
DevOps의 가장 눈에 띄는 특징은 자동화다.
반복 가능하고 규칙적인 작업은 자동화해야 함.
대표적인 자동화 대상은 다음과 같음.
자동화가 중요한 이유는 사람을 줄이기 위해서가 아니라,
사람이 실수하기 쉬운 반복 작업을 시스템이 일관되게 수행하도록 하기 위해서다.
배포를 자동화했다고 끝나는 것이 아님.
운영 환경에서 실제로 어떤 일이 일어나는지 계속 확인해야 함.
예를 들면 다음 항목을 관찰해야 함.
DevOps에서는 배포 이후 상태를 모니터링하고, 그 결과를 다시 개발과 운영 개선으로 연결하는 흐름이 중요함.
운영 경험, 장애 원인, 배포 이력, 설정 정보가 특정 개인에게만 있으면 DevOps가 제대로 동작하기 어려움.
따라서 다음과 같은 정보는 가능한 한 공유돼야 함.
즉, DevOps는 기술 자동화만이 아니라 지식의 공유 구조도 중요하게 봄.
DevOps를 설명할 때 가장 많이 함께 등장하는 개념이 CI/CD다.
CI/CD는 DevOps를 실현하는 핵심 실행 체계 중 하나라고 볼 수 있음.
CI는 Continuous Integration, 즉 지속적 통합을 의미한다.
여기서 핵심은 개발자가 각자 작업한 코드를 자주 통합하고, 그 통합 과정에서 문제가 없는지 자동으로 검증하는 것이다.
예를 들어 여러 개발자가 각자 기능을 만들고 있는데, 이를 오랫동안 따로 들고 있다가 한 번에 합치면 충돌과 오류가 많이 발생함.
반대로 작은 단위로 자주 병합하고, 병합 시마다 빌드와 테스트를 돌리면 문제를 빨리 발견할 수 있음.
CD는 문맥에 따라 두 가지 의미로 사용됨.
Continuous Delivery는
언제든지 운영 배포 가능한 상태로 소프트웨어를 유지하는 것을 의미한다.
즉, 코드 변경이 발생하면 자동으로 다음 단계까지 진행함.
다만 실제 운영 반영은 사람이 승인해서 수행할 수도 있음.
즉, Continuous Delivery는
배포 직전까지 자동화되지만, 운영 배포 버튼은 사람이 누를 수 있는 상태라고 이해하면 됨.
Continuous Deployment는
자동 검증을 통과한 변경 사항이 사람 개입 없이 운영 환경까지 자동 반영되는 방식을 의미한다.
즉,
이 전체가 자동으로 이어질 수 있음.
이 방식은 자동화 수준이 매우 높지만, 그만큼 테스트 신뢰도와 운영 통제가 매우 중요함.
| 구분 | 의미 | 자동화 범위 | 운영 배포 승인 |
|---|---|---|---|
| CI | 코드 통합과 검증 자동화 | 빌드, 테스트 중심 | 포함되지 않음 |
| Continuous Delivery | 배포 가능한 상태까지 자동화 | 빌드, 테스트, 패키징, 배포 준비 | 사람 승인 가능 |
| Continuous Deployment | 운영 반영까지 자동화 | 코드 변경부터 운영 배포까지 | 자동 |
파이프라인은 코드를 변경한 뒤 그 결과가 운영 반영되기까지의 절차를 단계별로 자동 연결한 흐름이다.
일반적으로 다음과 같은 구조를 가짐.
Source
→ Build
→ Test
→ Package
→ Publish Artifact
→ Deploy
→ Verify
각 단계는 앞 단계 결과를 바탕으로 동작하며, 중간에 실패하면 다음 단계로 넘어가지 않음.
개발자가 Git 같은 형상관리 시스템에 코드를 커밋함.
파이프라인은 보통 이 커밋이나 Pull Request를 기준으로 시작됨.
소스코드를 실행 가능한 형태로 변환하는 단계다.
언어에 따라 다음과 같은 작업이 포함될 수 있음.
자동 테스트를 수행함.
테스트 단계는 빠른 피드백을 제공하는 핵심 단계다.
빌드 결과물을 배포 가능한 단위로 묶음.
예:
이 산출물을 Artifact라고 부른다.
생성된 아티팩트를 특정 환경으로 배포함.
배포가 끝난 뒤 정상 동작 여부를 확인함.
DevOps와 CI/CD는 자주 함께 언급되지만 같은 개념은 아님.
즉, DevOps는 철학과 운영 방식에 가깝고, CI/CD는 이를 구현하는 구체적 방법이다.
다음처럼 이해하면 좋음.
즉, CI/CD 없이 DevOps를 말할 수는 있어도, 실제 조직에서 DevOps를 실현하려면 거의 반드시 CI/CD가 필요함.
현재 시스템 환경에서는 다음 특징이 매우 강함.
이런 환경에서는 사람이 일일이 배포 절차를 수행하는 방식이 한계에 부딪힘.
CI/CD가 중요한 이유는 다음과 같음.
작은 변경을 자주 반영할 수 있음.
문제가 생겨도 영향 범위를 줄일 수 있음.
커밋마다 자동으로 빌드와 테스트를 수행하므로 오류를 조기에 발견할 수 있음.
수작업이 줄어들어 실수 가능성이 감소함.
어떤 변경이 언제 반영됐는지 기록이 남고, 이전 버전 복구도 쉬워짐.
파이프라인 상태, 실패 지점, 테스트 결과가 공유되므로 개발과 운영 간 정보 비대칭이 줄어듦.

개발자 코드 변경
↓
형상관리 시스템(GitHub)
↓
CI 도구(Jenkins / GitHub Actions)
↓
빌드 및 테스트
↓
아티팩트 생성(Docker Image 등)
↓
배포 대상 환경 반영
↓
운영 모니터링 및 피드백