본문 바로가기

Spring/Spring JPA

(31)
[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차 캐시)에 데이터를 저장합니다.동일한 트랜잭션 내에서 동일한 엔티티를 요청하면, 데이터베이스를 다시 조회하지 않고 캐시된 객체를 반환합니다.데이터베이스에 대한 불필요한 ..
[JPA] generate-ddl과 ddl-auto 차이 generate-ddl과 ddl-auto는 모두 JPA와 Hibernate에서 데이터베이스 스키마 관리를 제어하는 설정이지만, 사용하는 맥락과 동작이 다릅니다. 1. generate-ddl개요기능: JPA의 표준 속성으로, Hibernate와 같은 JPA 구현체가 데이터베이스 스키마를 생성할지 여부를 제어합니다.값: true 또는 falsetrue: 애플리케이션이 시작될 때 JPA 구현체가 엔티티 정의에 따라 데이터베이스 스키마를 생성합니다.false: 데이터베이스 스키마를 생성하지 않습니다.기본값: false//예시spring: jpa: generate-ddl: true특징generate-ddl은 단순히 스키마 생성 여부를 결정하는 옵션입니다.JPA 표준에 정의되어 있으며 Hibernate 외에..
[JPA] hibernate.ddl-auto hibernate.ddl-auto는 Hibernate가 데이터베이스 스키마를 어떻게 관리할지 결정하는 중요한 설정입니다 주요 값과 동작1. none동작:Hibernate는 데이터베이스 스키마와 관련된 어떤 작업도 수행하지 않습니다.기본값으로 설정되면 스키마 변경 없이 데이터베이스와 애플리케이션 간의 매핑만 처리합니다.사용 사례:데이터베이스 스키마를 수동으로 관리하며, 애플리케이션에서 변경이 필요 없을 때.2. create동작:애플리케이션 시작 시 기존 데이터베이스 스키마를 모두 삭제하고 새로 생성합니다.기존 데이터 및 테이블이 모두 삭제됩니다.사용 사례:초기 개발 단계에서 데이터베이스 구조를 자주 변경할 때.테스트 환경에서 새로운 구조를 매번 생성해야 할 때.주의:기존 데이터를 모두 삭제하므로 프로덕션 ..
[JPA] Spring JPA 관련 yml 설정의 주요 항목 1. generate-ddl설명:데이터베이스 스키마를 애플리케이션의 엔티티(Entity) 모델을 기반으로 자동 생성할지 여부를 설정합니다.DDL은 테이블 생성 및 수정과 같은 데이터베이스 구조 정의를 나타냅니다.값:true: 엔티티를 기반으로 데이터베이스 스키마를 자동 생성합니다.false: 스키마를 생성하지 않습니다. (기본값)주의:이 설정은 Hibernate 또는 JPA 구현체에 따라 동작하며, 데이터베이스에 직접 영향을 미칩니다.프로덕션 환경에서는 일반적으로 false로 설정합니다.2. hibernate.ddl-auto설명:Hibernate가 데이터베이스 스키마를 어떻게 관리할지 설정합니다.주요 값:none: 스키마 자동 생성 비활성화.create: 애플리케이션 시작 시 기존 스키마를 삭제하고 새로..