본문 바로가기
DevNet/기초 학습

인프라와 자동화

by CBROJIN 2025. 9. 2.

인프라 자동화

  • 이제 단순 자동화를 넘어서 네트워크 인프라 전체를 자동화하는 필요성 증가.
  • 전문가들이 네트워크를 설계·구성·관리하는 방식이 크게 바뀌고 있음.
  • 대표 도구: Puppet, Ansible, Chef (범용 자동화), pyATS, VIRL (네트워크 전용).

인프라 자동화란?

  • 자동화란? 코드를 사용해 컴퓨팅, 스토리지, 네트워크와 그 위에서 실행되는 앱을 관리하는 것.
  • Cisco 플랫폼은 Ansible 같은 범용 툴과 통합되거나 직접 API 제공.
  • 캠퍼스, 데이터센터, 서비스 제공자 환경 모두 활용 가능.
  • Cisco DevNet Automation Exchange에서 다양한 솔루션을 탐색 가능.

자동화가 필요한 이유

속도와 확장성: 빠르게 움직여 경쟁력 확보.

수동 작업 단점:

  • 서버 설정에만 수십 분 소요, 수십~수백 앱이면 네트워크 중단 위험.
  • 확장이 어렵고 인적 오류 발생 가능.
  • 문서화는 불완전·애매모호·빠르게 구식화.

비용 문제: IT 중단 시 분당 5,600달러 손실, 보안 침해는 더 치명적.

종속성 위험: 오픈소스 생태계 의존 → 특정 기능이 중단되면 운영 차질, 취약한 스택에 갇힘.

풀스택 자동화의 필요성

  • 장점: 속도, 반복성, 대규모 확장, 위험 감소.
  • 셀프 서비스: 사용자가 DB, VPN, 분석 플랫폼 등을 직접 요청.
  • 주문형 확장: 퍼블릭·프라이빗 클라우드에서 자동 확장.
  • 관찰 가능성(o11y): 모니터링과 사전 테스트로 내부 상태 추적.
  • 문제 완화/자가 복구: Chaos Engineering으로 장애를 가정하고 대비.

소프트웨어 정의 인프라와 자동화

클라우드 컴퓨팅 = 베어메탈/가상 리소스를 코드로 관리.

이점:

  • 셀프 서비스로 신속한 자원 사용
  • 표준화·일관성 유지
  • 컨테이너로 앱/플랫폼 분리

과제:

  • 클라우드별 API/UI 차이
  • 권한 관리 어려움 → 보안 위협
  • 사용하지 않는 리소스 방치 시 예상치 못한 비용 발생

해결책: 자동화로 리소스 사용 추적, 비용 관리

분산·동적 애플리케이션과 자동화

  • 모놀리스 아키텍처(단일체): 하나의 서버나 애플리케이션 안에 모든 기능이 들어있는 방식. 단순해 보이지만, 단일 서버에 장애가 나면 전체 서비스가 중단되고, 성능과 확장성이 제한됨. 예를 들어, 게시판·로그인·결제 기능이 모두 한 프로그램 안에 들어 있는 경우.
  • 문제점: 단일 장애 지점(SPOF), 전체를 한꺼번에 업데이트해야 해서 배포 위험 증가, 특정 부분만 확장하기 어려움.
  • 마이크로서비스 아키텍처: 기능을 작은 서비스 단위로 쪼개 각각 독립적으로 개발·배포하는 방식. 서비스들은 컨테이너에 담겨 네트워크로 연결되고, 필요 시 개별적으로 확장 가능. 예를 들어, 로그인 서비스·결제 서비스·상품 서비스가 각각 독립적으로 운영됨.
  • 장점: 서비스별 독립 확장 가능, 장애가 부분적으로만 발생, 유지보수와 업그레이드가 용이.
  • 과제: 서비스 개수가 많아져 복잡성이 증가, 이를 관리하려면 자동화 도구 필수.
  • 도구: Kubernetes, Mesos 같은 오케스트레이터가 서비스 배포·확장·자가복구를 자동화.

