[java] 자바에서의 ORM과 JDBC 비교

이번 글에서는 자바 어플리케이션에서 데이터베이스와의 상호작용을 위해 사용되는 두 가지 주요 기술인 ORM(Object-Relational Mapping)과 JDBC(Java Database Connectivity)에 대해 비교해보겠습니다.

JDBC(Java Database Connectivity)

JDBC는 자바 어플리케이션과 데이터베이스 간의 연결을 제공하는 자바 API입니다. JDBC를 사용하면 데이터베이스에 SQL 쿼리를 보내고, 결과를 받아와서 애플리케이션에서 처리할 수 있습니다. 여기서 개발자가 SQL 쿼리를 직접 작성해야 하며, 데이터베이스와의 연결, 트랜잭션 관리, 예외 처리 등을 모두 직접 구현해야 합니다.

아래는 JDBC를 사용한 데이터베이스 연동의 간단한 예시입니다.

import java.sql.*;

public class JDBCTutorial {
    public static void main(String[] args) {
        String url = "jdbc:mysql://localhost:3306/mydatabase";
        String username = "username";
        String password = "password";

        try (Connection conn = DriverManager.getConnection(url, username, password);
             Statement stmt = conn.createStatement();
             ResultSet rs = stmt.executeQuery("SELECT * FROM users")) {
            while (rs.next()) {
                System.out.println(rs.getString("username") + "\t" + rs.getString("email"));
            }
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }
}

ORM(Object-Relational Mapping)

반면에 ORM은 객체 지향 프로그래밍 언어(예: 자바)와 관계형 데이터베이스 간의 데이터를 변환하는 기술입니다. ORM 프레임워크를 사용하면 데이터베이스와의 상호작용을 객체 지향적으로 다룰 수 있으며, SQL 쿼리를 직접 작성하지 않아도 됩니다. 개발자는 데이터베이스 테이블을 객체로 매핑하여 데이터를 다룰 수 있습니다.

다음은 ORM 프레임워크인 Hibernate를 사용한 데이터베이스 연동 예시입니다.

public class User {
    private String username;
    private String email;
    // getters and setters
}

public class HibernateTutorial {
    public static void main(String[] args) {
        SessionFactory sessionFactory = new Configuration().configure().buildSessionFactory();
        Session session = sessionFactory.openSession();

        List<User> users = session.createQuery("FROM User", User.class).list();
        for (User user : users) {
            System.out.println(user.getUsername() + "\t" + user.getEmail());
        }

        session.close();
        sessionFactory.close();
    }
}

결론

JDBC와 ORM은 각각의 장단점이 있습니다. JDBC를 사용하면 SQL에 대한 직접적인 제어가 가능하고, ORM은 객체 지향적인 코드를 작성할 수 있어 유지보수와 생산성 측면에서 이점을 가집니다. 개발자는 프로젝트의 요구사항과 특성에 따라 적합한 기술을 선택하여 사용해야 합니다.