서버 자동화를 위한 Ansible
Ansible
여러 대의 서버를 운영하다 보면 패키지 설치, 설정 파일 배포, 디렉터리 생성처럼 같은 작업을 반복해야 하는 경우가 많습니다.
서버가 1대일 때는 직접 접속해 명령어를 실행해도 큰 부담이 없습니다. 하지만 관리 대상 서버가 늘어나면 동일한 작업을 서버마다 반복해야 하고, 작업 누락이나 설정 차이가 발생할 수 있습니다.
Ansible은 이러한 서버 관리 작업을 자동화하기 위한 오픈소스 IT 자동화 도구입니다. 작업 내용을 YAML 형식의 Playbook으로 작성해두면 여러 서버에 동일한 작업을 한 번에 실행할 수 있습니다.
Ansible의 가장 큰 특징은 대상 서버에 별도의 Agent를 설치하지 않는다는 점입니다. 관리 서버에서 SSH를 통해 대상 서버에 접속하고, 필요한 작업을 원격으로 실행하는 방식이기 때문에 초기 구성이 비교적 단순합니다.
예를 들어 디렉터리 생성, 패키지 설치, 설정 파일 배포 같은 작업을 Playbook으로 작성해두면 관리자가 각 서버에 직접 접속하지 않아도 동일한 작업을 일괄 적용할 수 있습니다.
이번 테스트에서는 Ansible을 사용해 여러 Rocky Linux 서버에 반복 작업을 한 번에 실행하는 과정을 확인합니다.
주요 특징
-
SSH 기반으로 동작
-
대상 서버에 Agent 설치 불필요
-
YAML 형식의 Playbook 사용
-
여러 서버를 그룹 단위로 관리 가능
-
패키지 설치, 파일 복사, 디렉터리 생성, 서비스 관리 가능
테스트 환경
구성
대상 서버는 OS만 설치된 초기 상태이며, 별도 웹 서버, DB, 애플리케이션은 설치되어 있지 않습니다.
# 관리 서버
10.101.0.3
# 테스트 대상 서버 1
10.101.0.4
# 테스트 대상 서버 2
10.101.0.6
# 테스트 대상 서버 3
10.101.0.8
전제 조건
-
서버 간 통신 가능
-
관리 서버에서 대상 서버로 SSH 접속 가능
-
대상 서버는 root 계정 접속 가능
-
관리 서버에 Ansible 설치 가능
1단계. 대상 서버 1 ~ 대상 서버통신 확인
관리 서버에서 실행
Ansible을 사용하기 전에 관리 서버에서 대상 서버로 SSH 접속이 가능한지 먼저 확인합니다.
# 대상 서버 1 ~ 대상 서버 3의 SSH 접속 확인
ssh root@10.101.0.4

# 대상 서버 OS 정보 확인
ssh root@10.101.0.4 "cat /etc/os-release"

2단계. SSH Key 생성 및 등록
관리 서버에서 실행
Ansible은 SSH를 통해 대상 서버에 접속하므로 비밀번호 없이 접속할 수 있도록 SSH Key를 등록합니다.
# SSH Key 생성
ssh-keygen -t ed25519

# 대상 서버 1 ~ 대상 서버 3 공개키 등록
ssh-copy-id root@10.101.0.4

# 대상 서버 1 ~ 대상 서버 3 비밀번호 없이 접속 확인
ssh root@10.101.0.4

3단계. Ansible 설치
관리 서버에서 실행
관리 서버에 Ansible을 설치합니다.
# EPEL 저장소 설치 dnf -y install epel-release# Ansible 설치 dnf -y install ansible
# Ansible 버전 확인 ansible --version

4단계. Inventory 파일 작성
관리 서버에서 실행
Inventory는 Ansible이 작업을 실행할 대상 서버 목록을 정의하는 파일입니다.
이번 테스트에서는 대상 서버 3대를 test_servers 그룹으로 묶어 등록합니다. 이렇게 그룹으로 관리하면 이후 Ansible 명령어나 Playbook 실행 시 서버 IP를 하나씩 지정하지 않고, test_servers 그룹만 지정해 여러 서버에 동일한 작업을 한 번에 실행할 수 있습니다.
# Ansible 설정 디렉터리 생성
mkdir -p /etc/ansible
# Inventory 파일 생성
vi /etc/ansible/hosts
입력 내용
[test_servers]
10.101.0.4
10.101.0.6
10.101.0.8
Inventory 파일 확인
cat /etc/ansible/hosts

