SQLX - 러스트 기반 SQL 툴킷 오픈소스
(github.com/launchbadge)- 비동기(async) 방식의 순수 Rust 기반 SQL Crate로, Rust 매크로를 이용해 DSL 없이 컴파일 타임에 SQL 쿼리 검증 가능
- ORM이 아님! : ORM 없이 SQL을 그대로 활용하고 싶은 프로젝트에 최적
-
PostgreSQL, MySQL, MariaDB, SQLite 등 데이터베이스 지원
- .env 파일에 DATABASE_URL 지정해 손쉽게 컴파일 타임 체크 가능
- Pure Rust 구현(MySQL/MariaDB 드라이버는 100% Rust로 작성. SQLite는 C 라이브러리 연동), unsafe 코드 사용 없이 안전하게 설계되어 신뢰성 높음
- Tokio, async-std, actix 등 주요 Rust 비동기 런타임 및 다양한 TLS 백엔드와 호환되며, 플랫폼 독립적으로 사용할 수 있음
- MIT/Apache 2.0 듀얼 라이선스로, 오픈 소스 및 상업적 프로젝트에 폭넓게 활용 가능
주요 기능
-
sqlx::Pool
을 이용한 커넥션 풀링 - 데이터베이스로부터 데이터를 비동기 Row 스트리밍
- 커넥션별로 자동 쿼리 준비 및 캐싱
- 준비되지 않은(Prepared 아닌) 쿼리도 간단히 실행 가능, 결과는 동일 Row 타입으로 반환
- 지원하는 DB(MySQL, MariaDB, PostgreSQL)에서 TLS 암호화 연결 지원
- 비동기 PostgreSQL 알림 지원 :
LISTEN
과NOTIFY
- 세이브포인트(Savepoint)를 활용한 중첩 트랜잭션 지원
- 런타임에 DB 드라이버를 선택적으로 교체 가능한
AnyPool
지원
_bin collation 필드를 String으로 직렬화할 수 없는 이슈가 1년넘게 고쳐지고 있지 않아서 프로덕션용으로 사용하기엔 무리가 있습니다. 심지어 회귀 이슈라서 많은 사용자나 라이브러리들이 0.7버전에 머물러 있습니다.
SQLx - Rust SQL Toolkit
5년전에 한번 공유했었는데요. 그동안 꽤 많은 변화가 있었습니다.
이제 컴파일 타임에 실제 DB와 연동해서 검증이 가능해졌고,
tokio/async-std/actix 까지 호환되며,
커넥션 풀, 중첩 트랜잭션, AnyPool 등 실전에서 쓸만한 기능과 테스트가 강화되어 대규모 서비스에도 적용이 가능한,
ORM 없이 SQL을 직접 사용하는 프로젝트에 추천할만한 프로젝트가 되었습니다.
그리고 sqlx 를 통해서 ORM을 구현한 SeaORM, Welds 같은 프로젝트도 생겨났고요
그외에 쿼리 빌더인 SeaQuery 나 웹 어플리케이션 프레임워크인 SQLPage 같은 것도 있네요