✏️ 노트/spring
[JPA] JPA란?
키루루
2023. 6. 10. 02:38
💡 JPA란 무엇인가?
JPA (Java Persistence API)
는 자바 객체와 관계형 데이터베이스 간의 매핑을 담당하는 ORM 기술이다.ORM (Object-Relational Mapping)
은 객체 지향 프로그래밍 언어와 관계형 데이터베이스 간의 불일치를 해결하기 위해 개발된 기술로, 개발자가 SQL 쿼리를 직접 작성하지 않고 객체를 통해 데이터베이스에 접근할 수 있도록 도와준다.
💡 JPA를 사용하는 이유
- 개발 생산성 향상
- SPQ 쿼리 작성과 데이터베이스 연동에 대한 복잡성을 해소하여 개발자가 핵심 비즈니스 로직에 집중할 수 있도록 도와준다.
- 만약, JPA를 사용하지 않는다면 모든 API에서 DB와의 연결 및 SQL 쿼리 실행과 결과 처리를 위한 코드를 직접 작성해야 한다. Plain JDBC를 사용하여 DB와의 상호작용을 처리해야 하므로, 데이터베이스 연결, Statement 생성, ResultSet 처리 등의 로우 레벨의 작업을 직접 구현해야...😥
- 데이터베이스 독립성
- JPA는 데이터베이스 벤더(MySQL, Oracle ...)에 종속되지 않도록 추상화된 인터페이스를 제공한다.
- 가령, MySQL과 Oracle은 SQL 문법에 약간의 차이가 있고, 데이터베이스 연결 및 트랜잭션 관리를 다르게 처리해야 한다. 하지만 JPA가 추상화된 인터페이스를 제공하기 때문에, 개발자는 JPA의 인터페이스를 사용하면 내부적으로 적절한 SQL문을 생성하여 실제 데이터베이스와 통신할 수 있다.
- 데이터베이스 변경 시에도 비즈니스 로직에 영향을 받지 않아 코드를 유지할 수 있다.
- 성능 최적화
- JPA는 캐싱, 지연 로딩 등의 기능을 제공하여 데이터베이스 액세스 성능을 향상시킬 수 있다.
- 필요한 데이터만 로딩하고 캐시를 통해 반복적인 액세스를 줄여 성능을 향상시킨다.
💡 JPA 사용 예시
- Entity 생성
@Entity
@Table(name = "users")
public class User {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@Column(name = "name")
private String name;
// Getter, Setter, Constructors 생략
}
- 데이터 조회 1 (Criteria API) : 동적인 쿼리 작성에 더 유연성이 있지만 코드가 복잡할 수 있다.
public class UserRepository {
@PersistenceContext
private EntityManager entityManager;
public List<User> getAllUsers() {
CriteriaBuilder cb = entityManager.getCriteriaBuilder();
CriteriaQuery<User> query = cb.createQuery(User.class);
Root<User> root = query.from(User.class);
query.select(root);
TypedQuery<User> typedQuery = entityManager.createQuery(query);
return typedQuery.getResultList();
}
}
- 데이터 조회 2 (Spring Data JPA) : 간단한 쿼리에 대해서는 메소드 이름만으로 쿼리를 생성할 수 있어 편리하다.
public interface UserRepository extends JpaRepository<User, Long> {
List<User> findAll();
}