IMCAT.DEV
로그인 가입
Ruby 고급 DevOps

Ruby 구성 관리 도구 (Ansible, Chef)

Ruby 구성 관리 도구 (Ansible, Chef) — 고급

구성 관리 도구 (Ansible, Chef)

1. 도입 (왜 배워야 하는가)

구성 관리 도구인 Ansible과 Chef는 현대 IT 인프라에서 필수적인 도구입니다. 이러한 도구는 서버 설정, 애플리케이션 배포, 패키지 관리 등을 자동화하여 운영 효율성을 극대화합니다. 이들을 배우지 않으면 인프라 관리에서 발생할 수 있는 많은 문제점이 있습니다. 예를 들어, 수십 대의 서버를 수동으로 관리해야 하는 상황이 발생할 수 있습니다. 이는 시간과 자원의 낭비는 물론, 인적 오류로 인한 서비스 중단 위험을 증가시킵니다.

2. 핵심 개념 설명

Ansible

Ansible은 에이전트리스(Agentless) 구조를 가진 구성 관리 도구로, SSH를 통해 원격 서버에 접근하여 설정을 관리합니다. 이를 통해 서버의 상태를 코드로 정의하고, 반복적으로 관리할 수 있습니다.

Chef

Chef는 에이전트를 사용하는 구조로, 각 서버에 Chef 클라이언트를 설치하고, 중앙 서버에서 관리합니다. Chef는 주로 Ruby 기반으로 작성된 설정 파일인 레시피(Recipe)를 사용하여 서버의 상태를 정의합니다.

용어설명
PlaybookAnsible의 설정 파일로, 여러 작업을 정의하는 YAML 파일.
RecipeChef의 설정 파일로, 서버의 설정을 정의하는 Ruby 파일.
Role여러 Recipe를 묶어 서버의 역할을 정의하는 Chef의 개념.

3. 기본 코드 예제

Ansible 기본 예제

Ansible을 사용하여 웹 서버를 설치하는 예제입니다.

---
- name: 웹 서버 설치
  hosts: all
  tasks:
    - name: Apache 설치
      apt:
        name: apache2
        state: present

이 Playbook은 모든 호스트에 Apache 웹 서버를 설치합니다.

실행 결과:

  • Apache가 설치됨
  • 코드 한 줄씩 동작 설명:

  • - name: 웹 서버 설치: Playbook의 이름을 정의합니다.
  • hosts: all: 모든 호스트에서 이 작업을 실행하겠다는 의미입니다.
  • tasks:: 수행할 작업 리스트를 정의합니다.
  • - name: Apache 설치: 작업의 이름을 정의합니다.
  • apt:: Ubuntu의 패키지 관리 도구를 사용하여 작업을 수행합니다.
  • name: apache2: 설치할 패키지의 이름입니다.
  • state: present: 패키지가 현재 존재해야 함을 의미합니다.
  • Chef 기본 예제

    Chef를 사용하여 웹 서버를 설치하는 예제입니다.

    package 'apache2' do
      action :install
    end

    이 코드 블록은 Chef에서 Apache 웹 서버를 설치합니다.

    실행 결과:

  • Apache가 설치됨
  • 코드 한 줄씩 동작 설명:

  • package 'apache2': 설치할 패키지의 이름을 정의합니다.
  • do: 이 블록 안에 실행할 작업을 정의합니다.
  • action :install: 패키지를 설치하라는 지시입니다.
  • 4. 실전 활용 예제

    쇼핑몰 서버 설정

    쇼핑몰에서 장바구니 기능을 구현할 때, 여러 서버에 동일한 환경을 설정해야 할 필요가 있습니다. Ansible을 사용하여 모든 서버에 필요한 패키지를 자동으로 설치하고 구성할 수 있습니다.

    ---
    - name: 쇼핑몰 서버 설정
      hosts: web_servers
      tasks:
        - name: 필수 패키지 설치
          apt:
            name:
              - apache2
              - mysql-server
              - php
            state: present

    이 Playbook은 쇼핑몰 웹 서버에 필요한 모든 패키지를 설치합니다.

    CI/CD 파이프라인 구축

    Chef를 사용하여 CI/CD 파이프라인을 구축할 수 있습니다. 서버가 배포되면 자동으로 필요한 소프트웨어와 라이브러리를 설치하고, 애플리케이션을 배포할 수 있습니다.

    # CI/CD 서버 설정
    package 'git' do
      action :install
    end
    
    git '/var/www/myapp' do
      repository 'https://github.com/myuser/myapp.git'
      action :sync
    end

    이 코드는 Git을 설치하고 특정 리포지토리의 소스를 클론합니다.

    5. 흔한 실수와 주의사항

    잘못된 코드 vs 올바른 코드 비교

    1. Ansible에서 state: latest를 사용할 때 패키지가 항상 최신 버전으로 업데이트되도록 설정해야 합니다. 그렇지 않으면 의도치 않게 버전이 변경될 수 있습니다.
    2. 잘못된 코드:

         - name: Apache 설치
           apt:
             name: apache2
             state: latest

      올바른 코드:

         - name: Apache 설치
           apt:
             name: apache2
             state: present
    3. Chef에서 레시피를 작성할 때, 패키지가 이미 설치되어 있는지 확인하지 않고 설치하면 중복 설치의 위험이 있습니다.
    4. 잘못된 코드:

         package 'apache2' do
           action :install
         end

      올바른 코드:

         package 'apache2' do
           action :install
           not_if "dpkg -l | grep apache2"
         end

      6. 정리

    5. Ansible과 Chef는 서버 관리의 효율성을 높이고, 인적 오류를 줄이는 데 필수적입니다.
    6. Ansible은 에이전트리스 구조로 간편하게 사용 가능하고, Chef는 더 정교한 관리가 가능합니다.
    7. 자동화된 배포와 서버 관리로 인프라의 일관성을 유지할 수 있습니다.
    8. 다음에 학습하면 좋은 주제:

    9. Terraform을 통한 인프라 프로비저닝
    10. Docker와 Kubernetes를 이용한 컨테이너 관리
    11. CI/CD 도구 (Jenkins, GitLab CI) 활용하기