인프라 자동화 요약

자동화는 다음을 가능하게 함:

  • 앱의 개발→테스트→배포→운영 전체 관리
  • 소프트웨어 정의 인프라 관리
  • 자동화 코드 자체를 보존·업데이트하여 지속 개선

즉, 앱과 인프라를 하나의 코드 작업물로 취급할 수 있음.

 

자동화 도구와 개념

자동화 도구의 역할

  • 단순화와 표준화: 운영체제 명령어나 API 호출을 쉽게 사용할 수 있도록 래핑(wrapping)해줌.
    → 초보자가 복잡한 명령어 대신 간단한 코드만 작성해도 동일한 효과를 얻을 수 있음.
  • 심층 기능 접근 가능: 필요하면 원시 셸 명령어도 실행 가능.
    → 기존에 쓰던 스크립트나 레거시 코드를 재사용할 수 있음.
  • 안전성과 멱등성 지원: 변경 전 백업 자동화, 에러 발생 시 복구 기능 제공.
    → “한 번 실행하든 열 번 실행하든 결과가 동일”하게 보장.
  • 개발 속도 가속화: 기본 제공 기능(out-of-the-box)으로 네트워크 스냅샷, 롤백 기능 등을 바로 활용 가능.
    → 예: Ansible은 Cisco ACI 설정 스냅샷과 롤백 지원.
  • 재사용성과 보안 강화: 변수 정의, 서버 인벤토리 분리, 템플릿 활용 가능.
    → Ansible Vault처럼 민감 데이터 암호화 기능도 지원.
  • 인벤토리 관리: 장비 하드웨어, OS, 애플리케이션 상태 등을 자동 수집.
    → 클라우드 환경에서는 동적 인벤토리로 자원 실시간 업데이트.
  • 대규모 확장 지원: 수천~수만 개 노드를 한 번에 관리 가능.
  • 커뮤니티 지원: 오픈소스 기반 → 전 세계 사용자가 공유하는 플레이북, 레시피 활용 가능.

 

중요한 개념

  • 멱등성(Idempotency): 자동화 코드를 여러 번 실행해도 동일한 결과 보장.
    → 실수로 다시 실행해도 환경이 깨지지 않고, 원하는 상태로 수렴.
  • 절차 vs 선언적:
    • 절차적: 순서대로 명령 실행 (Python, BASH 스타일).
    • 선언적: “최종 상태”만 기술하면 도구가 알아서 맞춰줌 (Ansible, Puppet).
  • 프로비저닝 vs 구성 vs 배포 vs 오케스트레이션:
    • 프로비저닝: 서버·네트워크 기본 자원 확보.
    • 구성(Configuration): OS·서비스 설치 및 준비.
    • 배포(Deployment): 앱이나 클러스터를 실제로 설치.
    • 오케스트레이션: 자동 확장, 자가 복구 등 “전체적인 흐름 관리”.
  • 상태 관리(Stateless vs Stateful):
    • Stateless: 상태 저장 X → 서버 추가/삭제에 유연 (예: 단순 웹서버).
    • Stateful: 상태 저장 O → 세션, DB 같은 경우 확장·이동이 어려움.
      → 자동화는 Stateless 앱에 더 적합.

 

CI/CD란?

 

CI (Continuous Integration, 지속적 통합)
여러 개발자가 작성한 코드를 자주(하루에도 여러 번) 중앙 저장소(GitHub 같은 곳)에 합치는 걸 말한다.
이때 자동으로 빌드·테스트가 실행돼서 코드 충돌이나 버그를 빨리 잡을 수 있다.
→ "코드를 자주 합쳐서, 문제를 빨리 찾자"는 개념.

CD (Continuous Delivery/Deployment, 지속적 전달·배포)
CI 이후에 안정적으로 테스트된 코드를 자동으로 배포(Deploy)까지 이어가는 과정.

  • Continuous Delivery: 배포 준비까지 자동화 (실제 배포는 사람이 버튼 눌러서 실행)
  • Continuous Deployment: 배포까지 완전 자동화 (테스트 통과하면 바로 운영 서버에 올라감)

