앤서블(Ansible) 시작하기: Playbook으로 인프라 구성 자동화

1. 반복적인 서버 설정 작업의 굴레

새로운 웹 서버 10대를 구축해야 하는 상황을 상상해 봅시다. 각 서버에 접속해서 Nginx를 설치하고, 방화벽 포트를 열고, 설정 파일을 배포하고, 서비스를 재시작하는 작업을 10번 반복해야 합니다. 이 과정은 지루할 뿐만 아니라, 사람이 직접 작업하기 때문에 서버마다 설정이 미묘하게 달라지는 '설정 드리프트(Configuration Drift)'가 발생할 위험이 큽니다.

이러한 문제를 해결하기 위해 등장한 것이 바로 '구성 관리(Configuration Management)' 도구이며, 그중에서도 단순함과 강력함을 무기로 가장 널리 사용되는 도구가 바로 앤서블(Ansible)입니다. 앤서블은 여러 서버의 상태를 코드를 통해 정의하고, 원하는 상태로 자동으로 구성 및 유지 관리해주는 자동화 엔진입니다.

2. 앤서블의 차별점: Agentless와 YAML

앤서블이 다른 구성 관리 도구(Chef, Puppet 등)와 구별되는 가장 큰 특징은 '에이전트리스(Agentless)' 방식이라는 점입니다. 관리 대상 서버에 별도의 관리용 소프트웨어(에이전트)를 설치할 필요 없이, 기본적으로 내장된 SSH 프로토콜을 통해 통신하고 작업을 수행합니다. 이는 초기 설정이 매우 간단하고, 관리 대상 서버에 추가적인 부담을 주지 않는다는 큰 장점을 가집니다.

또한, 모든 작업 내용을 사람이 읽고 쓰기 쉬운 YAML(YAML Ain't Markup Language) 형식으로 작성합니다. 복잡한 프로그래밍 언어 대신, 순차적인 작업 목록을 명확하게 기술할 수 있어 개발자뿐만 아니라 시스템 관리자도 쉽게 배울 수 있습니다.

3. 앤서블의 3가지 핵심 구성요소

앤서블을 사용하기 위해 알아야 할 세 가지 기본 개념입니다.

  • 인벤토리 (Inventory): '어디에(Where)' 작업을 수행할지를 정의하는, 관리 대상 서버들의 목록입니다. IP 주소나 호스트 이름을 그룹별로 묶어서 관리할 수 있습니다. (예: [webservers], [dbservers])
  • 플레이북 (Playbook): '무엇을(What)' 할지를 정의하는, 작업 내용의 순차적인 목록입니다. YAML 형식으로 작성되며, "webservers 그룹에 Nginx를 설치하고 서비스를 시작하라"와 같은 작업 시나리오를 담고 있습니다.
  • 모듈 (Module): '어떻게(How)' 작업을 수행할지에 대한 구체적인 도구입니다. 앤서블은 패키지 설치(apt, yum), 파일 복사(copy), 서비스 관리(service) 등 수천 개의 내장 모듈을 제공하며, 플레이북은 이 모듈들을 조합하여 작업을 실행합니다.

간단한 Nginx 설치 플레이북 예제

---
- name: Install and run Nginx
  hosts: webservers
  become: yes # 관리자(root) 권한으로 실행

  tasks:
    - name: Install nginx package
      apt: # apt 모듈 사용
        name: nginx
        state: latest

    - name: Start nginx service
      service: # service 모듈 사용
        name: nginx
        state: started
        enabled: yes

4. 멱등성: 여러 번 실행해도 결과는 항상 같다

앤서블의 또 다른 핵심 개념은 '멱등성(Idempotency)'입니다. 멱등성이란 어떤 연산을 여러 번 적용하더라도 결과가 달라지지 않는 성질을 의미합니다. 위 플레이북을 예로 들면, Nginx가 이미 설치되어 있고 최신 버전이라면 'Install nginx package' 작업은 아무것도 하지 않고 'ok' 상태로 넘어갑니다. Nginx 서비스가 이미 실행 중이라면 'Start nginx service' 작업 역시 아무런 변경을 일으키지 않습니다.

이 멱등성 덕분에, 우리는 플레이북을 몇 번이고 안심하고 실행할 수 있습니다. 앤서블은 항상 시스템의 '현재 상태'를 파악하고, 플레이북에 정의된 '원하는 상태'와 다를 경우에만 필요한 작업을 수행하여 시스템을 원하는 상태로 맞춰줍니다.

5. 앤서블 vs. 셸 스크립트

구분 셸 스크립트 (Shell Script) 앤서블 (Ansible)
작업 방식 명령형 (Imperative): '어떻게' 할지를 순서대로 명령 선언형 (Declarative): '무엇이 되어야 하는지' 상태를 선언
멱등성 보장되지 않음 (개발자가 직접 구현해야 함) 기본적으로 보장됨 (모듈이 상태를 체크)
재사용성 낮음 (스크립트를 복사/붙여넣기) 높음 (Role과 Collection을 통해 재사용 가능한 단위로 모듈화)
결과 확인 종료 코드와 출력 로그를 직접 파싱해야 함 작업 결과를 JSON 형식으로 명확하게 반환 (changed, ok, failed)
확장성 제한적 수천 개의 모듈과 거대한 커뮤니티 생태계

앤서블은 단순한 스크립트 자동화 도구를 넘어, 인프라를 코드로 관리(Infrastructure as Code, IaC)하는 DevOps의 핵심 철학을 실현하는 도구입니다. 반복적인 서버 구성 작업을 자동화하고, 모든 서버의 상태를 일관되게 유지하며, 인프라 변경 사항을 Git으로 투명하게 관리하고 싶다면 앤서블은 가장 먼저 고려해야 할 강력하고 직관적인 솔루션입니다.

댓글