JPA 스프링부트

Dayon·2024년 1월 22일
0
post-thumbnail

JPA(Java Persistence API)는 자바 진영의 ORM 기술에 대한 API 표준 명세이다.

객체와 데이터베이스간의 관계를 편리하게 이어준다.

Spring Data JPA

Spring Data JPA는 스프링에서 제공하는 데이터 액세스 기술 중 하나로, 객체 관계 매핑(Object-Relational Mapping, ORM)을 지원한다.

JPA(Java Persistence API)의 표준을 따르며, 데이터베이스와 자바 객체 간의 매핑을 간소화하고 일관성 있게 처리한다.

주요기능

  • 엔티티 매핑: 자바 객체와 데이터베이스 테이블 간의 매핑을 어노테이션을 통해 간편하게 설정할 수 있다.

  • CRUD 작업: 데이터베이스의 Create, Read, Update, Delete 작업을 자동으로 지원하여 개발자가 반복적인 코드를 최소화한다.

  • Query Methods: 메서드 이름을 통한 쿼리 생성을 지원하여 간편한 데이터 검색이 가능하다.


JpaRepository 인터페이스

JpaRepository 인터페이스를 확장함으로써 기본적인 CRUD 작업을 자동으로 제공받을 수 있다.

추가적으로 정의한 메서드 이름에 따라 쿼리가 자동으로 생성되어 사용자 정의 쿼리를 최소화할 수 있다.


JPA 의 장점

  • 생산성 향상
    스프링 부트의 자동 설정과 스타터 패키지, Spring Data JPA의 간소화된 데이터 액세스 작업으로 개발 생산성이 향상된다.

  • 일관된 코드
    JPA를 통한 객체 관계 매핑과 Spring Data JPA의 통합으로 일관된 코드 작성이 가능하며, 유지보수가 용이하다.

  • 데이터베이스 독립성
    데이터베이스에 대한 세부적인 설정을 하지 않아도 되며, 다양한 데이터베이스를 쉽게 변경할 수 있다.

스프링 부트의 간편한 설정과 Spring Data JPA의 객체 관계 매핑을 통해 개발자들은 복잡한 데이터 액세스 작업을 간소화하고 일관된 코드를 작성할 수 있다. 빠른 개발 주기와 유지보수의 편의성을 제공하여 현대적인 웹 애플리케이션 개발이 가능하다.


Spring Data JPA의 활용

1. Repository 인터페이스

Spring Data JPA에서 데이터 액세스 레이어를 추상화한 Repository 인터페이스를 제공한다. JpaRepository 인터페이스를 확장함으로써 기본적인 CRUD 작업을 자동으로 수행할 수 있다.

public interface UserRepository extends JpaRepository<User, Long> {
    List<User> findByLastName(String lastName);
}

UserRepository는 JpaRepository를 상속받아 자동으로 CRUD 메서드를 제공받으면서, 추가적으로 메서드 이름을 통한 쿼리(findByLastName)를 정의한다.


2. 쿼리 어노테이션과 Named 쿼리

Spring Data JPA는 @Query 어노테이션을 통해 개발자가 직접 JPQL(Querydsl)이나 네이티브 쿼리를 작성한다.

@Query("SELECT u FROM User u WHERE u.email = :email")
User findByEmail(@Param("email") String email);

@NamedQuery를 통해 이름 있는 쿼리를 정의하여 사용한다.

@Entity
@NamedQuery(name = "User.findByFirstName", query = "SELECT u FROM User u WHERE u.firstName = ?1")
public class User {
    //...
}

3.쓰기 지연 과 Dirty Checking

JPA는 쓰기 지연(write-behind)과 더티 체킹(dirty checking)을 통해 효율적인 데이터베이스 변경을 지원한다.

변경 감지 메커니즘을 활용하여 객체 상태의 변화를 추적하고, 트랜잭션 커밋 시점에 변경된 부분만 데이터베이스에 반영한다.

// 변경된 필드만 지정
user.setLastName("NewLastName");

// 트랜잭션 커밋 시점에 변경된 필드만 데이터베이스에 반영

4.Auditing

Spring Data JPA는 감사(Auditing)를 지원하여 엔티티의 생성일, 수정일, 생성자, 수정자 등의 정보를 자동으로 관리할 수 있다.

@CreatedDate, @LastModifiedDate, @CreatedBy, @LastModifiedBy 어노테이션을 통해 이러한 정보를 엔티티에 추가할 수 있다.

@Entity
@EntityListeners(AuditingEntityListener.class)
public class User {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    private String username;

    @CreatedDate
    private LocalDateTime createdAt;

    @LastModifiedDate
    private LocalDateTime updatedAt;

    //...
}

5. paging 과 정렬

Spring Data JPA는 페이징과 정렬을 지원하여 대량의 데이터를 효율적으로 처리할 수 있다.

Pageable 인터페이스를 통해 페이징 및 정렬 옵션을 적용할 수 있다.

// 페이징 및 정렬 적용
Page<User> findByLastName(String lastName, Pageable pageable);




profile
success is within reach, allow yourself time

0개의 댓글