Rust 기반의 PyO3를 사용한 파이썬 데이터베이스 연동 방법

이번 블로그 포스트에서는 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