13P by xguru 2일전 | ★ favorite | 댓글 6개
  • 비동기(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 알림 지원 : LISTENNOTIFY
  • 세이브포인트(Savepoint)를 활용한 중첩 트랜잭션 지원
  • 런타임에 DB 드라이버를 선택적으로 교체 가능한 AnyPool 지원

개인적으로는 Go의 sqlc 접근 방식을 좋아합니다.

일단 네이티브 쿼리를 짜고 코드를 생성하는 방식입니다.

_bin collation 필드를 String으로 직렬화할 수 없는 이슈가 1년넘게 고쳐지고 있지 않아서 프로덕션용으로 사용하기엔 무리가 있습니다. 심지어 회귀 이슈라서 많은 사용자나 라이브러리들이 0.7버전에 머물러 있습니다.

일단 고치긴 한 것 같은데 1년 가까이 걸리긴 했네요

이슈 링크 부탁드려도 될까요? 좀 찾아봤는데 찾기 힘들어서요.

SQLx - Rust SQL Toolkit
5년전에 한번 공유했었는데요. 그동안 꽤 많은 변화가 있었습니다.

이제 컴파일 타임에 실제 DB와 연동해서 검증이 가능해졌고,
tokio/async-std/actix 까지 호환되며,
커넥션 풀, 중첩 트랜잭션, AnyPool 등 실전에서 쓸만한 기능과 테스트가 강화되어 대규모 서비스에도 적용이 가능한,
ORM 없이 SQL을 직접 사용하는 프로젝트에 추천할만한 프로젝트가 되었습니다.

그리고 sqlx 를 통해서 ORM을 구현한 SeaORM, Welds 같은 프로젝트도 생겨났고요
그외에 쿼리 빌더인 SeaQuery 나 웹 어플리케이션 프레임워크인 SQLPage 같은 것도 있네요