요약

  • 자동화 도구는 “복잡한 수동 작업 → 간단하고 안전한 코드 실행”으로 바꿔줌.
  • 처음에는 백업·조회(GET) 기능으로 시작 → 점차 배포·오케스트레이션으로 확장.
  • 멱등성·선언적 방식 이해가 자동화의 핵심.
  • Ansible 같은 도구는 커뮤니티 자료가 많아 학습하기 가장 쉬움.

 

Ansible이란?

  • 가장 널리 쓰이는 자동화 툴 중 하나.
  • 오픈소스 버전과 IBM/Red Hat의 Ansible Tower(상용 버전)가 있음.
  • 이름은 소설 속에서 '우주 어디서든 즉각 통신 가능' 장치에서 따옴.

기본 구조

  • Control Node: Ansible이 설치된 곳 (보통 Linux 머신)
  • Managed Node: Ansible이 관리하는 서버나 장비들
  • 제어 노드에서 SSH로 연결해 명령 실행, 패키지 설치, 설정 변경 등을 수행.

설치 방법

sudo apt update
sudo apt install ansible -y

코드 구조 (YAML 기반)

  • .yml 파일에 작업(Task)을 위에서 아래로 정의.
  • 모듈(Module)을 불러와서 파라미터와 함께 실행 → 마치 함수 호출과 비슷.

예: 방화벽 설정(UFW 사용)

- name: Allow SSH and HTTP through firewall
  ufw:
    rule: allow
    port: "22,80"
    proto: tcp

Playbook과 Role

  • Playbook: 여러 작업을 묶은 실행 단위.
  • Role: 반복해서 재사용 가능한 작은 단위 작업 모음.
  • Ansible Galaxy에서 다른 사람이 만든 Role을 가져다 쓸 수도 있음.

예: 데이터베이스 서버 배포

---
- hosts: dbservers
  become: true
  tasks:
    - name: Install PostgreSQL
      apt:
        name: postgresql
        state: present
        update_cache: yes

    - name: Ensure PostgreSQL is running
      service:
        name: postgresql
        state: started
        enabled: true

Ansible 폴더 계층 요소

  • Inventory files (호스트 파일): 관리 대상 리소스를 정리. dev, test, staging, production 환경을 나눠 관리 가능.
  • Variable files (변수 파일): 그룹 또는 개별 호스트에 필요한 변수 값을 정의.
  • Library/Utility files (라이브러리/유틸리티): 사용자 정의 모듈(Python)이나 유틸리티 포함. Ansible Galaxy 등에서 가져올 수 있음.
  • Main playbook files (플레이북 파일): YAML로 작성, 역할(Role) 또는 다른 플레이북 참조.
  • Role folders and files (역할 폴더/파일): 특정 기능 단계를 모아둔 구조. /tasks/main.yml과 핸들러 파일 포함.

프로젝트 구조 예시

myproject/
├── inventory
├── site.yml
└── roles/
    └── dbservers/
        ├── tasks/main.yml
        └── files/init.sql

인벤토리 파일 예시

[dbservers]
192.168.1.20
192.168.1.21

배포 실행

ansible-playbook -i inventory -u ubuntu -K site.yml
  • -i: 인벤토리 파일 지정
  • -u: SSH 사용자 이름
  • -K: sudo 암호 입력 요청

CI/CD와 연계

  • GitHub에 코드 푸시 → Jenkins 같은 CI/CD 툴이 테스트 실행
  • 테스트 성공 시 Ansible Playbook 자동 실행 → 서버에 적용

예: GitHub Actions 워크플로 일부

name: CI/CD Pipeline
on: [push]
jobs:
  deploy:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v2
      - name: Run Ansible Playbook
        run: ansible-playbook -i inventory site.yml

Cisco 환경과 Ansible

  • Cisco 장비도 Ansible 모듈로 자동화 가능.
  • 예: IOS 장비의 인터페이스 설명 추가
