맨위로가기

아파치 스리프트

"오늘의AI위키"는 AI 기술로 일관성 있고 체계적인 최신 지식을 제공하는 혁신 플랫폼입니다.
"오늘의AI위키"의 AI를 통해 더욱 풍부하고 폭넓은 지식 경험을 누리세요.

1. 개요

아파치 스리프트는 다양한 프로그래밍 언어 간의 통신을 위한 소프트웨어 프레임워크이다. 클라이언트와 서버 생성을 위한 완전한 스택을 제공하며, 서비스 정의로부터 코드를 생성하여 통신한다. 여러 프로토콜(TBinaryProtocol, TCompactProtocol, TJSONProtocol, TSimpleJSONProtocol)과 전송 방식(TSimpleFileTransport, TFramedTransport, TMemoryTransport, TSocket, TZlibTransport)을 지원하며, 차단, 비차단, 멀티스레딩 서버 등 다양한 서버 인프라를 포함한다. 스리프트는 C++로 작성되었지만, 다양한 언어로 코드를 생성할 수 있으며, 간결한 라이브러리와 낮은 오버헤드를 특징으로 한다.

더 읽어볼만한 페이지

  • 페이스북 소프트웨어 - HHVM
    HHVM은 페이스북에서 개발한 PHP 및 Hack 언어 실행 엔진으로, JIT 컴파일을 통해 높은 성능을 제공하며 웹 개발 분야에 새로운 가능성을 제시했다.
  • 페이스북 소프트웨어 - 페이스북 메신저
    페이스북 메신저는 2008년 페이스북 채팅으로 시작하여 2011년 독립적인 모바일 앱으로 출시된 페이스북의 인스턴트 메시징 서비스로, 다양한 기능 추가와 논란 속에서도 꾸준히 성장하여 2020년에는 메신저 룸을 출시하고 COVID-19 팬데믹 기간 동안 메시지 트래픽이 크게 증가했다.
  • 원격 프로시저 호출 - D-Bus
    D-Bus는 2002년에 시작된 프로세스 간 통신 시스템으로, 시스템 버스와 세션 버스를 통해 정보 공유, 모듈성, 권한 격리를 제공하며, 일대일 요청-응답 및 발행/구독 통신 방식을 지원한다.
  • 원격 프로시저 호출 - DCE/RPC
    DCE/RPC는 분산 컴퓨팅 환경에서 원격 프로시저 호출을 가능하게 하는 프로토콜로, 오픈 소프트웨어 재단에서 개발되었으며, 다양한 운영체제와 환경에서 사용된다.
  • 데이터 직렬화 포맷 - XML
    XML은 태그 중첩 방식 구문을 사용하는 범용 언어로서, 인터넷을 통한 구조화된 문서 및 데이터 공유를 용이하게 하고, 웰 폼 및 유효 XML 문서 개념을 통해 구문 정확성을 검사하며, 데이터 교환 등 다양한 분야에서 널리 사용된다.
  • 데이터 직렬화 포맷 - S-표현식
    S-표현식은 Lisp 구문에서 소스 코드와 데이터를 표현하는 기본 구조로, 원자와 `(x . y)` 형태의 표현식으로 정의되며, 이진 트리 표현, 다양한 데이터 형식 지원, 그리고 여러 분야에서 활용된다.
아파치 스리프트 - [IT 관련 정보]에 관한 문서
개요
아파치 스리프트 로고
종류원격 프로시저 호출 프레임워크
라이선스아파치 라이선스 2.0
웹사이트아파치 스리프트 공식 웹사이트
개발
원저자메타 플랫폼스
개발자아파치 소프트웨어 재단
릴리스
최신 안정화 버전0.21.0
최신 안정화 릴리스 날짜2024년 9월 9일
기술 정보
운영 체제해당 없음
프로그래밍 언어액션스크립트
C
C#
C++
D
Dart
Delphi
Erlang
Go
Haskell
하세
Java
자바스크립트
Node.js
OCaml
Perl
PHP
Python
Rust
Scala
스몰토크
저장소
깃허브 저장소Thrift repository

2. 아키텍처

아파치 스리프트 API 클라이언트/서버 아키텍처


