개발 이론/JPA

JPA 정의

jeonghoe21 2025. 2. 2. 02:52

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