JDBC vs JPA

황인우·2025년 2월 14일

한창 스프링부트로 프로젝트 만들다가

과제 테스트에서 JDBC가 나와서 당황했다.

관련 내용들 다시한번 정리하고 감!


1. JDBC (Java DataBase Connectivity)

import java.sql.*;

public class JdbcExample {
    public static void main(String[] args) {
        String url = "jdbc:mysql://localhost:3306/mydatabase"; // DB 주소
        String user = "root";  // DB 사용자명
        String password = "password";  // DB 비밀번호

        String query = "SELECT id, name FROM category";

        try (
            Connection conn = DriverManager.getConnection(url, user, password); // 1. DB 연결
            Statement stmt = conn.createStatement();  // 2. SQL 실행 객체 생성
            ResultSet rs = stmt.executeQuery(query)  // 3. SQL 실행 및 결과 가져오기
        ) {
            while (rs.next()) {  // 4. 결과 반복 처리
                int id = rs.getInt("id");
                String name = rs.getString("name");
                System.out.println("ID: " + id + ", Name: " + name);
            }
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }
}
  • DriverManager : 데이터베이스 연결을 생성하는 클래스
  • Connection : DB 연결을 나타내는 객체
  • Statement : SQL을 실행하는 객체
  • ResultSet : SQL 실행 결과를 저장하는 객체

2. JDBC 순서

  1. 데이터베이스 연결 ( DriverManager, Connection )
  2. 쿼리 실행 ( Statement )
  3. 결과 반환 ( ResultSet )
  4. 리소스 해제 ( close() )

3. 리소스 해제

JDBC에서 데이터베이스 연결, SQL 실행, 결과 같은 리소스는

사용 후 반드시 close() 하지 않으면 메모리나 연결에서 문제가 생길 수 있다.


원래는 직접 각각 close() 해야하는데 이러면 다양한 문제가 생길 수 있음.


그래서 자바 7부터는 try-with-resources 를 통해 처리할 수 있음.

try ( // 여기에 적은 부분에 대해서 자동 close()
    Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/mydb", "user", "password");
    Statement stmt = conn.createStatement();
    ResultSet rs = stmt.executeQuery("SELECT * FROM category")
) {
    while (rs.next()) {
        System.out.println(rs.getString("name"));
    }
} catch (SQLException e) {
    e.printStackTrace();
}

4. JPA

그동안 프로젝트를 만들면서 생각없이, 당연하게 적용해왔던 JPA..

1) JPA (Java Persistence API, 자바 영속성 API)

자바 객체를 데이터베이스와 매핑해서 다룰 수 있도록 정해진 표준 명세.

2) Hibernate

JPA 자체는 동작에 대한 명세이기에 단독으로 사용할 수 없고

JPA를 구현한 구현체, 프레임워크가 필요한데

그 중 가장 많이 사용되는 Hibernate.

3) Spring Data

Spring Data는 데이터 저장소(데이터베이스, NoSQL, 캐시 등)에 쉽게 접근할 수 있도록 도와주는 스프링의 데이터 접근 계층 프레임워크로 Hibernate를 쉽게 사용할 수 있도록 도와준다.

// CRUD 메서드 자동 구현
public interface UserRepository extends JpaRepository<User, Long> {
	// 메서드 이름으로 쿼리 생성
    List<User> findByName(String name); 
    
    // @Query 로 직접 쿼리 작성
    @Query("SELECT u FROM User u WHERE u.email = :email")
User findByEmail(@Param("email") String email);

}

이것들을 가능하게 하는 것이 Spring Data JPA.

그래서 스프링부트에서는 Hibernate를 직접 쓰기보다 Spring Data JPA를 주로 사용.

사실 그동안 계속 직접 사용해왔던건 이쪽인 것이다.

0개의 댓글