JPA를 사용하는 이유
1. 객체와 테이블의 매핑을 자동화
JPA는 객체와 데이터베이스 간의 매핑을 자동으로 처리합니다. 개발자는 SQL을 직접 작성하지 않고도 데이터베이스 연산을 수행할 수 있습니다.
@Entity
public class User {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String name;
}
2. 생산성 향상
- SQL 작성 감소: CRUD 작업을 위한 반복적인 SQL 작성이 필요 없습니다.
- 코드 간소화: JPA는 데이터 접근 로직을 간단하게 만들어줍니다.
- JPQL 사용: 객체 지향적으로 데이터를 조회하고 조작할 수 있습니다.
3. 데이터베이스 종속성 최소화
JPA는 추상화된 API를 통해 데이터베이스 변경(예: MySQL에서 Oracle로)을 쉽게 처리합니다. Hibernate 등 JPA 구현체는 다양한 데이터베이스를 지원합니다.
4. 캐싱 및 성능 최적화
- 1차 캐시: 동일 트랜잭션 내 동일 엔터티 조회 시 데이터베이스 쿼리를 재사용.
- 지연 로딩(Lazy Loading): 필요한 시점에 데이터를 조회하여 성능 최적화.
- 쓰기 지연(Write-Behind): 변경 내용을 한 번에 반영하여 트랜잭션 처리 속도 개선.
5. 트랜잭션 관리 및 변경 감지
JPA는 데이터베이스 트랜잭션을 쉽게 관리하며, 객체 변경 사항을 자동으로 감지하여 필요한 SQL을 생성합니다.
@Transactional
public void updateUser(Long id, String newName) {
User user = entityManager.find(User.class, id); // 조회
user.setName(newName); // 변경 감지
}
6. 객체 지향적 설계 지원
데이터베이스 테이블 간의 관계(1:1, 1:N, N:M)를 객체의 관계로 매핑합니다.
@Entity
public class Order {
@Id
@GeneratedValue
private Long id;
@ManyToOne
private User user; // User 객체와 연관 관계
}