[SB_BASIC] Spring 개발에서 JDBC, JdbcTemplate, JPA, Spring Data JPA의 특징과 차이점

junghan·2023년 5월 30일
0

SpringBootProject

목록 보기
16/35
post-thumbnail

Spring은 Java 기반의 개발 프레임워크로, 데이터베이스와의 상호 작용을 위해 다양한 옵션을 제공합니다. 이 블로그에서는 Spring 개발에서 자주 사용되는 JDBC, JdbcTemplate, JPA, Spring Data JPA의 특징과 차이점을 예제를 통해 설명하고자 합니다.


JDBC (Java Database Connectivity)

JDBC는 Java 프로그램과 데이터베이스 간의 연결을 가능하게 하는 자바 API입니다. JDBC를 사용하면 개발자는 SQL 쿼리를 직접 작성하고 데이터베이스와의 연결 및 트랜잭션 관리를 수행해야 합니다. JDBC는 데이터베이스와 직접 상호 작용하므로 SQL에 대한 자세한 이해가 필요합니다.

예제

Connection conn = null;
PreparedStatement stmt = null;
ResultSet rs = null;

try {
    conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/mydatabase", "username", "password");
    stmt = conn.prepareStatement("SELECT * FROM customers WHERE age > ?");
    stmt.setInt(1, 18);
    rs = stmt.executeQuery();

    while (rs.next()) {
        String name = rs.getString("name");
        int age = rs.getInt("age");
        System.out.println("Name: " + name + ", Age: " + age);
    }
} catch (SQLException e) {
    e.printStackTrace();
} finally {
    // 자원 해제
    if (rs != null) {
        try {
            rs.close();
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }
    // ...
}

JdbcTemplate

JdbcTemplate은 Spring에서 제공하는 JDBC 기반의 템플릿 클래스입니다. JdbcTemplate은 JDBC 작업을 더 간단하게 처리할 수 있도록 도와주며, 연결 및 트랜잭션 관리를 자동으로 처리합니다. 개발자는 SQL 쿼리를 직접 작성하지만, 반복적인 작업을 줄일 수 있고 예외 처리도 간소화됩니다.

예제

@Autowired
private JdbcTemplate jdbcTemplate;

public List<Customer> getCustomersByAge(int age) {
    String sql = "SELECT * FROM customers WHERE age > ?";
    return jdbcTemplate.query(sql, new Object[]{age}, new BeanPropertyRowMapper<>(Customer.class));
}

JPA (Java Persistence API)

JPA는 Java 애플리케이션과 관계형 데이터베이스 간의 객체 관계 매핑을 위한 자바 표준 API입니다. JPA는 개발자가 SQL 쿼리를 직접 작성하는 대신, 객체 지향적인 방식으로 데이터베이스에 접근할 수 있도록 합니다. JPA는 ORM (Object-Relational Mapping) 기술의 한 형태로, 개발자가 데이터베이스 스키마에 집중하는 대신 객체 모델에 집중할 수 있도록 도와줍니다.

예제

@Entity
@Table(name = "customers")
public class Customer {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;
    private String name;
    private int age;
    
    // getters and setters
}

public interface CustomerRepository extends JpaRepository<Customer, Long> {
    List<Customer> findByAgeGreaterThan(int age);
}

Spring Data JPA:

Spring Data JPA는 Spring에서 JPA를 사용하기 편리하게 만든 모듈입니다. Spring Data JPA는 JPA 기반의 리포지토리 인터페이스를 제공하여 개발자가 간단한 인터페이스 정의만으로 데이터 액세스를 처리할 수 있도록 합니다. Spring Data JPA는 개발자가 직접 구현하지 않아도 기본적인 CRUD(Create, Read, Update, Delete) 작업을 자동으로 처리합니다.


public interface CustomerRepository extends JpaRepository<Customer, Long> {
    List<Customer> findByAgeGreaterThan(int age);
}


결론

위에서 소개한 JDBC, JdbcTemplate, JPA, Spring Data JPA는 Spring 개발에서 데이터베이스와의 상호 작용을 지원하는 다양한 옵션입니다.

JDBC는 직접 SQL 쿼리를 작성하고 데이터베이스와의 연결 및 트랜잭션 관리를 수행합니다.
JdbcTemplate은 JDBC를 간편하게 사용할 수 있는 Spring의 템플릿 클래스입니다.
JPA는 객체와 데이터베이스 간의 매핑을 위한 Java 표준 API이며, 객체 지향적인 방식으로 데이터베이스에 접근할 수 있게 합니다.
Spring Data JPA는 Spring에서 JPA를 사용하기 편리하게 만든 모듈로, 간단한 인터페이스 정의만으로 데이터 액세스 작업을 처리할 수 있습니다.

개발자는 프로젝트의 요구 사항과 복잡성을 고려하여 적절한 옵션을 선택할 수 있습니다.

profile
42seoul, blockchain, web 3.0

0개의 댓글