이번 블로그 포스트에서는 Rust 언어를 기반으로 개발된 PyO3 라이브러리를 사용하여 파이썬과 데이터베이스를 연동하는 방법에 대해 알아보겠습니다. PyO3는 Rust와 CPython 사이의 상호 운용성을 제공하는 도구로, Rust로 작성된 모듈을 파이썬에서 사용할 수 있게 해줍니다.
1. PyO3 설치하기
먼저, PyO3를 설치해야 합니다. Rust 언어와 Cargo 빌드 시스템이 미리 설치되어 있어야 합니다. 아래 명령을 터미널에 실행하여 PyO3를 설치합니다.
$ cargo install maturin
2. 프로젝트 설정하기
PyO3로 데이터베이스 연동을 위한 프로젝트를 설정해보겠습니다. 새로운 디렉토리를 만들고, Cargo.toml
파일을 열어 아래의 내용으로 프로젝트 의존성을 설정합니다.
[package]
name = "my_database_connector"
version = "0.1.0"
edition = "2018"
[dependencies.pyo3]
version = "0.15"
features = ["extension-module"]
[dependencies.pyo3-macros]
version = "0.15"
3. PyO3 모듈 작성하기
이제 PyO3를 사용하여 데이터베이스 연동에 필요한 코드를 작성해봅시다. 먼저, lib.rs
파일을 열고 아래의 내용으로 작성합니다.
use pyo3::prelude::*;
use pyo3::types::IntoPyDict;
#[pymodule]
fn my_module(py: Python, m: &PyModule) -> PyResult<()> {
m.add_function(wrap_pyfunction!(connect, m)?)?;
Ok(())
}
#[pyfunction]
fn connect(url: &str) -> PyResult<String> {
// 데이터베이스 연결 로직 작성
let result = format!("Successfully connected to {}", url);
Ok(result)
}
#[pymodule]
fn my_database_connector(py: Python, m: &PyModule) -> PyResult<()> {
m.add_function(wrap_pyfunction!(connect, m)?)?;
Ok(())
}
#[pymodule]
fn my_database_connector(py: Python, m: &PyModule) -> PyResult<()> {
m.add_function(wrap_pyfunction!(connect, m)?)?;
Ok(())
}
4. 빌드 및 설정 파일 생성하기
터미널에서 다음 명령을 실행하여 Rust 코드를 빌드합니다.
$ maturin develop
빌드 과정에서 Cargo.toml
파일의 [lib]
섹션에 있는 name
값을 확인합니다. 이 값으로 생성된 Python 모듈의 이름이 결정됩니다.
그리고 프로젝트 루트 디렉토리에 pyproject.toml
파일을 생성하고 아래의 내용을 추가합니다.
[build-system]
requires = ["maturin"]
build-backend = "maturin"
5. 파이썬에서 사용하기
이제 파이썬에서 PyO3로 작성된 데이터베이스 모듈을 사용해보겠습니다. 다음과 같이 파이썬 코드를 작성하여 실행해봅시다.
import my_database_connector
result = my_database_connector.connect('http://example.com/db')
print(result)
해당 코드를 실행하면, Successfully connected to http://example.com/db
와 같은 결과가 출력될 것입니다.
이제 Rust 기반의 PyO3를 사용하여 파이썬과 데이터베이스를 연동하는 방법에 대해 알아보았습니다. PyO3를 사용하면 Rust의 성능과 파이썬의 편의성을 동시에 누릴 수 있습니다. 더 자세한 사항은 PyO3 문서를 참고하시기 바랍니다.
#rust #pyo3