5단계. Ansible 기본 명령 실행
관리 서버에서 실행
Inventory에 등록한 대상 서버로 Ansible 명령이 정상 실행되는지 확인합니다.
# 대상 서버 전체 접속 확인
ansible test_servers -m ping
# 대상 서버 전체 hostname 확인
ansible test_servers -m command -a "hostname"
# 대상 서버 전체 OS 정보 확인
ansible test_servers -m command -a "cat /etc/os-release"
# 대상 서버 전체 디스크 용량 확인
ansible test_servers -m command -a "df -h"
6단계. Playbook 저장 디렉터리 준비
관리 서버에서 실행
Playbook은 Ansible에서 실행할 작업 내용을 YAML 형식으로 작성한 파일입니다.
이번 테스트에서는 디렉터리 생성, 패키지 설치, 파일 생성 작업을 Playbook으로 작성합니다.
# Playbook 저장 디렉터리 생성
mkdir -p /root/ansible-basic
# Playbook 디렉터리 이동
cd /root/ansible-basic
# 현재 위치 확인
pwd

7단계. 기본 Playbook 작성
디렉터리 생성 Playbook
대상 서버에 /opt/ansible-test 디렉터리를 생성하는 Playbook입니다.
# Playbook 디렉터리 이동
cd /root/ansible-basic
# 디렉터리 생성 Playbook 작성
vi create-directory.yml
입력 내용
---
- name: Create test directory
hosts: test_servers
become: yes
tasks:
- name: Create /opt/ansible-test directory
file:
path: /opt/ansible-test
state: directory
mode: '0755'

패키지 설치 Playbook
대상 서버에 기본 패키지를 설치하는 Playbook입니다.
# 패키지 설치 Playbook 작성
vi install-packages.yml
입력 내용
---
- name: Install basic packages
hosts: test_servers
become: yes
tasks:
- name: Install basic tools
dnf:
name:
- vim
- wget
- curl
state: present

파일 생성 Playbook
대상 서버에 테스트 파일을 생성하는 Playbook입니다.
# 파일 생성 Playbook 작성
vi create-file.yml
입력 내용
---
- name: Create test file
hosts: test_servers
become: yes
tasks:
- name: Create test file
copy:
dest: /opt/ansible-test/test.txt
content: "Ansible basic test completed\n"
mode: '0644'

생성된 Playbook 확인
# 생성된 Playbook 확인 ls -lh

8단계. Playbook 문법 확인
관리 서버에서 실행
Playbook을 실행하기 전에 문법 오류가 없는지 먼저 확인합니다.
# Playbook 디렉터리 이동
cd /root/ansible-basic
# 디렉터리 생성 Playbook 문법 검사
ansible-playbook --syntax-check create-directory.yml
# 패키지 설치 Playbook 문법 검사
ansible-playbook --syntax-check install-packages.yml
# 파일 생성 Playbook 문법 검사
ansible-playbook --syntax-check create-file.yml
9단계. Playbook 실행
관리 서버에서 실행
작성한 Playbook을 실행하여 대상 서버 3대에 동일한 작업을 적용합니다.
# Playbook 디렉터리 이동 cd /root/ansible-basic # 디렉터리 생성 Playbook 실행 ansible-playbook -i /etc/ansible/hosts create-directory.yml # 패키지 설치 Playbook 실행 ansible-playbook -i /etc/ansible/hosts install-packages.yml # 파일 생성 Playbook 실행 ansible-playbook -i /etc/ansible/hosts create-file.yml

10단계. 실행 결과 확인
관리 서버에서 실행
Playbook 실행 후 대상 서버에 작업 결과가 정상 반영되었는지 확인합니다.
# 생성된 디렉터리 확인 ansible test_servers -m command -a "ls -ld /opt/ansible-test" # 생성된 파일 내용 확인 ansible test_servers -m command -a "cat /opt/ansible-test/test.txt" # 설치된 패키지 확인 ansible test_servers -m command -a "rpm -q vim wget curl"
마무리
이번 테스트에서는 Ansible을 이용해 여러 Rocky Linux 서버에 동일한 작업을 한 번에 실행했습니다.
직접 각 서버에 접속해 명령어를 반복 실행하는 방식보다 Inventory와 Playbook을 활용하면 작업 대상과 작업 내용을 명확하게 관리할 수 있습니다.
특히 서버 수가 늘어날수록 Ansible을 사용하면 반복 작업을 줄이고, 작업 누락이나 서버별 설정 차이를 줄이는 데 도움이 됩니다.
참고 문서
- NHN Cloud Meetup : Ansible & AWX 설치부터 기본 활용 흐름
- SK플래닛 TECH TOPIC: AWX 개념, 주요 기능, 배포 자동화 구성
- Ansible 공식 문서: Ansible Agentless 구조 및 제어 노드 개념
- AWX Operator 공식 문서
- 위의 참고 문서와 테스트 기반으로 작성한 문서이며 AI는 참고용으로만 활용하였습니다.





# Ansible 설치
dnf -y install ansible
# Ansible 버전 확인
ansible --version




