Server

Ansible 첫걸음: 자동화를 통한 서버 관리 입문

범데이 2025. 8. 28. 22:57

이전에 나는 OpenStack을 이용해 SDN 환경을 구성한 적이 있었다. 두 개의 Ubuntu 인스턴스를 띄우고, 그 위에 Docker와 Kubernetes를 올렸다. 마지막에는 GitLab까지 설치해 CI/CD까지 연결하면서 서버 구성을 완성했는데, 이 과정에서 깨달은 점이 하나 있다.

 

“이걸 다 수동으로 하면, 서버가 조금만 늘어나도 답이 없겠다.”

 

그때는 서버가 두 대뿐이라 직접 명령어를 치고 패키지를 깔고 설정 파일을 만지면서 어떻게든 마무리할 수 있었다. 하지만 다섯 대, 열 대가 되면? 혹은 동일한 환경을 다시 한 번 새로 만들어야 한다면? 그때는 분명히 시간이 엄청 걸리고, 실수도 잦아질 거다.

 

그래서 자연스럽게 찾아보게 된 게 Ansible이라는 도구다. 이번 글에서는 Ansible이 어떤 녀석인지, 어떤 특징을 가지고 있는지, 그리고 실제로 어떻게 쓰이는지 차근차근 풀어본다.

 

 


Ansible이란?

Ansible은 간단히 말해 “자동으로 서버에 접속해서, 내가 원하는 상태로 맞춰주는 도구” 다. 특별한 에이전트 프로그램도 필요 없다. 그냥 SSH로 접속할 수 있으면 된다.

 

예를 들어 “Nginx가 설치되어 있어야 한다” 라고만 적어주면, Ansible은 현재 상태를 확인한 뒤 없으면 설치하고, 이미 설치돼 있으면 아무 일도 하지 않는다. 사람이 하나하나 확인할 필요 없이, 최종 상태만 선언해두면 된다.

 

 

Ansible의 주요 역할

  1. 프로비저닝 (Provisioning)
    새 서버를 켰을 때 필요한 기본 세팅을 자동으로 처리한다. 예를 들어 패키지 설치, 계정 생성, 보안 설정 같은 것들.
  2. 애플리케이션 배포 (Application Deployment)
    웹 서버, 데이터베이스, 미들웨어 같은 소프트웨어를 동시에 여러 서버에 설치하고 설정한다.
  3. 구성 관리 (Configuration Management)
    “어느 서버는 설정이 조금 다르네?” 같은 불일치를 막고, 모든 서버가 동일한 상태를 유지하게 한다.
  4. 오케스트레이션 (Orchestration)
    여러 서버가 순서대로 동작해야 하는 복잡한 시나리오도 자동으로 처리한다. (예: DB 먼저 → 앱 서버 → 로드밸런서 순서)

 

 

Ansible의 특징

Ansible이 특히 각광받는 이유는 다음과 같다.

  • 에이전트 불필요: 별도 설치 없이 SSH만으로 동작
  • 선언적 구성: “무엇을 원하는지”만 적으면 됨
  • YAML 문법: 읽기 쉽고 쓰기 쉬운 포맷
  • Idempotent 보장: 여러 번 실행해도 결과가 변하지 않음
  • 확장성: 서버 몇 대에서 수천 대까지 관리 가능

 

Playbook 예시

아래 예시는 가장 단순한 Nginx 설치 작업이다. webservers 그룹에 속한 서버 전부에 Nginx를 설치하고 실행하며, 부팅 시 자동 시작까지 설정한다.

- hosts: webservers
  become: yes
  tasks:
    - name: Nginx 설치
      apt:
        name: nginx
        state: present

    - name: Nginx 실행 및 부팅 시 자동 시작
      service:
        name: nginx
        state: started
        enabled: yes

짧은 몇 줄만으로 서버 여러 대가 같은 상태가 된다.

수십 개 서버에 일일이 접속해 apt-get install을 반복할 필요가 없는 셈이다.

 

 

Ansible을 처음 볼 때 알아두면 좋은 개념

  • 인벤토리(Inventory): 관리할 서버 목록 정의
  • 모듈(Module): 패키지 설치, 서비스 관리 등 개별 기능 단위
  • 플레이북(Playbook): 작업(Task)들을 순서대로 정의한 시나리오 파일
  • 핸들러(Handler): 특정 이벤트 시 실행되는 작업 (예: 설정 변경 후 서비스 재시작)
  • 롤(Role): Playbook을 구조화하고 재사용 가능하게 만드는 방법

 

결론

OpenStack 환경에서 두 대의 Ubuntu 인스턴스를 만들고, Docker와 Kubernetes, GitLab까지 얹으면서 처음에는 모든 걸 직접 명령어로 설정했다. 그런데 중간부터는 Ansible을 적용해봤다. 결과는 확실히 달랐다.

 

수동으로 했을 때는 같은 작업을 여러 번 반복하면서 “혹시 빠뜨린 건 없을까” 늘 확인해야 했는데, Ansible로 Playbook을 실행하니 서버 두 대가 똑같은 환경으로 단번에 맞춰졌다. 시간은 크게 단축됐고, 설정 불일치에 대한 불안감도 사라졌다.

 

그 경험 덕분에 확신이 생겼다. 작업이 조금만 반복되더라도 Ansible로 자동화해두는 게 결국 더 안전하고 효율적이다. 단순히 편해지는 걸 넘어, 규모가 커질수록 안정성과 생산성까지 보장해주는 도구라는 걸 몸소 느꼈다.

 

그래서 이번 글을 정리한 이유도 같다. 나처럼 직접 서버를 구성하다가 “이걸 매번 수동으로 해야 하나?” 하는 고민이 든다면, Ansible은 그 질문에 가장 확실한 답이 될 수 있다. 작은 Playbook 하나로 시작해도 충분하다.

728x90
반응형