
JPA는 여러 데이터베이스와 상호 작용할 수 있도록 설계된 유연한 기술입니다. 이것이 가능한 이유는 JPA의 "방언(Dialect)" 기능 덕분입니다. 방언은 특정 데이터베이스의 고유한 특성과 규칙을 반영한 것입니다.
예를 들어봅시다!!
다양한 데이터베이스들은 같은 기능에도 서로 다른 데이터 타입이나 함수명, 명령어를 사용합니다.
MySQL에서는 VARCHAR를 사용하면 오라클에서는 VARCHAR2를 사용하고,
문자열 자르기 함수로는 SQL에서 SUBSTRING()을, 오라클에서는 SUBSTR()을 사용합니다.
페이징 쿼리의 경우도 MySQL은 LIMIT, 오라클은 ROWNUM을 사용합니다.
JPA 사용자로서는 이런 차이를 걱정할 필요가 없습니다.
왜냐하면 JPA의 방언 기능이 이런 데이터베이스 간의 차이점을 자동으로 처리해주기 때문입니다.
JPA를 사용하려면, 먼저 'persistence.xml'의 설정 정보를 바탕으로 엔티티 매니저 팩토리를 초기화해야 합니다.
이렇게 초기화된 팩토리는 애플리케이션 전반에 걸쳐 단 한 번만 생성되어야 합니다. 엔티티 매니저 팩토리를 통해 엔티티 매니저를 생성하면, 이를 사용하여 데이터베이스의 데이터를 조작할 수 있습니다.
EntityManagerFactory emf = Persistence.createEntityManagerFactory("jpabook");
EntityManager em = emf.createEntityManager();
또한 JPA에서 데이터를 조작할 때는 항상 트랜잭션 내에서 수행되어야 합니다.
JPQL은 JPA의 쿼리 언어로, 엔티티 객체에 직접 쿼리를 수행합니다.
즉, 데이터베이스의 구조나 테이블을 고려할 필요 없이 객체에 직접 쿼리를 날릴 수 있습니다. 이는 코드의 간결성과 유지 보수성을 향상시킵니다.
JPA는 반복적인 코드 작성을 줄여주고, JDBC API의 복잡성을 감추며, SQL 쿼리를 자동으로 생성해줍니다. 이 모든 기능은 개발자의 생산성 향상에 크게 기여합니다. 하지만 이러한 편리함은 JPA가 제공하는 수많은 기능 중 일부일 뿐입니다.
JPA는 데이터베이스와의 상호 작용을 훨씬 간단하고 효과적으로 만들어줍니다. 그러므로 많은 개발자들이 JPA를 선호하게 되는 것입니다.