DevOps & 인프라 핸드북
인프라를 누가, 어떻게 관리하고 운영할 것인지에 대한 고민은 단순한 기술 문제가 아니다. 개발팀 vs 운영팀의 전통적 분업 구조부터, 현대 소프트웨어 개발의 표준으로 자리 잡은 DevOps 문화와 핵심 기술까지 체계적으로 살펴본다.
개발팀 vs 운영팀: 역할과 책임의 차이
하나의 서비스가 탄생하고 유지되기 위해서는 역할을 명확히 분담한 두 조직의 협업이 필수적이다.
쉽게 말해 개발팀은 "만드는 팀", 운영팀은 "돌보는 팀"이라고 할 수 있다.
개발팀 (Dev)
신규 프로젝트 개발에 집중하며 코딩과 기능 구현을 담당한다. 예를 들어 6개월 단위로 새로운 시스템을 구축한다면, 기능 설계와 테스트가 핵심 업무다.
운영팀 (Ops)
릴리즈 이후 시스템의 안정적인 운영을 책임진다. 에러 로그 분석, 시스템 다운 시 인프라 점검, 메모리 자원 모니터링, OS 문제 진단 등 인프라 전반을 관리한다.
| 구분 | 개발팀 (Dev) | 운영팀 (Ops) |
|---|---|---|
| 주요 역할 | 신규 프로젝트 개발 및 기능 구현 | 릴리즈 후 시스템 안정 운영 및 관리 |
| 핵심 업무 | 코딩, 기능 구현, 단위 테스트 | 로그 분석, 인프라 점검, 자원 모니터링 |
| 필요 역량 | Java, Spring, DB 등 개발 기술 | DevOps 역량, 리눅스 OS, 하드웨어 지식 |
| 관리 범위 | 개발 환경 (IntelliJ, Git, Docker) | 하드웨어, 운영체제(OS) 전체 |
DevOps란 무엇인가?
DevOps는 개발(Development)과 운영(Operations)의 합성어로, 개발부터 배포, 운영까지의 전 과정에서 통합적인 접근 방식을 추구하는 문화이자 관행을 의미한다.
주요 활동
버전 관리 시스템을 통한 자원 관리, 인프라 구축 및 운영 자동화(IaC), 지속적인 통합(CI)과 배포(CD), 그리고 컨테이너 기술을 활용한 관리가 포함된다.
범위
단순히 개발 툴을 다루는 것을 넘어 하드웨어와 리눅스 운영체제까지 아우르는 종합적인 인프라 관리 능력을 요구한다.
DevOps 핵심 기술 01: 버전 관리 시스템 (VCS)
코드의 변경 이력을 관리하고 협업하기 위한 필수 도구다.
Git / GitHub
소스 코드 버전 관리를 위해 가장 널리 쓰이는 시스템이다. GitHub는 Git 기반의 호스팅 서비스로 코드 리뷰와 협업의 장을 제공한다.
SVN (Subversion)
Apache 재단에서 개발한 중앙 집중형 버전 관리 시스템으로, Git이 대중화되기 전 널리 사용되던 방식이다.
DevOps 핵심 기술 02: 인프라의 진화 (Legacy to Cloud)
인프라를 구축하고 운영하는 방식은 물리적인 환경에서 가상 환경으로 진화해 왔다.
레거시 인프라 (Legacy Infrastructure)
- 운영 방식: 데이터센터 건물 내에 랙(Rack)을 설치하고 물리적으로 서버를 냉각 관리한다. 인프라팀이 하드웨어를 직접 담당하며, 개발자가 배포를 요청하면 물리 PC에 코드를 직접 올리는 구조다.
- 유형: 자체 물리 장비를 구매하여 소유하거나, 데이터센터의 장비를 대여하여 직접 방문 관리하는 방식이 있다.
클라우드 인프라 (Cloud Infrastructure)
AWS (Amazon Web Services): 클라우드 서비스의 선두 주자로, API를 통해 물리적 접근 없이 컴퓨팅(EC2), 스토리지(S3), 데이터베이스(RDS, Redis 등)를 즉시 빌려 쓴다. 방대한 커뮤니티와 서드파티 도구 지원이 강력하다.
기타: MS Azure, Google GCP 등이 있으며 국내에는 네이버 클라우드가 대표적이다.
DevOps 핵심 기술 03: 자동화와 가상화
인프라스트럭처 코드 (IaC)
워크플로우
UI에서 클릭으로 자원을 대여하던 방식을 코드로 진행하는 것이다.
도구 (Tools)
Terraform, Ansible 등을 통해 인프라 구성을 코드로 관리하여 일관성을 보장한다.
지속적인 통합(CI) 및 배포(CD)
- CI (Continuous Integration): 소스 코드 변경 시 자동으로 빌드와 테스트를 수행하여 통합한다.
- CD (Continuous Deployment): 검증된 코드를 운영 환경에 자동 배포하여 수동 배포 시 발생하는 인적 오류를 줄인다.
- 도구: Jenkins(방대한 플러그인), GitHub Actions(GitHub 통합) 등이 대표적이다.
컨테이너 & Docker
특징: 라이브러리와 설정 파일을 패키징하여 격리된 공간에서 실행한다. 가볍고 어디서든 동일하게 동작하는 이식성이 강점이다.
Docker: 컨테이너 가상화를 쉽게 구현하고 관리하는 가장 인기 있는 플랫폼이다.
오케스트레이션 & K8s
개념: 여러 컨테이너의 배포, 확장, 관리를 자동화하는 '오케스트레이션' 기술이다.
Kubernetes (k8s): 복잡한 MSA 아키텍처 운영 도구다. 주로 AWS EKS 같은 관리형 서비스를 활용한다.
결국 현대 인프라는 물리적인 서버 관리에서 벗어나 코드로 자동화하고 컨테이너로 격리하는 방향으로 가고 있다.
이 모든 과정이 바로 DevOps의 핵심이다.