{{위키데이터 속성 추적}}
{{소프트웨어 정보
| name                   = 퍼핏
| logo                   = Puppet_Logo.svg
| screenshot             = 
| caption                = 
| collapsible            = 
| author                 = 
| developer              = [[퍼핏 (기업)|퍼핏]]
| released               = 2005년
| frequently updated     = 예
| programming language   = [[루비 (프로그래밍 언어)|루비]]
| operating system       = [[리눅스]], [[유닉스 계열]], [[마이크로소프트 윈도우]]
| platform               = 
| size                   = 
| language               = 
| status                 = 
| genre                  = {{ubl|[[소프트웨어 형상 관리]]|[[코드형 인프라스트럭처]]}}
| license                = [[아파치 라이선스|아파치]] (2.7.0 이상), [[GNU GPL|GPL]] (이전 버전)
| website                = {{URL|http://www.puppet.com/}}
}}
컴퓨팅에서 '''퍼핏'''(Puppet)은 [[오픈 소스]] [[소프트웨어 형상 관리]] 도구의 하나이다. 수많은 [[유닉스 계열]] 시스템들뿐 아니라 [[마이크로소프트 윈도우]]에서도 실행되며 [[시스템 구성]]을 기술하기 위한 자체 선언 언어를 포함하고 있다.

퍼핏은 2005년 루크(Luke Kanies)가 설립한 [[퍼핏 (기업)|퍼핏]]사가 개발하고 있다. [[루비 (프로그래밍 언어)|루비]]로 작성되어 있으며 버전 2.7.0까지는 [[GNU GPL]] 하의 자유 소프트웨어로, 그 이후부터는 [[아파치 라이선스]] 2.0으로 출시된다.<ref>{{웹 인용 |url= http://docs.puppetlabs.com/guides/faq.html |title= Puppet Frequently Asked Questions |publisher= Puppet Labs |accessdate= 10 March 2010 |보존url= https://web.archive.org/web/20160320040505/https://docs.puppetlabs.com/guides/faq.html |보존날짜= 2016-03-20 |url-status= dead }}</ref>

== 구조 ==
퍼핏은 보통 [[클라이언트-서버]] 구조를 따른다. 클라이언트는 에이전트라 부르고, 서버는 마스터라 부른다. 독립적인 애플리케이션으로 사용할 수도 있다.

퍼핏 마스터는 하나 이상의 서버 및 시스템(퍼핏 에이전트의 설치 구성에 필요)에 설치된다. 퍼핏 에이전트는 서버와 통신하며 구성 명령을 가져온다. 그 뒤 에이전트는 시스템 구성을 적용하고 서버에 상태 보고를 보낸다.<ref>{{웹 인용|url=https://docs.puppet.com/puppet/4.6/reference/architecture.html|title=Overview of Puppet's architecture — Documentation — Puppet|website=docs.puppet.com|access-date=2016-09-14|보존url=https://web.archive.org/web/20161001232528/https://docs.puppet.com/puppet/4.6/reference/architecture.html|보존날짜=2016-10-01|url-status=dead}}</ref> 장치들은 [[데몬 (컴퓨팅)|데몬]]으로서 실행이 가능하며, [[cron]] 잡으로 주기적으로 호출하거나 필요할 때마다 수동으로 실행할 수 있다.

퍼핏 구조는 다음으로 이루어진다:
* '''구성 언어''': 퍼핏에서 구성할 항목은 "자원"(resource)이라 부른다. 퍼핏이 [[선언형 프로그래밍|선언형 언어]]를 준수하므로 어떠한 조치를 자원에 수행해야 하는지를 지정하여야 한다. 이러한 조치는 모든 자원에 대해 3가지 사항(유형, 제목, 또 상태를 구성해야 하는 속성 목록)을 선언함으로써 구현된다. 퍼핏 코드는 매니페스트(manifest)라는 파일에 작성된다. 이것들은 서버에 저장되며 각 클라이언트에 대한 구성 명령을 포함한다.<ref name=":0">{{서적 인용|title=Pro Puppet|last=Krum, Hevelingen, Kero, Turnbull, McCune|first=|publisher=Apress|year=|isbn=978-1430260400|location=|pages=|via=}}</ref> 메니페스트 파일의 작성 형식은 아래와 같이 기술한다.
<syntaxhighlight lang="puppet">
type { 'title':
  attribute => value
}
</syntaxhighlight>
예:
<syntaxhighlight lang="puppet">
user { 'harry':
  ensure => present,
  uid    => '1000',
  shell  => '/bin/bash',
  home   => '/var/tmp'
}
</syntaxhighlight>
* '''자원 추상화''': 퍼핏은 플랫폼 의존성에 대해 걱정하지 않고 여러 플랫폼에서 자원을 구성하는 기능을 제공함으로써 자원 추상화를 제공한다.
* '''트랜잭션''': 다음의 실행 단계가 있다:
# 모든 에이전트는 팩터(Facter)를 거쳐 마스터로 송신한다.
# 퍼핏은 자원 및 자원의 상호 의존성 목록을 그래픽컬한 표현으로 관리한다. 즉, 모든 클라이언트에 대한 '카타롤그'(catalog)에 구성해야 하는 순서를 기술한다. 마스터는 이 카탈로그를 클라이언트로 송신한다.
# 시스템이 이미 존재하는 구성은 실제 상태(actual state)로 간주하며, 메니페스트 파일에 언급된 구성은 원하는 상태(desired state)로 간주한다. 에이전트는 실제 상태가 원하는 상태와 동일하지 않은 경우에만 시스템에 구성을 적용한다. 상태 변경 적용을 위한 절(clause)은 필요한 경우에만 멱등(idempotency)으로 간주하며 이는 퍼핏의 주된 기능이다.
# 구성 적용 결과를 서버로 송신한다.

== 같이 보기 ==
{{위키공용분류}}
* [[셰프 (소프트웨어)]]

== 각주 ==
{{각주}}

== 외부 링크 ==
* {{공식 웹사이트}}
* [https://github.com/puppetlabs GitHub account]
* [https://www.youtube.com/user/PuppetLabsInc Official Puppet Labs YouTube Channel]

{{토막글|소프트웨어}}

[[분류:2005년 소프트웨어]]
[[분류:크로스 플랫폼 자유 소프트웨어]]
[[분류:루비로 작성된 자유 소프트웨어]]
[[분류:아파치 라이선스 소프트웨어]]
[[분류:2005년 설립된 소프트웨어 기업]]