본문 바로가기

Spring

(65)
JPQL 간단히 JPQL(Java Persistence Query Language)은 JPA(Java Persistence API)에서 제공하는 객체지향 쿼리 언어입니다. SQL과 유사하지만, 데이터베이스 테이블이 아닌 엔티티 객체를 대상으로 동작한다는 점에서 차이가 있습니다. JPQL은 데이터베이스 독립적으로 작동하며, 애플리케이션 코드 내에서 사용됩니다.JPQL의 주요 특징객체 지향적 접근SQL은 데이터베이스의 테이블, 컬럼을 직접 다루는 반면, JPQL은 엔티티와 그 필드를 기반으로 작성됩니다.예를 들어, SQL에서 SELECT * FROM user는 JPQL에서 SELECT u FROM User u와 같습니다.JPA 엔티티 매핑JPQL은 엔티티 클래스와 필드 이름을 사용합니다. 따라서 JPA 매핑이 제대로 되어 ..
FetchType 간단히 FetchType은 JPA에서 엔티티 간 연관 관계를 가져올 때 데이터를 **즉시 로딩(EAGER)**할지, **지연 로딩(LAZY)**할지를 설정하는 옵션입니다. 이 옵션은 성능 최적화와 관련이 깊으며, 연관된 엔티티를 로딩하는 시점을 결정합니다. FetchType.EAGER설명즉시 로딩 방식으로, 엔티티를 조회할 때 연관된 엔티티도 즉시 함께 로드됩니다.기본적으로 연관된 데이터에 항상 접근할 필요가 있는 경우 유용하지만, 불필요한 데이터를 로드하여 성능 저하를 유발할 수 있습니다.예를 들어, 부모 엔티티를 조회할 때 자식 엔티티를 항상 사용해야 하는 경우 적합합니다.예제@Entitypublic class Parent { @Id @GeneratedValue(strategy = Generati..
Cascade(영속성 전이) Cascade는 JPA(Entity Framework)에서 엔티티와 관련된 연관 관계를 관리할 때 사용하는 중요한 개념 중 하나입니다. 주로 부모 엔티티와 자식 엔티티 간의 연관 관계에서 동작을 정의합니다. Cascade를 통해 부모 엔티티에 대해 수행된 작업이 자식 엔티티에도 영향을 미치도록 설정할 수 있습니다. 영속성 전이의 필요성엔티티 간에 연관 관계가 있을 때, 한쪽 엔티티에서 연관된 엔티티의 상태를 자동으로 관리해야 할 때 사용합니다.부모-자식 관계가 있는 엔티티에서 주로 활용됩니다.전이를 설정하면 명시적으로 연관된 엔티티를 persist, remove 등의 메서드로 조작할 필요 없이, 부모 엔티티의 상태 변경 시 자식 엔티티의 상태도 같이 변경됩니다.Cascade의 주요 옵션CascadeTyp..
[JPA] @Transactional의 propagation 속성 자세히 @Transactional의 propagation 속성은 트랜잭션의 전파(Propagation) 동작을 정의합니다. 전파는 메서드가 실행될 때 기존 트랜잭션에 참여할지, 새로운 트랜잭션을 시작할지, 혹은 트랜잭션 없이 실행할지를 결정합니다. Propagation의 주요 개념Propagation은 트랜잭션 관리 중 다른 트랜잭션 환경과의 상호작용 방식을 정의하는 데 사용됩니다. 이는 주로 A 메서드가 트랜잭션 B 메서드를 호출할 때 트랜잭션 상태를 어떻게 처리할지를 결정합니다. Propagation의 종류스프링에서는 아래와 같은 전파 유형을 제공합니다:  Propagation Type 설명예제 상황REQUIRED기본값. 기존 트랜잭션이 있으면 참여하고, 없으면 새 트랜잭션을 시작합니다.서비스 계층에서 트랜..
[JPA] @Transactional 속성(attribute) 1. Isolationisolation은 데이터베이스의 트랜잭션 격리 수준을 설정하는 데 사용됩니다. 스프링에서 제공하는 Isolation 값은 java.sql.Connection의 TRANSACTION_* 상수와 매핑됩니다.격리 수준 종류Isolation Level 설명문제 방지 여부Isolation.DEFAULT데이터베이스의 기본 격리 수준을 따릅니다. (보통 READ_COMMITTED)데이터베이스 기본 설정에 따름Isolation.READ_UNCOMMITTED가장 낮은 격리 수준으로, 다른 트랜잭션의 커밋되지 않은 변경 사항을 읽을 수 있습니다.Dirty Read 허용Isolation.READ_COMMITTED커밋된 데이터만 읽을 수 있습니다. 다른 트랜잭션의 변경 사항이 커밋되기 전까지는 볼 수 ..
[JPA] @DynamicUpdate 간단히 @DynamicUpdate는 JPA 또는 Hibernate에서 제공하는 애노테이션으로, 엔티티의 변경된 필드만 업데이트 쿼리에 포함하도록 최적화하는 데 사용됩니다. 일반적으로 JPA는 엔티티를 업데이트할 때 엔티티의 모든 필드를 업데이트하는 쿼리를 생성합니다. 하지만 @DynamicUpdate를 사용하면, 실제로 변경된 필드만 포함된 쿼리를 생성합니다. 특징변경된 필드만 업데이트@DynamicUpdate가 적용된 엔티티는 변경된 값이 있는 필드만 업데이트 SQL 쿼리에 포함됩니다.이로 인해 불필요한 필드 업데이트를 줄이고 성능 최적화에 도움이 됩니다.런타임 시 동작쿼리를 런타임 시점에 동적으로 생성하므로, 컴파일 시점에는 업데이트 쿼리가 정해지지 않습니다.쿼리 가독성 증가업데이트 쿼리에 변경된 필드만 포..
[JPA]Spring에서 트랜잭션 롤백(RuntimeException, Checked Exception) Java 예외 처리 모델과 관련성Checked Exception:컴파일러에서 반드시 처리해야 하는 예외.호출부에서 명시적으로 try-catch로 처리하거나 throws로 위임해야 합니다.예: IOException, SQLException.Unchecked Exception (RuntimeException):컴파일러에서 강제하지 않는 예외.프로그램의 논리적 오류 또는 예측 불가능한 상황에서 발생.예: NullPointerException, IllegalArgumentException.Spring 트랜잭션 관리 설계 철학Spring의 트랜잭션 롤백 정책은 다음과 같은 가정을 기반으로 합니다:Checked Exception은 복구 가능성:Checked Exception은 애플리케이션이 복구할 가능성이 있는 예..
[JPA] 영속성 캐시(Persistence Context) 영속성에 대해 이해가 잘 안가서 다시 한 번 정리를 해봅니다. 영속성 캐시(Persistence Context)란?영속성 캐시는 JPA의 핵심 개념 중 하나로, 엔티티 객체를 메모리 내에서 관리하는 엔티티 저장소입니다. 영속성 컨텍스트라고도 불리며, **EntityManager**를 통해 동작합니다. 이는 애플리케이션과 데이터베이스 간의 중간 계층 역할을 하며 성능을 최적화하고 데이터의 일관성을 유지합니다. 특징 및 작동 방식1. 1차 캐시엔티티를 데이터베이스에서 가져오거나 저장할 때, EntityManager는 먼저 영속성 컨텍스트(1차 캐시)에 데이터를 저장합니다.동일한 트랜잭션 내에서 동일한 엔티티를 요청하면, 데이터베이스를 다시 조회하지 않고 캐시된 객체를 반환합니다.데이터베이스에 대한 불필요한 ..