- name: Configure interface description
  ios_config:
    lines:
      - description Uplink to Core
    parents: interface GigabitEthernet0/1

핵심 요약

  • Ansible = SSH 기반 자동화 툴, YAML 문법으로 단순·명확.
  • Playbook/Role 구조로 확장성과 재사용성 확보.
  • GitHub Actions, Jenkins 등과 연계해 CI/CD 자동화에 적합.
  • Cisco 네트워크 장비도 전용 모듈로 관리 가능.

 

자동화 프레임워크란?

  • 프레임워크는 단순한 “도구(tool)”가 아니라 일정한 규칙과 구조를 가진 틀.
  • 예를 들어 Ansible은 서버·네트워크·클라우드 자원을 자동화할 때,
    “인벤토리 → 플레이북 → 역할(Roles)” 같은 일정한 구조와 흐름을 강제한다.
  • 이 덕분에 누구나 같은 방식으로 코드를 작성하고, 재사용/공유/협업이 쉬워진다.

YAML 기반

  • YAML(Yet Another Markup Language)은 사람이 읽기 쉬운 데이터 표현 방식.
  • Ansible은 이 YAML 문법을 사용해서 자동화 시나리오(플레이북)를 작성.
  • 예를 들어 쉘 스크립트라면 apt install nginx라고 쓰는 걸, Ansible에서는 이렇게 YAML로 표현한다:
 
- name: Install nginx
  apt:
    name: nginx
    state: present

사람이 읽어도 명확하고, Ansible 엔진도 해석할 수 있다.

 

정리

자동화 코드를 YAML 형식으로 작성하고,
Ansible이 이를 해석해 서버나 네트워크 장비에 자동으로 적용해주는 구조화된 틀

 

 

CI 단계: 스크립트 문법 검사 + 시뮬레이션

1) 누가 해주는 건가?

CI 서버 / 파이프라인 툴이 맡음

  • Jenkins
  • GitLab CI/CD
  • GitHub Actions
  • Azure DevOps Pipelines
    이런 툴들이 Git과 연동되어 “코드 push → 자동 검사 → 리포트”를 해준다.

 

2) 문법 검사(Static Check)는 어떻게 하나?

 

CI 서버가 정해둔 스크립트(테스트 스크립트) 를 실행해서 오류를 잡아준다.
예를 들어 네트워크 YAML/Playbook이면:

  • ansible-lint → Ansible Playbook 규칙 검사
  • yamllint → YAML 문법 에러 확인
  • Python 스크립트라면 pylint 나 flake8 같은 코드 검사기 사용

 

3) 시뮬레이션은 어떻게 하나?

여기도 CI 서버가 툴을 실행시킴.

  • Cisco pyATS: 실제 장비 config를 가상으로 돌려서 예상 동작 확인
  • Batfish: 네트워크 정책(ACL, 라우팅) 시뮬레이션
  • Container 기반 테스트: 실제 IOSv, NX-OSv 같은 가상 장비 이미지를 띄워서 미리 config 적용

즉,  git push 한 순간,
→ CI 서버가 “lint → 시뮬레이션 테스트 → 결과 리포트”까지 자동으로 실행

 

4) 결과 확인은 누가?

  • CI 서버가 Slack, 이메일, GitLab/GitHub 페이지에서 “Pass / Fail” 을 알려줌
  • 실패하면 CD 단계(실제 배포)로는 안 넘어감 → 안전장치 역할

5) 비유

네가 시험 답안(Git commit)을 제출하면,

  • 문법 검사기는 맞춤법 검사기
  • 시뮬레이터는 모의고사 채점기
  • CI 서버는 자동 채점 시스템

'DevNet > 기초 학습' 카테고리의 다른 글

vSphere  (0) 2025.09.04
RESTCONF API로 인터페이스 및 관리 IP 수집 실습  (0) 2025.09.03
API  (4) 2025.09.01
데이터 형식  (3) 2025.08.29
Git 기본 개념 정리  (0) 2025.08.27