spring data jpa 12

Spring Data JPA - @Transactional

@Transactional@Transactional은 Spring 프레임워크에서 제공하는 어노테이션으로, 트랜잭션 경계를 정의하고 관리하는 데 사용됩니다. 데이터베이스와의 상호작용을 포함한 메소드 실행 중 오류가 발생하면 자동으로 롤백(rollback)을 수행하여 데이터 일관성을 유지합니다. 이 어노테이션은 데이터 접근 로직을 단순화하고, 트랜잭션 관리에 필요한 반복적인 작업을 줄여주는 역할을 합니다.아래에서는 @Transactional 어노테이션에 대해 자세히 설명하고, 주요 사용 방법 및 주의사항들을 다룹니다.@Transactional은 Spring에서 트랜잭션 경계를 정의하고 관리하는 데 사용하는 어노테이션으로, 데이터 무결성을 유지하는 데 중요한 역할을 합니다.트랜잭션 전파 유형, 격리 수준, 타..

Spring.io 2024.11.26

Spring Data JPA - 분산 트랜잭션

분산 트랜잭션 JPA에서 2단계로 구성된 데이터베이스 트랜잭션 설정은 일반적으로 2단계 커밋 (Two-Phase Commit) 또는 분산 트랜잭션 (Distributed Transaction)이라고 부르며, 하나 이상의 데이터베이스 또는 시스템 간의 트랜잭션을 안전하게 관리하기 위한 방식입니다. 이 방식은 트랜잭션이 여러 데이터 소스(예: 서로 다른 데이터베이스, 메시지 큐 등)에 걸쳐 있는 상황에서 전체 트랜잭션의 일관성을 보장하는 데 사용됩니다. JPA와 Spring 환경에서는 이를 통해 복잡한 분산 환경에서도 데이터 무결성을 유지할 수 있습니다.2단계 트랜잭션 설정은 여러 데이터 소스 간의 일관성 있는 트랜잭션 처리를 위해 JTA를 사용하여 JtaTransactionManager를 설정합니다.Ato..

Spring.io 2024.11.26

Spring Data JPA - 특징 및 개발주의사항

JPA의 대표적 특징JPA(Java Persistence API)는 자바 표준 ORM(Object-Relational Mapping) 프레임워크로, 자바 객체와 관계형 데이터베이스 사이의 데이터를 매핑하여 데이터베이스 작업을 쉽게 수행할 수 있도록 해줍니다. JPA는 복잡한 SQL을 자주 작성하지 않고도 데이터베이스와 상호작용할 수 있도록 많은 유용한 특징을 제공합니다. 이 중에서도 대표적인 특징인 1차 캐시, 쓰기 지연, 지연 로딩, 변경 감지 등을 아래에서 설명하겠습니다.1. 1차 캐시1차 캐시는 JPA에서 매우 중요한 개념으로, 영속성 컨텍스트(Persistence Context) 내부에 엔티티를 저장하는 메커니즘입니다. 이는 엔티티의 생명 주기를 관리하고 데이터베이스와의 상호작용을 효율적으로 처리..

Spring.io 2024.11.26

Spring Data JPA - JpaRepository

JpaRepositoryJpaRepository는 Spring Data JPA에서 제공하는 가장 일반적이고 유용한 인터페이스 중 하나로, 데이터베이스 접근을 간소화하고 반복적인 CRUD 작업을 줄이는 데 목적이 있습니다. JpaRepository는 CrudRepository와 PagingAndSortingRepository를 상속받아 더 풍부한 기능을 제공합니다. 이 인터페이스를 사용하면 개발자는 복잡한 데이터 접근 코드를 직접 작성하지 않고도 JPA를 활용하여 데이터베이스와 상호작용할 수 있습니다.JpaRepository는 높은 추상화 수준을 제공하고 CRUD 작업을 매우 간단하게 처리할 수 있어, 단순 데이터 접근 로직을 빠르게 구현하고 싶은 경우에 적합합니다.EntityManager는 더 낮은 수준..

Spring.io 2024.11.26

Spring Data JPA - EntityManager

EntityManagerEntityManager는 JPA(Java Persistence API)의 핵심 인터페이스 중 하나로, 데이터베이스와 상호작용하여 엔티티를 관리하는 역할을 합니다. Spring Data JPA에서 많이 자동화된 방식으로 처리되기 때문에 EntityManager를 직접 사용할 일이 많지는 않지만, JPA의 기본적인 메커니즘을 이해하거나 복잡한 커스터마이징이 필요한 경우 EntityManager를 직접 사용하는 것이 유용할 수 있습니다.EntityManager는 JPA에서 엔티티를 관리하는 핵심 역할을 수행합니다.엔티티의 생명주기(영속, 비영속, 분리, 제거)를 관리하고, 데이터베이스와의 CRUD 작업을 간단하게 수행할 수 있도록 합니다.JPQL 쿼리를 사용하거나 트랜잭션 경계를 관리..

Spring.io 2024.11.26

Spring Data JPA(Spring Data Java Persistence API)

