자동화&툴 리뷰

pyinfra — 에이전트 없는 인프라 자동화, 순수 Python으로

노동1호 2026. 6. 17. 02:02

pyinfra — 에이전트 없는 인프라 자동화, 순수 Python으로

2026년 6월, 인프라 자동화 도구 pyinfra가 주목받고 있다. 에이전트 설치 없이 SSH만으로 수천 대 서버를 멱등적으로 제어할 수 있다는 점이 개발자들 사이에서 화제다. 긱뉴스에 따르면 동일 워크로드에서 Ansible보다 6배 빠르다고 알려져 있다.

pyinfra python infrastructure automation ssh

pyinfra는 Python 네이티브 인프라 자동화 도구다. 서버에 데몬이나 상태 파일을 두지 않고, gevent와 SSH 기반 동시 실행으로 명령을 분산 처리한다. YAML에 제어 흐름을 인코딩하는 대신, 실제 Python의 루프와 조건문을 그대로 사용한다. 멱등성, 속도, 코드 중심 구성을 강조한다.

설치와 5분 quickstart

설치 명령은 단순하다.

$ uv tool install pyinfra

요구 조건은 MIT 라이선스, Python 3.10 이상, no agents, zero config다. 5분 quickstart 문서를 따라가면 첫 호스트에 배포를 완료할 수 있다. uv 패키지 매니저가 없으면 pip로도 설치 가능하다.

빠른 시작 절차는 네 단계다. 첫째, pyinfra를 설치한다. 둘째, 인벤토리 파일에서 대상 호스트를 정의한다. 셋째, deploy.py에 작업을 Python으로 작성한다. 넷째, --dry 옵션으로 변경 사항을 미리 확인한 뒤 실행한다.

핵심 기능: 동시성, 멱등성, 속도

pyinfra는 세 가지 핵심 가치를 내건다. 첫째, gevent와 SSH 기반 동시 실행이다. 둘째, 모든 작업이 멱등성(idempotent)을 갖는다. 셋째, 동일 워크로드에서 Ansible 대비 6배 빠른 속도를 제공한다.

배포 코드 예시는 apt, files, systemd 작업을 Python 코드로 불러온다.

from pyinfra.operations import apt, files, systemdapt.packages(packages=["nginx", "certbot"],update=True,)files.template(src="templates/nginx.conf.j2",dest="/etc/nginx/sites-enabled/api",)systemd.service("nginx", reloaded=True)
pyinfra python infrastructure automation ssh

이 코드는 nginx와 certbot 패키지를 설치하고, 템플릿을 배치한 뒤 systemd 서비스를 재로드한다. 8줄로 끝나는 점이 Ansible의 16줄 playbook과 대비된다.

인벤토리와 실행 결과

인벤토리 예시는 23대의 웹 호스트와 2대의 데이터베이스 호스트로 구성된다.

$ pyinfra inventory.py deploy.py --limit web

이 명령은 web 대상만으로 실행을 제한한다. 실행 출력은 인벤토리 로딩, 동시 fact 수집, deploy.py 실행, 요약 순서로 진행된다. 예시 요약은 23개 호스트 성공, 18개 변경, 실패 0개, 총 2.1초를 기록했다.

변경 전 확인은 --dry 옵션으로 수행한다. pyinfra가 적용할 모든 작업의 호스트별 diff를 먼저 보여준다. 실제 실행에서는 결과가 병렬로 스트리밍되어 각 호스트의 변경 수와 실행 시간이 표시된다.

Ansible과 pyinfra 코드 비교

Ansible 예시는 playbook.yml 16줄로 nginx 설치, 템플릿 렌더링, 핸들러 기반 서비스 재로드를 구성한다. pyinfra 예시는 deploy.py 8줄로 같은 흐름을 Python 코드로 작성한다. 코드 길이가 절반으로 줄어든다.

핵심 차이는 네 가지다. 첫째, pyinfra는 files.template 결과의 cfg.will_change가 참일 때만 systemd.service("nginx", reloaded=True)를 실행한다. 둘째, 루프는 루프 그대로 사용하며, 제어 흐름을 YAML에 인코딩하지 않는다. 셋째, diff를 먼저 보고 적용해 예기치 않은 변경을 피한다. 넷째, 작업이 apt.packages, files.template, systemd.service처럼 명사와 동사 형태로 읽혀서 자연스럽다.

pyinfra를 선택하는 여섯 가지 이유

첫째, Just Python이다. YAML과 Jinja-in-YAML 없이 실제 제어 흐름을 Python으로 작성한다. 둘째, Concurrent SSH다. gevent와 SSH 기반으로 동시 실행하며 동일 워크로드에서 Ansible보다 6배 빠르다. 셋째, Diff before apply다. --dry로 모든 변경을 미리 보고 멱등 작업은 재실행 시 no-op이 된다. 넷째, 0 agents다. 호스트에는 shell과 SSH만 필요하며 데몬·상태 파일·컨트롤 플레인이 없다. 다섯째, Scale-ready다. 1개 호스트부터 10,000개 호스트까지 동작한다. 여섯째, Hackable이다. 10줄로 커스텀 작업을 만들 수 있고 docker, lxc, k8s에 연결할 수 있다.

운영자용 가드레일과 결론

pyinfra는 YAML 난장판에서 벗어나고 싶은 운영자에게 매력적인 도구다. 셸 명령 몇 개 실행하려고 서버에 Python을 설치해야 했던 Ansible의 한계에서 벗어난다. 실행 전 현재 상태 기반으로 계획을 만들고, -y를 안 주면 확인을 받는 점이 안전망 역할을 한다. 2026년 6월 기준으로 홈랩부터 대규모 인프라까지 Python 친화적인 자동화를 원하는 팀에 적합하다.