JDBC와 JPA의 차이
JDBC(Java Database Connectivity)와 JPA(Java Persistence API) 둘 다 Java에서 데이터베이스와 상호작용하는 데 사용되지만, 접근 방식과 개발 편의성에서 큰 차이가 있다.
JDBC
JDBC는 Java에서 데이터베이스와 직접 연결하여 SQL 쿼리를 실행할 수 있도록 하는 저수준 API이다.
- 직접 SQL 작성:
- 개발자가 SQL 쿼리를 직접 작성하고 실행해야 한다.
- 저수준 API:
- 데이터베이스 연결, 쿼리 실행, 결과 처리 등을 명시적으로 작성.
- 데이터베이스 종속성:
- 특정 DBMS(SQL 문법 등)에 종속적일 수 있다.
- 코드 반복성:
- 연결 관리, 자원 해제 등의 코드가 반복적으로 작성된다.
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 대신 객체를 사용해 데이터베이스를 관리한다.
- 객체 중심 접근:
- SQL 대신 엔티티 객체를 사용해 데이터베이스 작업 수행.
- 자동화된 작업:
- 데이터베이스 매핑, 쿼리 생성, 연결 관리 등을 프레임워크가 자동으로 처리.
- 데이터베이스 독립성:
- 애플리케이션 로직과 데이터베이스 관련 로직 분리.
- 추상화:
- 코드가 더 간결하며, 객체 중심으로 설계 가능.
- 엔티티와 영속성 컨텍스트:
- 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를 활용한 저수준 커스터마이징이 필요할 수도 있다.
'spring > 그 외 알게 된 것' 카테고리의 다른 글
| 왜 System.out 대신 Logger를 사용해야 할까? (0) | 2024.06.25 |
|---|---|
| jar와 war (0) | 2024.06.25 |
| URI 와 URL은 뭐가 다를까 (0) | 2024.06.18 |
| 백엔드에서 API의 의미; 왜 API개발자라고 할까 (0) | 2024.06.17 |
| JDBC들어가기전 용어 정리 (0) | 2024.06.15 |