본문 바로가기
DevOps

[Ansible] Ansible이란 무엇인가?

by BenKangKang 2025. 6. 7.

🔍 Ansible이란?

Ansible은 오픈소스로 개발된 IT 자동화 도구입니다.
서버 설정, 애플리케이션 배포, 시스템 업데이트, 클라우드 인프라 구성 등을 코드로 작성하고 자동화할 수 있습니다.

  • 개발사: Red Hat (2015년 인수)
  • 언어: Python 기반
  • 방식: 에이전트리스(Agentless) – 대상 서버에 별도 설치 없이 작동
  • 실행 방식: SSH 혹은 WinRM

✅ Ansible의 핵심 특징

기능 설명

🧩 Agentless 대상 서버에 별도 소프트웨어 설치 필요 없음
📦 Idempotent 몇 번 실행해도 항상 같은 결과 보장 (변경 사항만 반영)
📄 YAML 기반 구성 사람이 읽기 쉬운 Playbook 형식
🔗 모듈화 다양한 OS/서비스/클라우드 모듈 내장 (ex. systemd, yum, docker, aws 등)
🧠 Declarative 스타일 "무엇을 해야 하는지"만 기술, 구현은 Ansible이 자동 수행

💡 Ansible로 할 수 있는 일

  • 서버 초기 세팅 (패키지 설치, 설정 파일 배포, 사용자 생성 등)
  • 애플리케이션 배포 및 롤백
  • 웹/DB/캐시 서버 그룹 구성 및 관리
  • 로드밸런서/방화벽 설정 자동화
  • Kubernetes 클러스터 설치 (kubespray 기반)
  • AWS/GCP/Azure 클라우드 리소스 생성 및 삭제 (IaC로도 활용)

🧾 간단한 예시

playbook.yml

- name: Install and start Nginx
  hosts: webservers
  become: yes

  tasks:
    - name: Install nginx
      apt:
        name: nginx
        state: present

    - name: Start nginx
      service:
        name: nginx
        state: started

위 Playbook을 실행하면, webservers라는 호스트 그룹에 대해:

  1. nginx가 설치되고
  2. 서비스가 시작됩니다.

🚀 실무에서 Ansible을 사용하는 이유

  1. 버전 일관성 확보: 서버마다 수동으로 설정하다 보면 설정이 달라지는 경우가 많습니다. Ansible은 선언형 코드로 설정을 일괄 관리합니다.
  2. 반복 작업 제거: 배포나 설정 변경 시 단 1초도 수동 작업이 필요 없습니다.
  3. 인프라 문서화: 설정이 모두 코드로 남기 때문에, 누가 어떤 작업을 했는지 명확해집니다.
  4. CI/CD 통합: GitHub Actions, Jenkins 등과 연계해 인프라 자동화 파이프라인 구축 가능

🧭 입문자를 위한 팁

  • 처음에는 ansible ad-hoc 명령어로 간단히 테스트해보세요.
  • inventory, playbook, roles 구조를 익히면 빠르게 확장 가능합니다.
  • 하나의 서버 → 여러 서버 → 클라우드 환경 → 복잡한 롤 → CI/CD 자동화 순으로 자연스럽게 학습하세요.

 

✅ Ansible Best Practice 폴더 구조

.
├── ansible.cfg
├── inventory/
│   ├── production
│   └── staging
├── group_vars/
│   ├── all.yml
│   └── webservers.yml
├── host_vars/
│   ├── host1.yml
│   └── host2.yml
├── roles/
│   └── webserver/
│       ├── tasks/
│       │   └── main.yml
│       ├── handlers/
│       │   └── main.yml
│       ├── templates/
│       ├── files/
│       ├── vars/
│       │   └── main.yml
│       ├── defaults/
│       │   └── main.yml
│       └── meta/
│           └── main.yml
├── playbooks/
│   ├── site.yml
│   └── webservers.yml
└── README.md

📘 설명

폴더/파일 설명

ansible.cfg Ansible 설정 파일. 경로, 인벤토리, 역할 경로 등을 지정
inventory/ 각 환경별 인벤토리 파일 위치. ex) production, staging
group_vars/, host_vars/ 그룹 및 호스트별 변수 정의
roles/ 역할 기반 구조로 기능을 분리. ex) nginx, mysql
roles/<role>/tasks/main.yml 해당 역할에서 실행할 메인 작업들 정의
playbooks/ 실행할 플레이북 파일들. 역할을 호출하거나 환경별 설정 등
templates/, files/ Jinja2 템플릿 및 정적 파일 저장
defaults/, vars/ 역할별 변수 정의. defaults가 우선순위 가장 낮음
handlers/ notify:로 호출되는 서비스 restart 등 핸들러 정의
meta/ 역할의 의존성 등 메타 정보 정의

🎯 참고: 작은 프로젝트일 경우

작은 규모라면 아래처럼 단일 Playbook 중심의 구조로 시작해도 충분합니다.

.
├── ansible.cfg
├── inventory
├── playbook.yml
├── tasks/
│   └── install_nginx.yml
└── templates/
    └── nginx.conf.j2

원하는 규모에 따라 위에서 간단한 구조 → Role 기반 구조로 확장해가면 됩니다.
원하면 초기 Scaffold 템플릿도 생성해줄 수 있어요.


🧱 마치며

Ansible은 단순한 서버 관리 툴을 넘어, 현대적인 인프라 운영의 중심이 되고 있습니다.
누구나 쉽게 시작할 수 있지만, 익숙해질수록 자동화의 스케일을 극대화할 수 있는 도구입니다.

손이 아닌 코드로 인프라를 운영하고 싶다면, 지금 바로 Ansible을 시작해보세요.


추가 자료 추천

 

댓글