확장
확장 (Extensions)
DuckDB는 확장을 동적으로 로드할 수 있는 유연한 확장 메커니즘을 갖추고 있어요. 확장을 통해 추가 파일 포맷 지원, 새로운 타입, 도메인 특화 기능 등을 쓸 수 있답니다. 오늘은 확장을 어떻게 나열하고 설치하고 로드하는지 함께 살펴볼까요?
출처: 문서
본문
DuckDB는 확장을 동적으로 로드할 수 있는 유연한 확장 메커니즘을 갖고 있어요. 확장은 추가 파일 포맷 지원, 새로운 타입 도입, 도메인 특화 기능 제공을 통해 DuckDB의 기능을 향상시켜 줄 수 있어요.
확장은 모든 클라이언트(예: Python, R)에서 로드할 수 있어요. Core 및 Community 저장소를 통해 배포되는 확장은 macOS, Windows, Linux에서 빌드되고 테스트돼요. AMD64와 ARM64 두 아키텍처 모두가 모든 운영 체제에서 지원돼요.
확장 나열 (Listing Extensions)
확장 목록을 얻으려면 duckdb_extensions 함수를 사용하세요:
SELECT extension_name, installed, description
FROM duckdb_extensions();
| extension_name | installed | description |
|---|---|---|
| arrow | false | A zero-copy data integration between Apache Arrow and DuckDB |
| autocomplete | false | Adds support for autocomplete in the shell |
| ... | ... | ... |
이 목록은 어떤 확장이 사용 가능한지, 어떤 것이 설치됐는지, 어떤 버전인지, 어디에 설치됐는지 등을 보여줘요. 이 목록에는 사용 가능한 핵심 확장이 대부분 포함되지만 전부는 아니에요. 전체 목록은 별도로 관리하는 [핵심 확장 목록]({% link docs/current/core_extensions/overview.md %})을 참고하세요.
팁 주간 확장 다운로드 통계를 JSON 파일로 제공하는 엔드포인트가 있어요: core extensions, community extensions.
내장 확장 (Built-In Extensions)
DuckDB의 바이너리 배포판에는 몇 가지 내장 확장이 기본 포함되어 있어요. 이들은 바이너리에 정적으로 링크되어 있어 바로 사용할 수 있어요.
예를 들어 내장 [json 확장]({% link docs/current/data/json/overview.md %})으로 JSON 파일을 읽으려면:
SELECT *
FROM 'test.json';
DuckDB 배포판을 가볍게 유지하기 위해 필수적인 몇 가지 확장만 내장되어 있고, 배포판마다 조금씩 달라요. 어떤 확장이 어떤 플랫폼에 내장되어 있는지는 [핵심 확장 목록]({% link docs/current/core_extensions/overview.md %}#default-extensions)에서 문서화되어 있어요.
더 많은 확장 설치 (Installing More Extensions)
내장되지 않은 확장을 DuckDB에서 사용 가능하게 하려면 두 단계가 필요해요:
-
확장 설치 (Extension installation) 는 확장 바이너리를 다운로드하고 메타데이터를 검증하는 과정이에요. 설치 중에 DuckDB는 다운로드한 확장과 일부 메타데이터를 로컬 디렉토리에 저장해요. 이 디렉토리에서 DuckDB는 필요할 때마다 확장을 로드할 수 있게 돼요. 즉 설치가 딱 한 번만 필요하답니다.
-
확장 로드 (Extension loading) 는 바이너리를 DuckDB 인스턴스에 동적으로 로드하는 과정이에요. DuckDB는 로컬 확장 디렉토리에서 설치된 확장을 검색한 뒤 로드해서 그 기능을 사용할 수 있게 해줘요. 즉 DuckDB가 재시작될 때마다 사용하는 모든 확장을 (다시) 로드해야 해요.
확장 설치와 로드는 몇 가지 [제한 사항]({% link docs/current/extensions/installing_extensions.md %}#limitations)의 적용을 받아요.
설치 가능한 확장에 대해 DuckDB가 설치와 로드 단계를 수행하게 하는 방법은 크게 두 가지예요: 명시적(explicitly) 방식과 자동 로드(autoloading) 방식.
명시적 INSTALL과 LOAD
DuckDB에서 확장은 명시적으로 설치하고 로드할 수도 있어요. 자동 로드 불가 확장과 자동 로드 가능 확장 모두 이 방식으로 설치할 수 있어요.
확장을 명시적으로 설치하고 로드하려면 DuckDB에는 전용 SQL 문인 LOAD와 INSTALL이 있어요. 예를 들어
[spatial 확장]({% link docs/current/core_extensions/spatial/overview.md %})을 설치하고 로드하려면:
INSTALL spatial;
LOAD spatial;
이 문장들로 DuckDB는 spatial 확장이 설치되도록 보장한 뒤 (이미 설치되어 있으면 INSTALL 문장을 무시해요), spatial 확장을 LOAD해요 (이미 로드되어 있으면 이것도 무시해요).
확장 저장소 (Extension Repository)
선택적으로 확장을 설치할 저장소를 지정할 수 있는데, INSTALL/FORCE INSTALL 명령에 FROM ⟨repository⟩{:.language-sql .highlight}를 붙이면 돼요.
이 저장소는 [community]({% link community_extensions/index.md %}) 같은 별칭이거나, 작은따옴표 문자열로 제공되는 직접 URL일 수 있어요.
확장을 설치/로드한 뒤에는 duckdb_extensions 함수로 더 많은 정보를 얻을 수 있어요.
확장 자동 로드 (Autoloading Extensions)
DuckDB의 많은 핵심 확장에서는 명시적으로 로드하고 설치할 필요가 없어요. DuckDB에는 확장이 쿼리에서 사용되는 즉시 핵심 확장을 설치하고 로드하는 자동 로드 메커니즘이 있어요. 예를 들어 다음을 실행하면:
SELECT *
FROM 'https://raw.githubusercontent.com/duckdb/duckdb-web/main/data/weather.csv';
DuckDB는 자동으로 [httpfs]({% link docs/current/core_extensions/httpfs/overview.md %}) 확장을 설치하고 로드해요. 명시적인 INSTALL이나 LOAD 문장이 필요 없어요.
모든 확장이 자동 로드될 수 있는 건 아니에요. 이유는 여러 가지가 있어요: 어떤 확장은 실행 중인 DuckDB 인스턴스에 여러 변경을 가해서 자동 로드를 기술적으로 (아직) 불가능하게 만들기도 하고, 다른 확장은 DuckDB에서 동작을 수정하는 방식 때문에 사용자가 명시적으로 옵트인하는 것이 선호되기도 해요.
어떤 확장이 자동 로드될 수 있는지 보려면 [핵심 확장 목록]({% link docs/current/core_extensions/overview.md %})을 확인하세요.
커뮤니티 확장 (Community Extensions)
DuckDB는 서드파티 [커뮤니티 확장]({% link community_extensions/index.md %}) 설치를 지원해요. 예를 들어 [tarfs 커뮤니티 확장]({% link community_extensions/extensions/tarfs.md %})은 다음과 같이 설치할 수 있어요:
INSTALL tarfs FROM community;
커뮤니티 확장은 커뮤니티 멤버가 기여하지만, 중앙 저장소에서 빌드되고 [서명]({% link docs/current/extensions/extension_distribution.md %}#signed-extensions)되며 배포돼요.
확장 업데이트 (Updating Extensions)
내장 확장은 DuckDB 바이너리에 내장되어 있기 때문에 DuckDB 릴리스에 묶여 있지만, 설치 가능한 확장은 업데이트를 받을 수 있고 실제로 받아요. 현재 설치된 모든 확장이 최신 버전인지 확인하려면 다음을 호출하세요:
UPDATE EXTENSIONS;
확장 버전에 대한 자세한 내용은 [Extension Versioning 페이지]({% link docs/current/extensions/versioning_of_extensions.md %})를 참고하세요.
확장 개발 (Developing Extensions)
핵심 확장이 사용하는 것과 같은 API를 확장 개발에도 사용할 수 있어요. 이를 통해 사용자는 DuckDB의 기능을 자신의 도메인에 가장 잘 맞게 확장할 수 있답니다.
확장을 만들기 위한 템플릿은 extension-template 저장소에서 사용할 수 있어요. 이 템플릿에는 자신만의 확장 빌드를 시작하는 방법에 대한 문서도 들어 있어요.
확장 작업 (Working with Extensions)
[설치 지침]({% link docs/current/extensions/installing_extensions.md %})과 [고급 설치 방법 페이지]({% link docs/current/extensions/advanced_installation_methods.md %})를 참고하세요.