[kotlin] 코틀린에서 Exposed ORM을 사용한 데이터베이스 연동

코틀린은 모던하고 간결한 문법으로 안정적이며 확장성이 뛰어난 프로그래밍 언어입니다. Exposed는 데이터베이스를 쉽게 연동할 수 있는 경량 ORM(Object-Relational Mapping) 라이브러리로 코틀린에서 주로 사용됩니다. 이 블로그 포스트에서는 Exposed ORM을 사용하여 코틀린에서 데이터베이스를 어떻게 연동하는지 살펴보겠습니다.

목차

  1. 개요
  2. 데이터베이스 연결 설정
  3. 테이블 및 데이터 모델 정의
  4. 쿼리 작성
  5. 결과 처리

1. 개요

Exposed는 DSL(Domain-Specific Language)을 사용해 데이터베이스 연동을 위한 코드를 작성할 수 있도록 도와주는 라이브러리입니다. 이를 통해 코틀린 코드로 데이터베이스와 상호작용하는 작업을 간소화하고 가독성을 높일 수 있습니다.

2. 데이터베이스 연결 설정

Exposed를 사용하여 데이터베이스에 연결하려면 Database.connect 메서드를 사용합니다. 아래는 H2 데이터베이스에 연결하는 예제 코드입니다.

import org.jetbrains.exposed.sql.Database

fun main() {
    Database.connect("jdbc:h2:mem:test", driver = "org.h2.Driver", user = "sa", password = "")
}

3. 테이블 및 데이터 모델 정의

테이블과 데이터 모델을 정의하기 위해서는 Table 클래스를 상속받아 테이블을 정의하고 Entity 클래스를 상속받아 데이터 모델을 정의합니다. 아래는 Users 테이블과 해당 데이터 모델을 정의하는 예제 코드입니다.

import org.jetbrains.exposed.sql.Table

object Users : Table("users") {
    val id = integer("id").autoIncrement().primaryKey()
    val name = varchar("name", length = 50)
}

class User(id: EntityID<Int>) : IntEntity(id) {
    companion object : IntEntityClass<User>(Users)
    var name by Users.name
}

4. 쿼리 작성

Exposed를 사용하면 DSL을 활용해 간단하고 가독성 높은 쿼리를 작성할 수 있습니다. 아래는 Users 테이블에서 모든 사용자를 가져오는 쿼리 작성 예제입니다.

import org.jetbrains.exposed.sql.selectAll

fun getUsers(): List<User> {
    return Users.selectAll().map { User(it) }
}

5. 결과 처리

쿼리의 결과를 처리할 때도 Exposed는 간결한 방법을 제공합니다. 예를 들어, 이전 예제의 결과를 JSON 형식으로 반환하는 방법은 다음과 같습니다.

import com.fasterxml.jackson.module.kotlin.jacksonObjectMapper

fun getUsersAsJson(): String {
    val users = getUsers()
    return jacksonObjectMapper().writeValueAsString(users)
}

이처럼 Exposed를 사용하면 코틀린에서 데이터베이스를 간편하게 연동하고 다룰 수 있습니다. 이를 통해 개발자는 보다 짧고 읽기 쉬운 코드를 작성하며, 데이터베이스와의 상호작용을 효율적으로 수행할 수 있습니다.

결론

이러한 방식으로 Exposed ORM 라이브러리를 사용하여 코틀린 언어로 데이터베이스를 쉽게 연동할 수 있습니다. 간단한 DSL을 통해 쿼리를 작성하고 결과를 처리할 수 있으며, 이는 개발자들에게 즐거운 경험을 안겨줄 것입니다.

참고 자료