개요

Ansible은 Red Hat이 관리하는 오픈소스 IT 자동화 및 구성 관리(Configuration Management) 도구입니다. 에이전트 없이 SSH만으로 원격 서버를 관리하며, YAML 기반 Playbook으로 인프라 설정을 코드화합니다. 학습 곡선이 낮고 즉시 사용할 수 있어 가장 널리 쓰이는 구성 관리 도구입니다.


핵심 특징

특징설명
에이전트리스 (Agentless)대상 서버에 에이전트 설치 불필요, SSH로 직접 접속
YAML Playbook사람이 읽기 쉬운 YAML로 자동화 작업 정의
멱등성 (Idempotent)같은 Playbook을 여러 번 실행해도 결과 동일
Push 방식제어 노드에서 대상 서버로 명령 전송
모듈 기반3,000+ 내장 모듈 (패키지 설치, 파일 관리, 클라우드 등)

구성 요소

구성요소설명
Inventory관리 대상 서버 목록 (INI 또는 YAML)
Playbook자동화 작업 정의 (YAML)
Role재사용 가능한 작업 묶음 (디렉터리 구조 표준화)
CollectionRole + Module + Plugin 패키지 (Galaxy에서 배포)
Module개별 작업 단위 (apt, copy, service 등)
Facts대상 서버의 시스템 정보 자동 수집

Playbook 예제

---
- name: 웹 서버 설정
  hosts: webservers
  become: yes
 
  tasks:
    - name: Nginx 설치
      apt:
        name: nginx
        state: present
        update_cache: yes
 
    - name: 설정 파일 배포
      template:
        src: nginx.conf.j2
        dest: /etc/nginx/nginx.conf
      notify: Restart Nginx
 
    - name: Nginx 시작 및 활성화
      service:
        name: nginx
        state: started
        enabled: yes
 
  handlers:
    - name: Restart Nginx
      service:
        name: nginx
        state: restarted
# 실행
ansible-playbook -i inventory.yml playbook.yml
 
# Ad-hoc 명령 (단일 작업)
ansible webservers -m ping
ansible webservers -m shell -a "uptime"

Terraform과의 관계

실무에서는 Terraform + Ansible 조합이 일반적:

도구역할비유
Terraform인프라 프로비저닝 (생성/삭제)“서버를 만든다”
Ansible인프라 구성 관리 (설정/설치)“서버를 설정한다”
Terraform (EC2 생성) → Ansible (Nginx 설치, 앱 배포, 설정 적용)

vs 다른 구성 관리 도구

항목AnsibleChefPuppet
에이전트불필요 (SSH)필요필요
언어YAMLRuby독자 DSL
방식PushPullPull
학습 곡선낮음높음중간
대규모 관리보통좋음좋음

장단점

장점:

  • 에이전트 불필요 → 설정 부담 최소, SSH만 있으면 즉시 사용
  • YAML이라 배우기 쉬움
  • Python 기반 → 커스텀 모듈 작성 용이
  • 3,000+ 모듈로 대부분의 인프라 작업 커버

단점:

  • 대규모 (수천 대) 환경에서 성능 저하 (SSH 기반 한계)
  • 선언적이지 않음 → 드리프트 감지 약함
  • State 관리 없음 (실행할 때마다 전체 검사)
  • Windows 지원은 Linux 대비 제한적

관련 항목