텍스트를 데이터로, 어디서든 어디로든
소개
2024년 3월, SF Unstructured Data Meetup에서 AJ Steers가 Airbyte와 PyAirbyte를 활용해 어디서든 어디로든 텍스트를 데이터로 사용하는 방법에 대해 이야기했습니다. 이는 다양한 플랫폼 전반의 여러 소스에서 구조화 데이터와 비정형 데이터를 모두 통합하고 활용할 수 있음을 의미합니다.
AJ Steers의 발표 YouTube 다시보기 링크: YouTube에서 보기.
AJ Steers는 누구이며, 왜 통합 데이터 통합에 관심을 가져야 할까요?
AJ Steers는 경험 많은 아키텍트, 데이터 엔지니어, 소프트웨어 개발자, 데이터 운영 전문가입니다. 그는 Amazon에서 엔드투엔드 솔루션을 설계했으며, 정량화된 자기 데이터 모델에 대한 비전을 만들었습니다. 현재 그는 Airbyte의 스태프 소프트웨어 엔지니어입니다.
통합 데이터 통합은 다양한 데이터 유형과 소스를 하나의 응집력 있는 시스템으로 병합하여 효율적인 분석과 처리를 가능하게 합니다. 이 역량은 데이터의 잠재력을 최대한 활용하고, 다양한 플랫폼과 애플리케이션 전반에서 원활한 접근과 활용을 보장하는 데 매우 중요합니다. AJ의 표현처럼, “그 어느 때보다도 우리는 활용 가능한 데이터에 둘러싸여 있으며” 이제 핵심은 기회비용입니다. 가치가 있을 수 있다고 생각하는 데이터를 소스에서 가져오는 데 우리에게 얼마나 많은 시간이 있을까요?
그럼 이제 Airbyte를 사용한 AJ의 “어디서든 어디로든, 데이터로서의 텍스트” 발표를 살펴보겠습니다.
Airbyte의 지원 소스 및 대상 확장
지금까지 Airbyte의 초점은 기존의 표 형식 데이터를 원활하게 통합할 수 있도록 신뢰성, 유연한 배포 옵션, 강력한 커넥터 라이브러리를 제공하는 데 있었습니다. 그렇다면 비정형 데이터는 어떨까요? AJ는 지난 6개월 동안 Airbyte 팀이 무엇을 해왔는지에 대해 이야기합니다.
2024년 3월을 기준으로 이전 6개월 동안, Airbyte는 기존의 표 형식 데이터 소스에 더해 비정형 데이터 소스까지 포괄하도록 역량을 확장했습니다. 이는 오늘날 데이터 생태계에서 비정형 데이터의 중요성과 보편성이 커지고 있기 때문입니다. 이러한 확장을 통해 Airbyte는 SQL 유형 및 파일 유형 대상지를 넘어 Milvus와 같은 벡터 데이터베이스 대상지까지 지원하게 되었으며, 다양한 애플리케이션 전반에서 데이터를 효과적으로 활용할 수 있게 되었습니다. Airbyte가 구조화 및 비정형 데이터 소스 모두에 대해 지원하는 일부 커넥터를 살펴보겠습니다.
Airbyte는 350개 이상의 커넥터를 지원하므로 모두 나열할 수는 없습니다. 하지만 위의 AJ가 공유한 슬라이드는 각 소스 및 대상 카테고리별 샘플 커넥터를 보여줍니다. 지금까지 우리는 비정형 데이터와 Airbyte가 이를 지원하기 위해 어떻게 확장하고 있는지에 대해 이야기했습니다. 그렇다면 이러한 데이터의 실제 사례는 무엇일까요?
지금 읽고 있는 이 블로그를 생각해 보세요. 표 형식으로 배열되어 있나요? 이는 행과 열에 깔끔하게 들어맞지 않는 텍스트로 구성된 비정형 데이터의 대표적인 예입니다. 비정형 데이터란 전통적인 행-열 데이터베이스에 존재하지 않는 정보를 의미합니다. 여기에는 텍스트, 이미지, 동영상, 소셜 미디어 게시물과 같은 데이터가 포함됩니다. 아래 슬라이드에서 AJ가 공유한 비정형 데이터의 몇 가지 예를 살펴보겠습니다.
이런 종류의 데이터와 이를 수집하는 데 도움을 주는 Airbyte를 고려할 때, 다양한 커뮤니티는 Airbyte에 대해 서로 다른 기대를 가지고 있습니다.
GenAl 개발자: 다른 생태계 도구 및 패러다임과의 간소화된 통합을 원합니다.
데이터 과학자: 중앙 데이터 웨어하우스와 분리되어 Jupyter notebook에서 실행할 수 있는 라이브러리를 원합니다.
데이터 엔지니어: pipelines-as-code 접근 방식, CI 테스트 파이프라인 실행 기능, 마찰 없는 개발을 원합니다.
개발자: 로컬에서 빌드하고 반복 작업한 다음, 나중에 배포하고 싶어합니다.
이는 우리 모두가 훌륭한 라이브러리, 좋은 상호운용성, 그리고 더 많은 제어권을 원한다는 것을 보여줍니다. 하지만 결국 모든 것은 여러분이 무엇을 원하는지에 달려 있습니다. 우리 중 일부는 코딩하고 제어할 수 있는 것을 원하고, 다른 일부는 덜 기술적으로 사용자 인터페이스를 사용하는 것을 선호합니다. 전통적으로 이는 우리를 완전히 다른 경로로 이끌었습니다. Airbyte는 PyAirbyte를 사용해 Python 코드를 실행하고 작성할 수 있는 누구나, 또는 몇 줄의 코드를 복사해 붙여넣기만 할 수 있는 누구에게나 이러한 장벽을 허물고자 합니다. PyAibyte가 무엇인지와 그 장점을 살펴보겠습니다.
PyAirbyte 소개
PyAirbyte는 Airbyte와 상호작용할 수 있는 인터페이스를 제공하는 Python 라이브러리입니다. 이를 통해 Python을 사용해 Airbyte 인스턴스를 제어하고 관리할 수 있습니다. Airbyte의 힘을 모든 Python 개발자에게 가져다주는 것이라고 생각하면 됩니다.
PyAirbyte의 장점
- 어디서나 실행: PyAirbyte는 어떤 데이터 웨어하우스와도 분리된 상태로 Jupyter notebook에서 실행할 수 있습니다. 즉, 특정 데이터 웨어하우스에 묶인 환경뿐만 아니라 다양한 환경에서 사용할 수 있어, 우리의 필요에 가장 잘 맞는 환경에서 작업할 수 있는 유연성을 제공합니다.
- 가치 실현 시간 단축: PyAirbyte를 사용하면 데이터 파이프라인을 배포하기 전에 로컬에서 빌드하고 반복 작업할 수 있습니다. 이를 통해 파이프라인이 예상대로 작동하는지 테스트하고 개선할 수 있으며, 데이터에서 가치 있는 인사이트를 얻는 데 걸리는 시간을 줄이는 데 도움이 됩니다.
- 빠른 프로토타이핑: PyAirbyte는 사용자 인터페이스나 가입이 필요하지 않으므로, 바로 코드로 데이터 파이프라인 정의를 시작할 수 있습니다. 이는 프로토타이핑 과정을 가속화합니다.
- 유연함: PyAirbyte는 우리 생태계의 도구 및 프레임워크와 함께 사용할 수 있습니다. 즉, 이미 사용 중인 다른 도구와 통합할 수 있어 기존 워크플로와 프로세스에 더 쉽게 통합할 수 있습니다.
이제 몇 가지 단계만으로 Airbyte와 PyAirbyte를 시작하는 방법을 살펴보겠습니다.
UI 및 코드 데모
AJ는 Airbyte의 호스팅 버전(노코드 접근 방식)과 PyAirbyte(최소한의 코드 접근 방식)를 사용해 데이터 소스를 데이터 대상과 통합하는 방법을 보여주는 데모 세션을 자세히 살펴봅니다.
UI 접근 방식 데모
코드를 입력하는 것보다 버튼 클릭을 더 좋아하는 분들에게 UI 접근 방식은 꿈이 현실이 된 것과 같습니다. 좋아하는 비디오 게임의 ‘쉬운 모드’와 같습니다. 이미 Airbyte의 호스팅 버전을 사용해 데이터 소스와 대상을 연결하는 방법을 자세히 다룬 적이 있으므로 여기서는 간략히 다루겠습니다. 링크된 글은 통합 부분을 넘어, 구축된 연결을 사용해 실제 애플리케이션을 만드는 방법까지 보여줍니다.
노코드 접근 방식을 사용해 데이터 소스를 데이터 대상과 연결하는 데에는 네 가지 주요 단계가 있습니다.
Airbyte account에 가입하거나 로그인합니다. 가입하면 14일 체험판이 제공됩니다.
데이터 소스를 구성합니다.
데이터 대상을 구성합니다.
소스와 대상 간의 연결을 생성합니다.
연결이 설정되면 데이터를 사용할 준비가 된 것입니다. 저처럼 코드 괴짜이고 코드 접근 방식을 선호한다면, PyAirbyte가 해결해 줍니다.
코드 접근 방식 데모
세 단계로 PyAirbyte를 사용해 데이터 가져오기
PyAirbyte를 사용해 데이터를 가져오는 과정은 매우 간단합니다.
Step 1:
get_source() 함수를 사용해 source를 생성합니다.
import airbyte as ab
# Check for supported sources
print(ab.get_available_connectors())
# Create the data source we want
source = ab.get_source("source-github")
Airbyte가 지원하는 모든 커넥터를 시각적으로 살펴보려면 지원되는 커넥터 페이지를 확인하세요. 하지만 소스의 커넥터가 지원되지 않는다면 어떻게 해야 할까요? 그렇다면 자체 커스텀 커넥터를 빌드해야 합니다. 걱정하지 마세요. 생각만큼 어렵지 않습니다. Airbyte는 10분 이내에 커넥터를 빌드할 수 있게 해주는 노코드 커넥터 빌더를 제공하므로, 이 가이드를 따라가기만 하면 됩니다.
Step 2:
set_config()로 소스를 구성합니다.
source.set_config(
{
# Replace with your desired repository
"repositories": ["FINCH285/engineering-education"],
"credentials": {
"personal_access_token": ab.get_secret(
"GITHUB_PERSONAL_ACCESS_TOKEN"
)
}
}
)
# Validate the config and credentials
source.check()
이는 소스에서 데이터를 가져오려는 위치와 필요한 인증 자격 증명을 전달하는 것뿐입니다.
Step 3:
read() function을 사용해 데이터를 읽습니다.
# See what streams are avilable from the source
print(source.get_available_streams())
#Pull data rom the steams we choose
read_result = source.read(
streams=['branches', 'collaborators']
)
# Use the interop option
branches_dataframe = read_result["branches"].to_pandas()
branches_sql_table = read_result["branches"].to_sql_table()
branches_lln_docs = read_result["branches"].to_documents()
interop 옵션을 사용하면 가져온 데이터를 사용 사례에 가장 잘 맞는 다양한 데이터 구조로 변환할 수 있습니다. 이것으로 3단계 프로세스가 완료됩니다. 하지만 데이터를 가져오기 위해 세 단계를 독립적으로 따르는 것이 필수는 아닙니다. Airbyte는 동일한 결과를 달성할 수 있는 1단계 프로세스도 지원합니다.
단일 단계에서 PyAirbyte를 사용해 데이터 가져오기
이것은 스피드런 버전입니다. 세 단계를 모두 하나의 단계로 결합하는 방식입니다.
import airbyte as ab
source = ab.get_source(
"source-github",
config={
# Replace with your desired repository
"repositories": ["FINCH285/engineering-education"],
"credentials": {
"personal_access_token": ab.get_secret(
"GITHUB_PERSONAL_ACCESS_TOKEN"
),
},
},
streams=['branches', 'collaborators']
).read()
이 코드는 세 가지 작업을 모두 한 단계에서 수행합니다. 소스를 생성하고, 구성한 다음, 마지막으로 데이터를 읽습니다. 이제 앞서 했던 것처럼 interop 옵션을 사용해 가져온 데이터를 다양한 데이터 구조로 변환할 수 있습니다. 하지만 표 형식 데이터에서 LLM 문서를 생성하려면, 다음 섹션에서 방법을 보여줍니다.
표 형식 데이터에서 LLM 문서 생성하기
데이터를 LangChain과 호환되게 하려면 LLM 문서로 변환해야 합니다. 그런 다음 이러한 문서를 질문 답변, 요약 또는 텍스트 생성과 같은 다양한 자연어 처리 작업에 사용할 수 있습니다.
import rich
from itertools import islice
dataset = source_github.get_documents(
"issues",
title_property="title",
content_properties=["body"],
)
# Grab a few documents (skipping first 2)
documents = list(islice(dataset, 2, 5))
# Print as markdown
for document in documents:
display(rich.markdown.Markdown(document.content))
이 코드는 GitHub 이슈를 가져와 문서로 렌더링합니다. 그런 다음 문서의 제목을 issue의 제목으로 설정하고, 문서 내용은 이슈의 body로 설정됩니다. 이후 rich를 사용해 문서를 markdown 형식으로 콘솔에 출력합니다.
두 가지 선택지가 있으니, 어떤 접근 방식이 가장 적합한지 살펴보겠습니다.
Airbyte와 PyAirbyte 중 선택하기
벡터 스토어에 제로 코드로 접근하고 싶다면 호스팅 버전을 선택하세요. 최소한의 코드로 완전한 제어를 원한다면 PyAirbyte를 선택하세요. AJ는 이론적으로 가상 환경이 지원되는 Python이 실행되는 곳이라면 어디서든 PyAirbyte를 실행할 수 있다고 주장합니다. 어떤 접근 방식이 적합한지 결정하는 데 도움이 되도록 표를 정리했습니다.
| 기준 | Airbyte (UI/Hosted) | PyAirbyte |
| 접근 방식 | 노코드 | 코드/Python |
| 설정 | 간단한 가입 프로세스 | Python 코딩 기술 필요 |
| 사용자 인터페이스 | 사용자 친화적인 인터페이스 제공 | 사용자 인터페이스 없음, 코드 기반 |
| 데이터 통합 | 기존 및 최신 데이터 통합 작업(비정형 데이터, 벡터 데이터베이스 등) 모두에 적합 | 기존 및 최신 데이터 통합 작업(비정형 데이터, 벡터 데이터베이스 등) 모두에 적합 |
| 유연성 | UI에서 제공되는 옵션으로 제한됨 | 매우 유연하며, 다른 Python 도구 및 프레임워크와 통합 가능 |
| 환경 | 호스팅 환경 | 모든 Python 환경에서 실행 가능(예: Jupyter Notebook, 로컬 머신) |
| 배포 | 데이터 파이프라인을 Airbyte의 호스팅 환경에 배포 | 코드 기반 배포는 CI/CD 파이프라인과 통합 가능 |
| 프로토타이핑 | 비기술 사용자 또는 빠른 프로토타이핑에 적합 | 기술 사용자 및 빠른 프로토타이핑에 이상적 |
| 학습 곡선 | 낮은 학습 곡선 | Python 코딩 기술 또는 기본 코딩 기술 필요 |
비교 후에는 계속해서 자신만의 모험을 선택할 수 있습니다.
PyAirbyte의 예정 기능
PyAirbyte는 아직 베타 단계입니다. 따라서 현재로서는 전체 destinations를 지원하지 않으며, 즉 vector stores를 destinations로 갖고 있지는 않지만 이를 LangChain에 전달할 수 있습니다. Aj는 올해 PyAirbyte 팀에 기대해야 할 몇 가지 사항을 공유합니다: PyAirbyte의 다음 단계는 무엇인가요?
2024년 2분기 계획:
Python 3.9 및 3.11 지원 개선
Windows 지원 추가
sources 구성을 위한 API 개선
Airbyte Cloud, OSS 및 Enterprise 버전과의 상호 운용성 활성화
2024년 하반기 계획:
Reverse ETL 지원 추가
Vector Store destinations 지원 추가
Publish-type destinations 지원 추가
피드백을 제공하고 버그를 보고하고 싶다면 PyAirbyte’s GitHub page에 이슈를 여는 것을 고려해 보세요.
결론
노코드 접근 방식을 선호하든 최소 코드 접근 방식을 선호하든, Airbyte와 PyAirbyte는 정형 및 비정형 데이터를 모두 통합하기 위한 강력한 솔루션을 제공합니다. AJ Steers는 이러한 도구들이 데이터 워크플로를 혁신할 잠재력을 잘 보여주었습니다. 더 자세한 정보는 아래 리소스를 확인하고, 어디서든 어디로든 텍스트를 데이터로 활용하는 여정을 시작해 보세요.
추가 리소스
https://zilliz.com/blog/use-milvus-and-airbyte-for-similarity-search-on-all-your-data
https://zilliz.com/blog/zilliz-introduces-upsert-kafka-connector-and-airbyte-integration
https://github.com/airbytehq/quickstarts/tree/main/pyairbyte_notebooks
AJ Steer의 강연 YouTube 다시보기 링크: YouTube에서 강연 보기.
계속 읽기

Why Teams Are Migrating from Weaviate to Zilliz Cloud — and How to Do It Seamlessly
Explore how Milvus scales for large datasets and complex queries with advanced features, and discover how to migrate from Weaviate to Zilliz Cloud.

Announcing the General Availability of Zilliz Cloud BYOC on Google Cloud Platform
Zilliz Cloud BYOC on GCP offers enterprise vector search with full data sovereignty and seamless integration.

Building RAG Pipelines for Real-Time Data with Cloudera and Milvus
explore how Cloudera can be integrated with Milvus to effectively implement some of the key functionalities of RAG pipelines.