Thrift는 클라이언트와 서버 생성을 위한 완전한 스택을 포함한다.[9] 윗부분은 Thrift 정의로부터 생성된 코드이다. 이 파일로부터 서비스는 클라이언트 및 프로세서 코드를 생성한다. 내장된 유형과 달리 생성된 데이터 구조는 생성된 코드의 결과로 전송된다. 프로토콜과 전송 계층은 런타임 라이브러리의 일부이다. Thrift를 사용하면 서비스를 정의하고 코드를 다시 컴파일하지 않고도 프로토콜과 전송을 변경할 수 있다. 클라이언트 부분 외에도 Thrift는 차단, 비차단 및 멀티스레드 서버와 같은 서버 인프라를 포함한다. 스택의 기본 I/O 부분은 다른 프로그래밍 언어에 따라 다르게 구현된다.[9]

2. 1. 프로토콜



Thrift는 클라이언트와 서버 생성을 위한 완전한 스택을 포함하며, 서비스 정의로부터 생성된 코드를 통해 통신한다.[9] 프로토콜과 전송 계층은 런타임 라이브러리의 일부이며, 서비스를 재컴파일하지 않고도 변경 가능하다.[9]

Thrift는 다양한 프로토콜을 지원한다:[9]

  • TBinaryProtocol: 공간 효율성에 최적화되지 않았지만 텍스트 프로토콜보다 빠른 바이너리 형식이다.
  • TCompactProtocol: 더 간결한 바이너리 형식이다.
  • TJSONProtocol: 데이터 인코딩에 JSON을 사용한다.
  • TSimpleJSONProtocol: JSON을 사용하며 메타데이터를 삭제하는 쓰기 전용 프로토콜이다. 스크립트 언어로 구문 분석하는 데 적합하다.[10]


지원되는 전송 방식은 다음과 같다.

  • TSimpleFileTransport: 파일에 기록한다.
  • TFramedTransport: 비차단 서버 사용 시 필요하며, 길이 정보가 앞에 오는 프레임 단위로 데이터를 전송한다.
  • TMemoryTransport: I/O용 메모리를 사용한다.
  • TSocket: 전송에 차단 소켓 I/O를 사용한다.
  • TZlibTransport: zlib를 사용하여 압축을 수행하며, 다른 전송과 함께 사용된다.


Thrift는 서버 인프라도 제공하는데, 여기에는 차단, 비차단, 멀티스레드 서버 등이 포함된다.[9] Thrift는 C++로 작성되었지만, 다양한 프로그래밍 언어에 대한 코드를 생성할 수 있다.

2. 2. 전송

아파치 스리프트는 다음과 같은 전송 방식을 지원한다.[9]

  • TSimpleFileTransport: 파일에 기록한다.
  • TFramedTransport: 비차단 서버를 사용할 때 필요하며, 길이 정보가 앞에 오는 프레임 단위로 데이터를 전송한다.
  • TMemoryTransport: I/O용 메모리를 사용한다.
  • TSocket: 전송에 차단 소켓 I/O를 사용한다.
  • TZlibTransport: zlib를 사용하여 압축을 수행하며, 다른 전송과 함께 사용된다.


2. 3. 서버

[9]는 클라이언트와 서버 생성을 위한 완전한 스택을 포함하며, 서비스는 클라이언트 및 프로세서 코드를 생성한다. 내장된 유형과 달리 생성된 데이터 구조는 생성된 코드의 결과로 전송된다. 프로토콜과 전송 계층은 런타임 라이브러리의 일부이며, Thrift를 사용하면 서비스를 정의하고 코드를 다시 컴파일하지 않고도 프로토콜과 전송을 변경할 수 있다. 스택의 기본 I/O 부분은 다른 프로그래밍 언어에 따라 다르게 구현된다.[9]

Thrift는 다음과 같은 여러 서버를 제공한다.[9]

  • TSimpleServer: 표준 차단 I/O를 사용하는 단일 스레드 서버이다.
  • TThreadedServer: 연결당 하나의 스레드 모델과 표준 차단 I/O를 사용하는 멀티스레드 서버이다.
  • TThreadPoolServer: 스레드 풀과 표준 차단 I/O를 사용하는 멀티스레드 서버이다.
  • TNonblockingServer: 비차단 I/O를 사용하는 멀티스레드 서버이다. (Java 구현은 NIO 채널을 사용한다). TFramedTransport는 이 서버와 함께 사용해야 한다.

3. 스리프트 서비스 생성

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

```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 findAll()

}

```

