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)

프로젝트의 요구사항에 가장 적합한 방식을 선택할 수 있다.