본문 바로가기

전체 글

(93)
@Embedded, @Embeddable 간단하게 @Embedded는 JPA(Java Persistence API)에서 객체 지향적인 데이터 모델링을 지원하기 위해 사용되는 어노테이션입니다. 이는 엔티티 클래스 내에 값 타입(Value Type) 객체를 포함(Embed)하여, 해당 객체의 속성들을 데이터베이스 테이블의 컬럼으로 매핑할 수 있게 해줍니다. 1. Embedded의 기본 개념Embedded(포함):JPA 엔티티의 필드로 또 다른 객체(값 타입 객체)를 포함시킬 때 사용합니다.주요 어노테이션:@Embedded: 값 타입 객체를 엔티티에 삽입할 때 사용.@Embeddable: 값 타입 객체로 사용할 클래스를 정의할 때 사용.2. Embedded와 Embeddable의 관계@Embedded와 @Embeddable은 항상 같이 사용됩니다.@Embed..
@Converter 간단하게 @Converter는 JPA가 제공하는 어노테이션으로, 엔티티 필드와 데이터베이스 컬럼 간의 변환 로직을 정의할 때 사용합니다.주요 기능Java 객체 ↔ DB 데이터 간의 변환엔티티 필드 값을 데이터베이스에 저장하거나 읽어올 때 변환 작업을 자동으로 수행합니다.재사용 가능변환 로직을 분리해 여러 엔티티에서 쉽게 재사용할 수 있습니다.자동 적용@Converter(autoApply = true)를 설정하면, 특정 타입에 대해 변환기를 전역적으로 적용할 수 있습니다.2. 기본 사용법2.1. Converter 인터페이스변환 로직은 jakarta.persistence.AttributeConverter 인터페이스를 구현하여 정의합니다.public interface AttributeConverter { Y co..
Native Query Native Query는 JPA에서 제공하는 기능 중 하나로, JPQL 대신 SQL 쿼리를 직접 작성해서 사용할 수 있는 방법입니다. Native Query는 데이터베이스에 종속적이며, 특정 데이터베이스에서만 동작할 수 있는 SQL 구문을 사용할 수 있습니다.JPA의 추상화된 JPQL을 사용하는 대신, 더 강력하고 세밀한 제어가 필요한 경우 Native Query를 사용합니다. Native Query의 특징SQL 기반JPQL과 달리, 데이터베이스 테이블 및 컬럼 이름을 직접 사용하여 쿼리를 작성합니다.데이터베이스 종속성특정 데이터베이스의 고유 기능(예: MySQL의 LIMIT, PostgreSQL의 JSONB 등)을 사용할 수 있습니다. 따라서 데이터베이스 변경 시 쿼리도 수정이 필요할 수 있습니다.복잡..
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커밋된 데이터만 읽을 수 있습니다. 다른 트랜잭션의 변경 사항이 커밋되기 전까지는 볼 수 ..