Spring Data JPA(Spring Data Java Persistence API)는 Spring 프레임워크와 JPA(Java Persistence API)를 통합하여 데이터 액세스 레이어를 쉽게 개발할 수 있도록 해주는 모듈입니다. Spring Data JPA는 개발자가 데이터베이스와의 상호작용을 쉽게 처리하고, SQL 쿼리를 명시적으로 작성하지 않도록 도와주는 도구입니다. 주요 특징과 개념을 아래에 정리해 보겠습니다.주요 특징Repository 인터페이스 사용:Spring Data JPA는 Repository라는 인터페이스 기반의 접근 방식을 제공합니다. 개발자는 인터페이스를 정의하고 기본 CRUD(Create, Read, Update, Delete) 기능을 포함한 많은 데이터 액세스 기능을 바..

Spring.io 2024.11.26

Spring Data JPA , FetchType

FetchType은 JPA에서 엔티티 간의 관계를 로드하는 전략을 결정하는 역할을 합니다. FetchType은 주로 @ManyToOne, @OneToMany, @OneToOne, @ManyToMany와 같은 관계를 정의하는 어노테이션에서 사용됩니다. FetchType에는 EAGER와 LAZY 두 가지 옵션이 있습니다. FetchType.EAGER (즉시 로딩): EAGER 전략은 부모 엔티티를 조회할 때 관련된 자식 엔티티를 함께 로드합니다. 이 방식은 부모 엔티티를 조회하는 즉시 관련된 자식 엔티티에 대한 데이터도 함께 로드되므로, 연관된 엔티티의 데이터를 필요로 하는 경우 효과적입니다. 그러나 즉시 로딩은 성능에 영향을 줄 수 있습니다. 관련된 엔티티가 많거나, 필요하지 않은 데이터를 로드하는 경우가..

Spring.io 2023.04.12

Spring Data JPA, @OneToMany 무한 반복 오류

@OneToMany Entity을 RestAPI로 리턴할때 부한 반복 오류 부모-자식 엔티티 간의 양방향 관계에서 @OneToMany를 사용하면, REST API로 엔티티를 리턴할 때 순환 참조(Circular Reference) 문제가 발생할 수 있습니다. 이 문제는 JSON 직렬화 시 무한 루프를 일으키며, 결국 StackOverflowError가 발생하게 됩니다. 이 문제를 해결하기 위해선 Jackson 라이브러리의 @JsonManagedReference 및 @JsonBackReference 어노테이션을 사용하거나, @JsonIgnore 또는 @JsonView를 사용하여 직렬화를 제한할 수 있습니다. @JsonManagedReference와 @JsonBackReference 사용 @JsonManag..

Spring.io 2023.04.12

Spring Data JPA, 페이지 및 정렬

PagingAndSortingRepository는 Spring Data JPA에서 페이징 및 정렬 기능을 제공하는 인터페이스입니다. JpaRepository는 PagingAndSortingRepository를 상속하므로, JpaRepository를 사용하면 PagingAndSortingRepository의 기능을 함께 사용할 수 있습니다. 예제를 통해 자세히 살펴보겠습니다. 엔티티 클래스: @Entity public class User { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; private String firstName; private String lastName; private String email; // 생..

Spring.io 2023.04.10

Spring Data JPA @Query 어노테이션

@Query 어노테이션은 Spring Data JPA에서 사용자 정의 쿼리를 작성하는데 사용됩니다. @Query 어노테이션을 사용하면 레포지토리 메서드에 JPQL(Java Persistence Query Language) 또는 네이티브 SQL 쿼리를 지정하여 복잡한 조회 쿼리를 작성할 수 있습니다. 이렇게 하면 기본 제공되는 메서드 이름 기반의 쿼리를 사용할 수 없는 경우에도 데이터를 조회할 수 있습니다. 예제를 통해 자세히 살펴보겠습니다. 엔티티 클래스: @Entity public class User { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; private String firstName; private Strin..

Spring.io 2023.04.10

Spring Data JPA

Spring Data JPA는 Java Persistence API (JPA)를 사용하여 관계형 데이터베이스에 액세스하는 방법을 간소화하는 라이브러리입니다. Spring Data JPA는 공통적으로 사용되는 CRUD(Create, Read, Update, Delete) 작업을 위한 기본 구현을 제공하며, 개발자는 몇 줄의 코드만으로 빠르게 데이터베이스와 통신할 수 있는 애플리케이션을 작성할 수 있습니다. Spring Data JPA의 주요 기능: Repository 인터페이스: JpaRepository, CrudRepository, PagingAndSortingRepository 등과 같은 인터페이스를 상속받아 커스텀 Repository 인터페이스를 생성합니다. 이러한 인터페이스는 공통적인 데이터 액세스..

Spring.io 2023.04.10

Spring Data JPA에서 findBy.. 규칙

Spring Data JPA에서는 findBy로 시작하는 메서드 이름을 사용하여 쿼리 메서드를 생성할 수 있습니다. 이를 통해 쉽게 엔티티를 필터링하거나 정렬하는 등의 작업을 수행할 수 있습니다. 메서드 이름만으로도 JPA가 쿼리를 자동으로 생성하므로, 개발자는 직접 쿼리를 작성할 필요가 없습니다. 다음은 findBy 키워드를 사용하는 예시입니다: public interface UserRepository extends JpaRepository { // 단일 속성으로 검색 List findByLastName(String lastName); // 다중 속성으로 검색 List findByFirstNameAndLastName(String firstName, String lastName); // IgnoreCas..

Spring.io 2023.04.10