스리프트는 이 정의 정보로부터 코드를 생성한다. 예를 들어, 자바에서 `PhoneType`은 `Phone` 클래스 내에서 `enum`이 된다.

3. 1. 서비스 정의 파일 예시

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

```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 findAll()

}

```

스리프트는 이 정의 정보로부터 코드를 생성한다. 예를 들어, 자바에서 `PhoneType`은 `Phone` 클래스 내에서 `enum`이 된다.

4. 특징

아파치 스리프트는 SOAP 등 유사 프레임워크보다 낮은 오버헤드를 갖는 언어 간 직렬화를 지원한다. 간결하고 명료한 라이브러리를 제공하며, XML 설정 파일이 불필요하다. 언어 바인딩이 이해하기 쉬운데, 예를 들어 Java에서는 `ArrayList`을, C++에서는 `std::vector`을 사용한다.

애플리케이션 레벨 와이어 포맷과 직렬화 레벨 와이어 포맷이 명확하게 분리되어 있어 각각 개별적으로 변경이 가능하다. 바이너리, HTTP 호환 및 컴팩트 바이너리 등이 지정된 직렬화 스타일이다. Caml 웹 서비스를 통해 확장이 가능하며, 빌드 의존성 및 비표준화된 소프트웨어를 포함하지 않아 소프트웨어 라이선스 호환성이 높다.

참조

[1] 웹사이트 Apache Thrift - Downloads https://thrift.apach[...] 2024-09-27
[2] 웹사이트 Installing and using Apache Cassandra With Java Part 4 (Thrift Client) http://www.sodeso.nl[...] Sodeso – Software Development Solutions 2011-03-30
[3] 웹사이트 Apache Thrift: Introduction http://jnb.ociweb.co[...] 2011-04-11
[4] 웹사이트 ThriftRequirements https://cwiki.apache[...] 2024-06-22
[5] 웹사이트 Using Thrift with Cappuccino http://blog.parallel[...] parallel48's posterously luscious blog 2011-08-12
[6] 웹사이트 Apache Thrift: Code Generation http://jnb.ociweb.co[...] 2011-04-12
[7] 간행물 Thrift: Scalable Cross-Language Services Implementation http://thrift.apache[...]
[8] 웹사이트 LibraryFeatures https://wiki.apache.[...] 2016-04-21
[9] 웹사이트 Apache Thrift: Introduction http://jnb.ociweb.co[...] 2011-04-11
[10] 웹사이트 Developer Friendly Thrift Request Logging http://stevenskelton[...] 2014-07-03
[11] 웹인용 Apache Thrift - Downloads https://thrift.apach[...] 2023-03-17
[12] 웹인용 Installing and using Apache Cassandra With Java Part 4 (Thrift Client) http://www.sodeso.nl[...] Sodeso – Software Development Solutions 2011-03-30
[13] 웹인용 Apache Thrift: Introduction http://jnb.ociweb.co[...] Object Computing Inc. – An Open Solutions Company 2011-04-11
[14] 웹사이트 Thrift Requirements http://wiki.apache.o[...]
[15] 웹사이트 Using Thrift with Cappuccino http://blog.parallel[...] parallel48's posterously luscious blog 2011-08-12
[16] 웹인용 Apache Thrift: Code Generation http://jnb.ociweb.co[...] Object Computing Inc. – An Open Solutions Company 2011-04-12
[17] 간행물 Thrift: Scalable Cross-Language Services Implementation http://thrift.apache[...]
[18] 웹인용 LibraryFeatures - Thrift Wiki https://wiki.apache.[...] 2016-04-21



본 사이트는 AI가 위키백과와 뉴스 기사,정부 간행물,학술 논문등을 바탕으로 정보를 가공하여 제공하는 백과사전형 서비스입니다.
모든 문서는 AI에 의해 자동 생성되며, CC BY-SA 4.0 라이선스에 따라 이용할 수 있습니다.
하지만, 위키백과나 뉴스 기사 자체에 오류, 부정확한 정보, 또는 가짜 뉴스가 포함될 수 있으며, AI는 이러한 내용을 완벽하게 걸러내지 못할 수 있습니다.
따라서 제공되는 정보에 일부 오류나 편향이 있을 수 있으므로, 중요한 정보는 반드시 다른 출처를 통해 교차 검증하시기 바랍니다.

문의하기 : help@durumis.com