𝗛𝗼𝘄 𝘁𝗼 𝗨𝘀𝗲 𝗖𝘂𝘀𝘁𝗼𝗺 𝗦𝗤𝗟𝗶𝘁𝗲 𝗘𝘅𝘁𝗲𝗻𝘀𝗶𝗼𝗻𝘀 𝗶𝗻 𝗖𝗮𝗽𝗮𝗰𝗶𝘁𝗼𝗿
표준 SQLite는 대부분의 작업에 충분합니다. 하지만 때로는 그 이상의 기능이 필요할 때가 있습니다.
특정 언어를 위한 커스텀 토크나이저(tokenizer)가 필요할 수도 있고, 커스텀 수학 함수나 특수한 텍스트 처리 기능이 필요할 수도 있습니다. 이를 '로드 가능한 확장 기능(loadable extensions)'이라고 합니다.
Capacitor SQLite 플러그인은 Android와 iOS에서 이러한 기능을 지원합니다.
확장 기능을 사용하는 이유는 무엇인가요?
- 커스텀 FTS5 토크나이저: 검색을 위한 텍스트 분할 방식을 제어할 수 있습니다.
- 커스텀 SQL 함수: 데이터와 가까운 곳에서 복잡한 로직을 실행할 수 있습니다.
구현 방식은 플랫폼마다 다릅니다.
Android
Android 시스템 SQLite는 확장 기능을 직접 로드하는 것을 지원하지 않습니다. 반드시 requery 백엔드를 사용해야 합니다.
variables.gradle파일에서requery옵션을 활성화합니다.build.gradle파일에 JitPack 저장소를 추가합니다.- 각 CPU 아키텍처에 맞는 네이티브 라이브러리(
.so파일)로 C 코드를 컴파일합니다. - 이 파일들을
jniLibs폴더에 넣습니다. - 데이터베이스를 열 때
androidExtensions옵션을 사용합니다.
iOS
iOS 앱은 런타임에 동적 라이브러리를 로드할 수 없습니다. 확장 기능을 정적으로 링크해야 합니다.
- C 소스 파일을 Xcode 프로젝트에 추가합니다.
- 해당 파일에
-DSQLITE_CORE컴파일러 플래그를 설정합니다. - 브릿징 헤더(bridging header)에
init함수를 선언합니다. AppDelegate에서sqlite3_auto_extension을 사용하여 확장 기능을 등록합니다.
확장 기능을 위한 C 코드는 동일하게 유지됩니다. 빌드 및 등록 단계만 달라집니다.
로드되면 커스텀 확장 기능은 내장된 SQLite 기능과 똑같이 작동합니다. 새로운 토크나이저나 함수를 SQL 문에서 즉시 사용할 수 있습니다.
커스텀 확장 기능을 사용하면 모바일 데이터베이스 내에서 네이티브 코드의 강력한 기능을 활용할 수 있습니다.
Source: https://dev.to/capawesome/how-to-use-custom-sqlite-extensions-in-capacitor-l5k