🔍 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라는 호스트 그룹에 대해:
- nginx가 설치되고
- 서비스가 시작됩니다.
🚀 실무에서 Ansible을 사용하는 이유
- 버전 일관성 확보: 서버마다 수동으로 설정하다 보면 설정이 달라지는 경우가 많습니다. Ansible은 선언형 코드로 설정을 일괄 관리합니다.
- 반복 작업 제거: 배포나 설정 변경 시 단 1초도 수동 작업이 필요 없습니다.
- 인프라 문서화: 설정이 모두 코드로 남기 때문에, 누가 어떤 작업을 했는지 명확해집니다.
- 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을 시작해보세요.
추가 자료 추천
- 공식 문서
- Ansible Galaxy – 커뮤니티 역할 공유 마켓
- ansible-lint, molecule – 실무 품질 관리 도구
'DevOps' 카테고리의 다른 글
DNSmasq 완벽 가이드: 네트워크 관리의 스위스 아미 나이프 (2) | 2025.07.18 |
---|---|
HAProxy란? (고성능 로드밸런서, nginx controller 비교) (0) | 2025.07.11 |
[Prometheus] Metric (0) | 2023.05.04 |
댓글