Kotlin Exposed
Kotlin Exposed
개요
Exposed는 JetBrains가 개발한 Kotlin용 경량 SQL 라이브러리로이다.
특징
- 타입 안정적인 DSL(Domain Specific Language)을 제공한다.
- ORM(Object-Relational Mapping) 스타일로 쿼리를 작성할 수 있다.
- JDBC 및 R2DBC 드라이버를 지원한다.
- 트랜잭션 관리, 마이그레이션 등 다양한 기능을 제공한다.
- 공식적으로 H2, MySQL, MariaDB, Oracle, PostgreSQL, SQL Server, SQLite 데이터베이스를 지원한다.
- kotlin 타입 활용 가능하여 컴파일 시점에 타입 오류를 알 수 있다.
- DSL, DAO 를 모두 제공해서 용도에 맞게 적합한 것을 선택할 수 있다.
- 코루틴 호환성: 비동기 프로그래밍을 지원해서 블로킹 작업을 효율적으로 처리할 수 있다.
- Exposed는 내부적으로 JDBC를 사용해서 DB와 통신하고, JDBC는 전통적인 blocking API 이므로 DB 작업을 수행할 때 해당 작업이 완료될 때까지 스레드가 블로킹된다. 따라서 Exposed 자체는 non-blocking API를 제공하지 않지만 코루틴과 함께 사용할 경우 코루틴의 Dispatcher를 활용해서 블로킹 작업을 적절한 스레드 풀에서 실행하도록 관리할 수 있고, 이를 통해 메인 스레드를 차단하지 않고도 DB 작업을 할 수 있다.
데이터베이스 접근 방식
Exposed는 두 가지 레벨의 데이터베이스 access를 제공한다.
- SQL을 매핑 한 DSL(Domain Specific Language) 방식
- SQL 과 유사한 형태로 쿼리를 작성할 수 있어서 익숙한 SQL 개념을 사용하면서도 kotlin 이 제공하는 타입 안정성의 이점을 얻을 수 있다.
- 경량화한 DAO(Data Access Object) 방식
- 전통적인 ORM 프레임워크인 Hibernate와 유사하게 객체지향적 접근 방식을 제공한다.
- 객체 중심으로 DB 엔티티를 다루고, 테이블을 클래스로 표현하므로 DB 레코드를 직접 객체로 매핑할 수 있다.
// DSL 방식
val users = UsersTable.select { UsersTable.age greater 20 }
// DAO 방식
val user = User.findById(1)
프로젝트의 요구사항에 가장 적합한 방식을 선택할 수 있다.