Java

Persistence Framework (feat. JDBC)

mintuchel 2024. 12. 14. 20:23

[영속성]

 

永續 = 길 영 + 이을 속

영속성 = DB에 영구적으로 남아있게 하는 특성


영속성은 한자 뜻 그대로 데이터를 영원히 유지시킨다는 뜻이다

자바 프로그램은 기본적으로 RAM에서 실행되기 때문에 프로그램이 종료되면 데이터가 사라짐
하지만 우리가 만든 데이터를 DB(파일, 데이터베이스)에 저장하면 프로그램이 종료되더라도 데이터를 유지할 수 있음

즉, 영속성은 데이터를 저장소(데이터베이스)에 보관하여 프로그램이 종료 후에도 유지하게 해주는 특징임

 


[데이터베이스와 통신하기 위한 JDBC]

 

JDBC는 자바에서 데이터베이스와 통신하기 위한 가장 low-level의 기술이다.

데이터의 영속성, DB에 반영하기 위해 필요한 가장 저수준의 기술이다.

Connection conn = ...
PreparedStatement ps = ...
ResultSet rs = ...
while (rs.next()) {
    Member m = new Member(
        rs.getLong("id"),
        rs.getString("name")
    );
}

 

하지만 JDBC를 위와 같이 직접 사용하면

커넥션 관리, SQL 직접 작성, ResultSet 처리, 객체 매핑 등의

반복적이고 번거로운 코드가 대량으로 발생한다.

 

따라서 코드 싸개 일명 코딩몽키가 되는 경우가 많다.

 

이러한 문제를 해결하기 위해

JDBC를 추상화하여 더 편리하게 사용할 수 있도록 만든 것이

SQL Mapper와 ORM과 같은 영속성 프레임워크이다.

 

즉, JDBC는 영속성 프레임워크가 아니고 가장 저수준의 DB와의 통신을 위한 기술이고

JDBC를 기반으로 만들어진 것이 SQL Mapper와 ORM 이다.

 


[영속성 프레임워크]

 

JDBC 프로그래밍의 복잡함 없이 간단하게 DB와 CRUD 작업을 할 수 있게 도와주는 것

즉, 영속성을 JDBC를 내부적으로 사용하여 더 편리하게 구현할 수 있게 지원해주는 도구이다.

 

JDBC API 위에서 돌아가는 영속성을 보장해주는 도구

라고 생각하면 된다

 

따라서 모든 Persistence Framework내부적으로 JDBC API를 사용한다.

이 프레임워크들이 알아서 JDBC API를 사용하는 코드를 짜주기 때문에 우리가 안짜도 되는 것이다.

 

 


[Persistence Framework의 종류]

 

1. SQL Mapper

 

객체와 SQL문을 매핑

내부에서 JDBC 사용

SQL로 직접 DB 데이터를 다룸

복잡한 쿼리 짜야할때 좋음

 

ex) MyBatis, JDBCTemplate

 

2. ORM

객체와 DB의 데이터를 직접 매핑해주는 것

 

JPA는 인터페이스에 불과. 이를 사용하기 위해 ORM을 지원해주는 구현체를 선택해야한다

그래서 JPA 사용할때는 어떤 JPA 구현체를 사용할 것인지(어떤 ORM framework를 사용할 것인지) 선택해줘야함

ex) Hibernate

 

cf) Hibernate

JPA의 대표 구현체

내부에서 JDBC 사용

간단한 CRUD 쿼리 메서드 제공

복잡한 쿼리는 결국 SQL을 직접 짜야함(native query 말고 JPQL, Querydsl 기술들도 있음)