IMCAT.DEV
로그인 가입
Kotlin 중급 데이터베이스

Kotlin Kotlin으로 데이터베이스 연결

Kotlin Kotlin으로 데이터베이스 연결 — 중급

Kotlin으로 데이터베이스 연결

1. 도입 (왜 배워야 하는가)

Kotlin으로 데이터베이스 연결을 배우는 것은 현대 소프트웨어 개발에서 매우 중요합니다. 데이터베이스는 애플리케이션의 데이터를 저장하고 관리하는 핵심 요소이며, 이를 통해 사용자에게 필요한 정보를 제공할 수 있습니다. 예를 들어, 쇼핑몰 애플리케이션에서 사용자의 장바구니, 주문 내역, 제품 정보 등을 관리하기 위해 데이터베이스와의 연결이 필수적입니다.

만약 이를 모른다면, 데이터의 영속성이나 활용성을 잃게 되어 실시간 데이터 처리나 사용자 맞춤형 서비스를 구현하는 데 큰 어려움을 겪게 됩니다. 따라서 데이터베이스 연결을 이해하고 활용하는 것은 개발자로서의 기본기이자 경쟁력을 높이는 경로입니다.

2. 핵심 개념 설명

데이터베이스 연결에 대한 핵심 개념은 다음과 같습니다:

  • JDBC (Java Database Connectivity): Java 언어 기반의 데이터베이스 연결 API로, Kotlin도 이를 사용할 수 있습니다. 비유하자면, JDBC는 데이터베이스와의 대화를 위한 통역사입니다.
  • Connection: 데이터베이스와의 연결을 나타내는 객체입니다. 이는 마치 전화선을 연결하는 것과 같습니다.
  • Statement: 데이터베이스에 SQL 쿼리를 실행하기 위한 객체입니다. 이는 전화기에서 전화를 걸기 위해 누르는 버튼과 같습니다.
  • ResultSet: SQL 쿼리의 결과를 나타내는 객체입니다. 이는 누군가가 전화를 받고 응답하는 것과 비슷합니다.
  • 용어설명
    JDBC데이터베이스와 연결하기 위한 API
    Connection데이터베이스와의 연결을 나타내는 객체
    StatementSQL 쿼리를 실행하기 위한 객체
    ResultSet쿼리 결과를 저장하는 객체

    3. 기본 코드 예제

    다음은 Kotlin에서 데이터베이스에 연결하고 데이터를 조회하는 간단한 예제입니다.

    import java.sql.Connection
    import java.sql.DriverManager
    import java.sql.ResultSet
    import java.sql.Statement
    
    fun main() {
        // 데이터베이스 연결 정보 설정
        val url = "jdbc:mysql://localhost:3306/mydatabase"
        val user = "username"
        val password = "password"
    
        // 데이터베이스 연결
        val connection: Connection = DriverManager.getConnection(url, user, password)
    
        // SQL 쿼리 실행을 위한 Statement 객체 생성
        val statement: Statement = connection.createStatement()
    
        // 데이터 조회를 위한 SQL 쿼리 실행
        val resultSet: ResultSet = statement.executeQuery("SELECT * FROM users")
    
        // 결과 출력
        while (resultSet.next()) {
            println("ID: ${resultSet.getInt("id")}, Name: ${resultSet.getString("name")}")
        }
    
        // 자원 해제
        resultSet.close()
        statement.close()
        connection.close()
    }

    실행 결과

    ID: 1, Name: John Doe
    ID: 2, Name: Jane Smith

    코드 설명

    1. import 구문으로 필요한 JDBC 클래스를 가져옵니다.
    2. 데이터베이스 연결 정보를 설정합니다.
    3. DriverManager.getConnection 메서드를 사용하여 데이터베이스에 연결합니다.
    4. createStatement 메서드를 통해 SQL 쿼리를 실행할 수 있는 Statement 객체를 생성합니다.
    5. executeQuery 메서드를 사용하여 SQL 쿼리를 실행하고 결과를 ResultSet 객체에 저장합니다.
    6. while 루프를 통해 결과를 출력합니다.
    7. 자원을 해제하여 메모리 누수를 방지합니다.
    8. 4. 실전 활용 예제

      예제 1: 쇼핑몰에서 장바구니 구현

      사용자가 장바구니에 담은 상품 정보를 데이터베이스에 저장하고 조회할 수 있습니다.

      fun addToCart(userId: Int, productId: Int) {
          // 데이터베이스 연결 코드 생략
          val statement: Statement = connection.createStatement()
          statement.executeUpdate("INSERT INTO cart (user_id, product_id) VALUES ($userId, $productId)")
          statement.close()
      }

      이 코드는 사용자가 장바구니에 상품을 추가할 때 호출됩니다.

      예제 2: 사용자 정보 업데이트

      사용자가 자신의 정보를 수정할 때 데이터베이스에 반영할 수 있습니다.

      fun updateUser(userId: Int, newName: String) {
          // 데이터베이스 연결 코드 생략
          val statement: Statement = connection.createStatement()
          statement.executeUpdate("UPDATE users SET name='$newName' WHERE id=$userId")
          statement.close()
      }

      이 코드는 사용자가 이름을 변경할 때 호출됩니다.

      5. 흔한 실수와 주의사항

      실수 1: SQLException 처리 미흡

      잘못된 코드

      val connection: Connection = DriverManager.getConnection(url, user, password)

      올바른 코드

      try {
          val connection: Connection = DriverManager.getConnection(url, user, password)
      } catch (e: SQLException) {
          e.printStackTrace()
      }

      SQLException 처리 없이 연결할 경우 예외가 발생해 프로그램이 중단될 수 있습니다.

      실수 2: 자원 해제 누락

      잘못된 코드

      // 자원 해제를 하지 않음

      올바른 코드

      resultSet.close()
      statement.close()
      connection.close()

      자원 해제를 하지 않으면 메모리 누수가 발생할 수 있습니다.

      6. 정리

    9. Kotlin에서 데이터베이스 연결은 애플리케이션의 필수 기능입니다.
    10. JDBC를 사용하여 데이터베이스와 연결하고 쿼리를 실행할 수 있습니다.
    11. 데이터 처리 시 자원 해제를 반드시 수행해야 합니다.
    12. SQLException 처리를 통해 안정성을 높여야 합니다.
    13. 다음에 학습하면 좋은 주제:

    14. Kotlin의 Coroutine과 데이터베이스 비동기 처리
    15. ORM(Object-Relational Mapping) 사용법 (예: Exposed)
    16. 데이터베이스 트랜잭션 관리하기