{{위키데이터 속성 추적}}
{{소프트웨어 정보
| name = 아파치 스리프트
| logo = Apache Thrift logo.svg
| screenshot =
| caption =
| collapsible =
|원저자 = [[메타 (기업)|메타 플랫폼스]]
| developer = [[아파치 소프트웨어 재단]]
| latest_release_version = 0.18.1
| latest_release_date = {{시작 날짜와 나이|2023|03|01|df=yes}}<ref>{{웹 인용|url=https://thrift.apache.org/download|title=Apache Thrift - Downloads|access-date=17 March 2023}}</ref>
| latest_preview_version =
| latest_preview_date =
| operating_system =
| programming_language =
| genre = [[원격 프로시저 호출]] 프레임워크
| license = [[아파치 라이선스]] 2.0
| website = {{URL|//thrift.apache.org/}}
}}
[[파일:Apache Thrift architecture.png|섬네일|아파치 스리프트 API 클라이언트/서버 구조]]
'''스리프트'''(Thrift)는 [[인터페이스 정의 언어]]이자 [[바이너리 프로토콜|이진 통신 프로토콜]]<ref>{{웹 인용
| accessdate = 2011-03-30
| location = http://www.sodeso.nl/
| publisher = Sodeso – Software Development Solutions
| title = Installing and using Apache Cassandra With Java Part 4 (Thrift Client)
| quote = Thrift is a separate Apache project which is a binary communication protocol
| url = http://www.sodeso.nl/?p=251
| archive-date = 2010-08-15
| archive-url = https://web.archive.org/web/20100815022825/http://www.sodeso.nl/?p=251
}}</ref>로서 수많은 언어를 위한 [[서비스 (시스템 아키텍처)|서비스]]의 정의 및 생성에 사용된다.<ref>{{웹 인용
| accessdate = 2011-04-11
| author = Andrew Prunicki
| location = http://www.ociweb.com/
| publisher = Object Computing Inc. – An Open Solutions Company
| title = Apache Thrift: Introduction
| quote = Through a simple and straightforward Interface Definition Language (IDL), Thrift allows [users] to define and create services which are both consumable by and serviceable by numerous languages. Using code generation, Thrift creates a set of files which can then be used for creating clients and/or servers. In addition to interoperability, Thrift can be very efficient through a unique serialization mechanism that is efficient in both time and space.
| url = http://jnb.ociweb.com/jnb/jnbJun2009.html
| archive-date = 2011-07-23
| archive-url = https://web.archive.org/web/20110723051326/http://jnb.ociweb.com/jnb/jnbJun2009.html
| url-status = 
}}</ref> [[원격 프로시저 호출]](RPC) 프레임워크를 형성하며 [[페이스북]]에서 "스케일링이 가능한 언어 간 서비스 개발"을 위해 개발된 것이다. [[크로스 플랫폼]] 서비스 빌드를 위해소프트웨어 스택을 코드 생명 엔진과 결합하고 있으며 이로써
[[액션스크립트]], [[C (프로그래밍 언어)|C]], [[C++]],<ref>[http://wiki.apache.org/thrift/ThriftRequirements Thrift Requirements], see [https://issues.apache.org/jira/browse/THRIFT-1123 this issue] for Windows support</ref> [[C 샤프|C#]], [[카푸치노 (응용 프로그램 개발 프레임워크)|카푸치노]],<ref>Fred Potter, [http://blog.parallel48.com/using-thrift-with-cappuccino Using Thrift with Cappuccino] {{webarchive|url=https://web.archive.org/web/20110812154611/http://blog.parallel48.com/using-thrift-with-cappuccino |date=2011-08-12 }}, parallel48's posterously luscious blog, 10 June 2010.</ref> [[코코아 (API)|코코아]], [[델파이]], [[얼랭]], [[Go (프로그래밍 언어)|Go]], [[하스켈]], [[자바 (프로그래밍 언어)|자바]], [[Node.js]], [[오브젝티브-C]], [[OCaml]], [[펄]], [[PHP]], [[파이썬]], [[루비 (프로그래밍 언어)|루비]], [[스몰토크]]를 포함한 다양한 언어와 프레임워크로 작성된 응용 프로그램들을 연결할 수 있다.<ref>{{웹 인용| accessdate = 2011-04-12| author = Andrew Prunicki| location = http://www.ociweb.com/| publisher = Object Computing Inc. – An Open Solutions Company| title = Apache Thrift: Code Generation| quote = Thrift supports many languages too varying degrees. The complete list is below. Be careful before assuming that just because your language has some support that it supports all of Thrift's features. Python for example, only supports TBinaryProtocol. Cocoa, C++, C#, Erlang, Haskell, Java, OCaml, Perl, PHP, Python, Ruby, and Smalltalk| url = http://jnb.ociweb.com/jnb/jnbJun2009.html| archive-date = 2011-07-23| archive-url = https://web.archive.org/web/20110723051326/http://jnb.ociweb.com/jnb/jnbJun2009.html| url-status = }}</ref> 페이스북에서 개발되었으나 현재는 [[아파치 소프트웨어 재단]]의 [[오픈 소스]] 프로젝트이다. 이 구현체는 2007년 4월 페이스북이 출시한 기술 논문에 기술되었으며 현재 아파치에서 호스팅되고 있다.<ref>Mark Slee, Aditya Agarwal, Marc Kwiatkowski, [http://thrift.apache.org/static/files/thrift-20070401.pdf Thrift: Scalable Cross-Language Services Implementation]</ref><ref>{{웹 인용| title = LibraryFeatures - Thrift Wiki| accessdate = 2016-04-21| url = https://wiki.apache.org/thrift/LibraryFeatures?action=show&redirect=LanguageSupport}}</ref>

== 스리프트 서비스 생성 ==
스리프트는 C++로 작성되어 있으나 수많은 언어를 대상으로 코드를 만들 수 있다. 스리프트 서비스를 만들려면 이를 기술하는 스리프트 파일을 작성한 다음 대상 언어로 코드를 생성한 이후 서버 시작을 위한 일부 코드를 작성하고 클라이언트로부터 이 코드를 호출해야 한다. 아래는 이러한 서술 파일의 코드 예시이다:

<syntaxhighlight lang="thrift">
enum PhoneType {
  HOME,
  WORK,
  MOBILE,
  OTHER
}

struct Phone {
  1: i32 id,
  2: string number,
  3: PhoneType type
}

service PhoneSvc {
  Phone findById(1: i32 id),
  list<Phone> findAll()
}
</syntaxhighlight>

스리프트는 이러한 서술 정보 외에 코드를 생성한다. 이를테면 자바에서 <code>PhoneType</code>는 <code>Phone</code> 클래스 안에 단순한 <code>enum</code>이 된다.

== 같이 보기 ==
* [[아파치 아브로]]
* [[프로토콜 버퍼]]
* [[SDXF]]
* [[GraalVM]]

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

== 외부 링크 ==
* {{공식 웹사이트}}

{{아파치}}
{{데이터 교환}}
{{메타 둘러보기}}

[[분류:응용 계층 프로토콜]]
[[분류:데이터 직렬화 포맷]]
[[분류:프로세스 간 통신]]
[[분류:원격 프로시저 호출]]
[[분류:페이스북 소프트웨어]]
[[분류:아파치 소프트웨어 재단 프로젝트]]