본문 바로가기
JPA Study

JDBC와 JPA의 관계

by xogns93 2024. 9. 9.

JDBCJPA는 둘 다 자바에서 데이터베이스와 상호작용하는 데 사용되는 기술이지만, 그들의 목적과 수준은 다릅니다. 각각의 관계를 설명하기 위해, 두 기술의 역할과 차이점, 그리고 JPA가 JDBC를 어떻게 사용하는지 살펴보겠습니다.

1. JDBC (Java Database Connectivity)

  • JDBC는 자바에서 데이터베이스와 직접 통신하기 위한 저수준 API입니다.
  • SQL 쿼리를 자바 코드에서 실행하고, ResultSet을 통해 결과를 받아오며, Connection, Statement 등의 객체를 통해 데이터베이스와 상호작용합니다.
  • 자바 애플리케이션에서 데이터베이스에 직접적인 질의(SQL)를 수행하는 가장 기본적인 방법입니다.
  • JDBC의 주요 구성 요소:
    • Connection: 데이터베이스와의 연결을 담당.
    • StatementPreparedStatement: SQL 쿼리를 실행.
    • ResultSet: 쿼리 결과를 처리.
    • SQLException: 예외 처리.

2. JPA (Java Persistence API)

  • JPA는 자바에서 객체 지향 프로그래밍과 관계형 데이터베이스 사이의 매핑을 자동화하기 위한 고수준 API입니다.
  • JPA는 개발자가 직접 SQL 쿼리를 작성하지 않고, 자바 객체를 통해 데이터베이스 작업을 할 수 있게 해줍니다. 즉, 객체와 테이블 간의 매핑을 통해 데이터베이스 작업을 보다 추상화된 방식으로 수행합니다.
  • JPA는 ORM(객체-관계 매핑)을 제공하며, 데이터베이스의 레코드를 자바 객체로 변환하고, 자바 객체를 데이터베이스 레코드로 저장할 수 있게 해줍니다.
  • JPA의 주요 구성 요소:
    • Entity: 데이터베이스 테이블에 매핑되는 자바 클래스.
    • EntityManager: JPA의 핵심 인터페이스로, 엔티티의 라이프사이클을 관리.
    • Query: JPQL(JPA Query Language)을 사용해 데이터 조회.

3. JPA와 JDBC의 관계

  • JPA는 JDBC 위에서 동작합니다. JPA는 저수준의 JDBC API를 사용하여 데이터베이스와 상호작용합니다.
  • JPA를 사용하면 개발자가 직접 JDBC를 다룰 필요가 없으며, 데이터베이스와 상호작용할 때 JPA가 내부적으로 JDBC를 통해 SQL 쿼리를 실행합니다.
  • JPA는 JDBC를 추상화하여 객체 중심의 프로그래밍을 가능하게 하고, 반복적인 JDBC 코드를 줄이면서 더 높은 수준의 프로그래밍을 제공합니다.
  • JDBC는 JPA의 하부 기술로 동작하며, JPA의 EntityManager와 같은 구성 요소는 JDBC를 사용하여 데이터베이스와 실제로 통신합니다.

4. 비교

  • 레벨:
    • JDBC는 저수준 API로, 데이터베이스와의 직접 통신을 담당합니다.
    • JPA는 고수준 API로, 객체와 관계형 데이터베이스 간의 매핑을 담당합니다.
  • 개발 생산성:
    • JDBC는 수동으로 SQL 쿼리를 작성하고 직접 데이터베이스 작업을 처리해야 합니다.
    • JPA는 객체 지향 방식으로 데이터베이스 작업을 처리하므로, 더 간단하고 유지보수가 용이한 코드를 작성할 수 있습니다.
  • 쿼리 작성:
    • JDBC는 직접 SQL을 작성하고 실행합니다.
    • JPA는 객체 중심의 JPQL(Java Persistence Query Language)을 사용하거나 필요한 경우 SQL을 사용할 수 있습니다.
  • 트랜잭션 관리:
    • JDBC는 수동으로 트랜잭션을 관리해야 합니다.
    • JPA는 자동으로 트랜잭션을 관리할 수 있으며, 스프링 같은 프레임워크와 통합하여 더 쉽게 트랜잭션을 제어할 수 있습니다.

5. JPA와 JDBC의 예시

  • JDBC 예시:

    Connection connection = DriverManager.getConnection(url, username, password);
    PreparedStatement stmt = connection.prepareStatement("SELECT * FROM users WHERE id = ?");
    stmt.setInt(1, userId);
    ResultSet rs = stmt.executeQuery();
    
    while (rs.next()) {
        String name = rs.getString("name");
        System.out.println(name);
    }
  • JPA 예시:

    @Entity
    public class User {
        @Id
        private Long id;
        private String name;
        // Getters and Setters
    }
    
    EntityManager em = entityManagerFactory.createEntityManager();
    User user = em.find(User.class, userId);
    System.out.println(user.getName());

6. 정리

  • JDBC는 데이터베이스와 직접 상호작용하기 위한 저수준의 API이며, JPA는 JDBC 위에서 동작하는 고수준의 ORM API입니다.
  • JPA는 개발자가 직접 SQL을 작성하지 않고도 자바 객체를 사용해 데이터베이스와 상호작용할 수 있도록 JDBC를 추상화합니다.
  • JPA를 사용하면 데이터베이스와의 상호작용이 훨씬 간결해지고, 객체 지향적으로 데이터를 처리할 수 있습니다.