JPA 기본 개념
JPA란?
JPA(Java Persistence API)는 자바 애플리케이션에서 관계형 데이터베이스를 객체 지향적으로 다룰 수 있도록 도와주는 ORM(Object-Relational Mapping) 기술입니다. SQL을 직접 다루지 않고 객체를 사용하여 데이터베이스 작업을 수행할 수 있습니다.
JPA의 주요 개념
- Entity: 데이터베이스 테이블과 매핑되는 클래스
- EntityManager: 엔티티를 관리하고 데이터베이스 작업을 수행하는 인터페이스
- Persistence Context: 엔티티 객체를 관리하는 일종의 캐시 역할
- Transaction: 원자성을 보장하는 데이터 작업 단위
기본적인 JPA 사용 예제
@Entity
class User {
@Id @GeneratedValue
private Long id;
private String name;
}
public class JpaExample {
public static void main(String[] args) {
EntityManagerFactory emf = Persistence.createEntityManagerFactory("example-unit");
EntityManager em = emf.createEntityManager();
em.getTransaction().begin();
User user = new User();
user.setName("John Doe");
em.persist(user);
em.getTransaction().commit();
em.close();
emf.close();
}
}
Spring Framework과 JPA
Spring Framework과 JPA
Spring Framework는 JPA를 쉽게 활용할 수 있도록 지원하는 다양한 기능을 제공합니다. Spring Boot와 함께 사용하면 설정을 최소화하면서 강력한 ORM 기능을 활용할 수 있습니다.
Spring Data JPA
Spring Data JPA는 JPA를 더 간단하게 사용할 수 있도록 도와주는 Spring의 데이터 계층 프레임워크입니다. 기본적인 CRUD 기능을 자동으로 제공하며, 개발자가 SQL을 직접 작성하지 않아도 되는 기능을 지원합니다.
Spring Data JPA의 특징
1. 리포지터리 추상화
Spring Data JPA는 JpaRepository<T, ID> 인터페이스를 제공하여 CRUD 메서드를 자동으로 구현할 수 있도록 합니다.
public interface UserRepository extends JpaRepository<User, Long> {
}
2. 쿼리 메서드
메서드 이름만으로 SQL을 자동 생성하는 기능을 제공합니다.
List<User> findByName(String name);
List<User> findByAgeGreaterThan(int age);
3. @Query 어노테이션
복잡한 쿼리를 작성할 때 @Query 어노테이션을 사용하여 JPQL 또는 네이티브 SQL을 실행할 수 있습니다.
@Query("SELECT u FROM User u WHERE u.name = :name")
List<User> findByCustomQuery(@Param("name") String name);
4. 트랜잭션 관리
Spring Data JPA는 @Transactional 어노테이션을 사용하여 트랜잭션을 관리할 수 있도록 지원합니다.
@Service
public class UserService {
@Transactional
public void saveUser(User user) {
userRepository.save(user);
}
}
5. EntityGraph
연관 관계가 있는 엔티티를 한 번의 쿼리로 가져올 수 있도록 도와주는 기능입니다.
@EntityGraph(attributePaths = {"roles"})
@Query("SELECT u FROM User u WHERE u.name = :name")
User findByNameWithRoles(@Param("name") String name);
6. Auditing
Spring Data JPA는 자동으로 생성일(createdAt), 수정일(updatedAt) 등의 감시 기능을 제공할 수 있습니다.
@EntityListeners(AuditingEntityListener.class)
@Entity
public class User {
@CreatedDate
private LocalDateTime createdAt;
@LastModifiedDate
private LocalDateTime updatedAt;
}'개발 이론 > JPA' 카테고리의 다른 글
| 정적 / MVC + 템플릿 엔진 / API (0) | 2025.03.02 |
|---|---|
| 엔티티 (0) | 2025.02.02 |
| 레포지토리 (0) | 2025.02.02 |