JPA에 들어가기 앞서
ORM을 알아야한다.
ORM
ORM이란 객체와 DB의 테이블이 매핑을 이루는 것을 말합니다. (Java 진영에 국한된 기술은 아닙니다.)
즉, 객체가 테이블이 되도록 매핑 시켜주는 것을 말합니다.
ORM을 이용하면 SQL Query가 아닌 직관적인 코드(메서드)로서 데이터를 조작할 수 있습니다.
예를들어, User 테이블의 데이터를 출력하기 위해서 MySQL에서는 SELECT * FROM user; 라는 query를 실행해야 하지만,
ORM을 사용하면 User 테이블과 매핑된 객체를 user라 할 때, user.findAll() 라는 메서드 호출로 데이터 조회가 가능합니다.
query를 직접 작성하지 않고 메서드 호출만으로 query가 수행되다 보니, ORM을 사용하면 생산성이 매우 높아집니다.
그러나 query가 복잡해지면 ORM으로 표현하는데 한계가 있고, 성능이 raw query에 비해 느리다는 단점이 있는데요,
그래서 나중에 다루게 될 JPQL, QueryDSL 등을 사용하거나 한 프로젝트 내에서 Mybatis와 JPA를 같이 사용하기도 합니다.
Java에서 DB를 다룰 때, JDBC를 직접 사용하는 것보다 Mybatis를 사용했을 때 코드가 간결해지고 유지보수가 편했다는 것을 느꼈습니다.
Hibernate를 배우게 되면 Mybatis보다 코드가 더 간결하며, 더 객체 지향적이고 생산성이 매우 높다는 것을 느끼게 될 것입니다.
JPA
JPA는 Java Persistence API의 약자로, 자바 애플리케이션에서 관계형 데이터베이스를 다루기 위한 표준 인터페이스입니다. JPA는 객체 지향 프로그래밍 언어인 자바와 관계형 데이터베이스 간의 매핑을 담당하며, ORM 기술을 기반으로 합니다.
주요 개념 및 기능
Entity: JPA에서 관리되는 데이터 객체를 말합니다. 보통 데이터베이스의 테이블과 매핑됩니다. @Entity 어노테이션을 사용하여 해당 클래스를 엔티티로 지정합니다.
EntityManager: JPA를 사용하여 엔티티를 관리하는데 사용되는 인터페이스입니다. 엔티티의 영속성(persistence)을 관리하고 데이터베이스와의 통신을 담당합니다.
EntityManagerFactory: EntityManager를 생성하기 위한 팩토리 클래스입니다. 애플리케이션 전체에서 단 하나의 EntityManagerFactory 인스턴스를 생성하여 사용합니다.
Persistence Context: 엔티티를 영구적으로 저장하는 환경을 말합니다. EntityManager가 엔티티를 관리하고 추적하는 데 사용됩니다.
JPQL (Java Persistence Query Language): JPA에서 사용되는 객체 지향 쿼리 언어로, 엔티티 객체를 대상으로 쿼리를 작성할 수 있습니다.
JPA 사용의 장점
객체 지향적인 코드 작성: SQL 쿼리 대신 메서드 호출을 통해 데이터베이스를 조작할 수 있어 객체 지향적인 코드 작성이 가능합니다.
데이터베이스 독립성: JPA를 사용하면 데이터베이스 종류에 상관없이 동일한 코드를 사용할 수 있어 데이터베이스 변경에 유연하게 대응할 수 있습니다.
생산성 향상: 반복적이고 번거로운 CRUD(Create, Read, Update, Delete) 작업을 간소화하고, 개발 생산성을 향상시킵니다.
성능 최적화: JPA는 내부적으로 캐싱, 지연 로딩 등의 기능을 제공하여 성능을 최적화할 수 있습니다.
JPA를 이용하면 개발 생산성을 향상시키고, 객체 지향적인 코드를 작성할 수 있으며, 데이터베이스와의 상호작용을 간소화할 수 있습니다.