본문 바로가기

spring/그 외 알게 된 것

JDBC와 JPA

JDBC와 JPA의 차이

JDBC(Java Database Connectivity)와 JPA(Java Persistence API) 둘 다 Java에서 데이터베이스와 상호작용하는 데 사용되지만, 접근 방식과 개발 편의성에서 큰 차이가 있다.

JDBC

JDBC는 Java에서 데이터베이스와 직접 연결하여 SQL 쿼리를 실행할 수 있도록 하는 저수준 API이다.

  1. 직접 SQL 작성:
    • 개발자가 SQL 쿼리를 직접 작성하고 실행해야 한다.
  2. 저수준 API:
    • 데이터베이스 연결, 쿼리 실행, 결과 처리 등을 명시적으로 작성.
  3. 데이터베이스 종속성:
    • 특정 DBMS(SQL 문법 등)에 종속적일 수 있다.
  4. 코드 반복성:
    • 연결 관리, 자원 해제 등의 코드가 반복적으로 작성된다.
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;

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

        try (Connection connection = DriverManager.getConnection(url, username, password)) {
            String sql = "SELECT * FROM users WHERE id = ?";
            PreparedStatement statement = connection.prepareStatement(sql);
            statement.setInt(1, 1);

            ResultSet resultSet = statement.executeQuery();
            while (resultSet.next()) {
                System.out.println("ID: " + resultSet.getInt("id"));
                System.out.println("Name: " + resultSet.getString("name"));
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

2. JPA

JPA는 Java 애플리케이션에서 데이터베이스와 상호작용하는 고수준 ORM(Object-Relational Mapping) API이다.
SQL 대신 객체를 사용해 데이터베이스를 관리한다.

 

  1. 객체 중심 접근:
  • SQL 대신 엔티티 객체를 사용해 데이터베이스 작업 수행.
  1. 자동화된 작업:
    • 데이터베이스 매핑, 쿼리 생성, 연결 관리 등을 프레임워크가 자동으로 처리.
  2. 데이터베이스 독립성:
    • 애플리케이션 로직과 데이터베이스 관련 로직 분리.
  3. 추상화:
    • 코드가 더 간결하며, 객체 중심으로 설계 가능.
  4. 엔티티와 영속성 컨텍스트:
    • JPA는 엔티티 객체와 데이터베이스를 동기화하며, 1차 캐시를 사용해 성능 최적화.
import jakarta.persistence.*;

@Entity
public class User {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private int id;
    private String name;

    // Getters and Setters
}

public class JPAExample {
    public static void main(String[] args) {
        EntityManagerFactory emf = Persistence.createEntityManagerFactory("my-persistence-unit");
        EntityManager em = emf.createEntityManager();

        em.getTransaction().begin();

        // 데이터 저장
        User user = new User();
        user.setName("John Doe");
        em.persist(user);

        // 데이터 조회
        User foundUser = em.find(User.class, 1);
        System.out.println("ID: " + foundUser.getId());
        System.out.println("Name: " + foundUser.getName());

        em.getTransaction().commit();
        em.close();
        emf.close();
    }
}

 

 

 

JDBC와 JPA의 주요 차이

항목 JDBC JPA

레벨 저수준 API 고수준 ORM API
데이터 접근 방식 SQL 직접 작성 객체 중심의 데이터 접근
개발 편의성 많은 보일러플레이트 코드 필요 코드 간결, 개발 생산성 향상
데이터베이스 독립성 특정 DBMS에 종속될 가능성 있음 데이터베이스 독립성 보장
자동화 수동 쿼리 실행 및 매핑 쿼리 생성 및 매핑 자동화
캐싱 없음 1차 캐시, 영속성 컨텍스트를 통한 성능 최적화
종속성 표준 Java API JPA 구현체(Hibernate, EclipseLink 등) 필요

 

 

JDBC:

  • SQL을 직접 작성하며, 데이터베이스와 직접 상호작용이 필요할 때 적합.
  • 간단한 프로젝트나 DB 구조가 자주 변하지 않는 경우에 유리.

JPA:

  • 객체 중심 설계와 데이터베이스 독립성을 추구하는 현대 애플리케이션에 적합.
  • 복잡한 데이터 구조를 관리하거나 개발 생산성을 높이고자 할 때 사용.

실제 프로젝트에서는 JPA를 사용하는 경우가 많지만, 상황에 따라 JDBC와 병행하거나 JDBC를 활용한 저수준 커스터마이징이 필요할 수도 있다.