[DB] Spring에서의 데이터베이스 처리: JDBC vs JPA
⭐ JDBC란?
JDBC(Java Database Connectivity)는 Java에서 데이터베이스에 접근하기 위한 API입니다. 즉, Java 프로그램이 데이터베이스와 소통할 수 있게 해주는 도구입니다. JDBC를 사용하면 SQL 쿼리를 직접 작성하여 데이터베이스에 접근하고, 데이터를 가져오거나 수정할 수 있습니다.
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
public class JdbcExample {
public static void main(String[] args) {
String url = "jdbc:mysql://localhost:3306/mydb"; // 데이터베이스 URL
String user = "username"; // 사용자 이름
String password = "password"; // 비밀번호
try {
// 1. 데이터베이스 연결
Connection conn = DriverManager.getConnection(url, user, password);
// 2. SQL 문장 생성
Statement stmt = conn.createStatement();
String sql = "SELECT * FROM users"; // users 테이블에서 모든 데이터 조회
// 3. 쿼리 실행
ResultSet rs = stmt.executeQuery(sql);
// 4. 결과 처리
while (rs.next()) {
System.out.println("ID: " + rs.getInt("id") + ", Name: " + rs.getString("name"));
}
// 5. 자원 해제
rs.close();
stmt.close();
conn.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
⭐ JPA란?
JPA(Java Persistence API)는 객체 지향 프로그래밍에서 데이터베이스와의 상호작용을 보다 쉽게 만들어주는 표준 API입니다. JPA는 ORM(Object-Relational Mapping)을 기반으로 하며, Java 객체와 데이터베이스의 테이블 간의 매핑을 자동으로 처리해줍니다.
import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.EntityTransaction;
import javax.persistence.Persistence;
@Entity
public class User {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String name;
// 기본 생성자, getters, setters
public User() {}
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
public class JpaExample {
public static void main(String[] args) {
EntityManagerFactory emf = Persistence.createEntityManagerFactory("my-persistence-unit");
EntityManager em = emf.createEntityManager();
EntityTransaction transaction = em.getTransaction();
try {
// 1. 트랜잭션 시작
transaction.begin();
// 2. 사용자 객체 생성
User user = new User();
user.setName("John Doe");
// 3. 데이터베이스에 객체 저장
em.persist(user); // INSERT 쿼리가 자동으로 실행됨
// 4. 트랜잭션 커밋
transaction.commit();
System.out.println("User saved with ID: " + user.getId());
} catch (Exception e) {
if (transaction.isActive()) {
transaction.rollback(); // 오류 발생 시 롤백
}
e.printStackTrace();
} finally {
// 5. 자원 해제
em.close();
emf.close();
}
}
}
✅ JPA의 추상화
JPA는 높은 수준의 추상화를 제공합니다. 즉, SQL 쿼리문을 직접 작성하지 않고도 객체를 통해 데이터베이스에 접근할 수 있게 해줍니다.
이 덕분에 개발자는 데이터베이스의 세부 사항에 신경 쓰지 않고도 비즈니스 로직에 집중할 수 있습니다.
User user = new User();
user.setName("John");
entityManager.persist(user); // DB에 자동으로 INSERT
✅ JDBC와 JPA의 차이점
- SQL vs 객체: JDBC는 SQL 쿼리를 직접 작성해야 하지만, JPA는 객체를 통해 데이터베이스에 접근합니다.
- 추상화 수준: JDBC는 낮은 수준의 API로, 세부적인 설정이 필요합니다. 반면, JPA는 높은 수준의 추상화를 제공하여 개발의 복잡성을 줄여줍니다.
- 유지보수: JPA를 사용하면, 데이터베이스의 구조가 변경되더라도 객체 매핑만 수정하면 되므로 유지보수가 용이합니다. JDBC는 쿼리문을 직접 수정해야 할 수 있습니다.
🚩 결론
JDBC와 JPA는 Java에서 데이터베이스와 상호작용하는 두 가지 주요 방법입니다.
JDBC는 SQL 쿼리를 직접 작성해야 하며, 저수준의 데이터베이스 접근을 제공합니다.
반면, JPA는 ORM을 통해 객체 지향적인 방식으로 데이터베이스와 소통할 수 있게 해주어, 개발자가 비즈니스 로직에 집중할 수 있도록 도와줍니다.
두 기술은 각각의 장단점이 있으므로, 프로젝트의 요구사항과 상황에 맞게 적절한 방법을 선택하는 것이 중요합니다. 이러한 이해를 바탕으로 더 효율적인 데이터베이스 관리를 할 수 있기를 바랍니다!