728x90

ORM 15

[ JPA ] 변경 감지(Dirty Checking)와 병합(Merge) 알아보기

Intro 안녕하세요. 환이s입니다👋이전 포스팅에서 주문 검색 기능을 JQPL, JPA 표준 Criteria 그리고 Querydsl을 활용해서 알아봤습니다.오늘은  JPA에서 데이터를 변경하는 방법에 대해 소개하고 변경 시에 주의할 점에 대해서 소개하려고 합니다🙂 데이터를 변경하는 방법에는 변경 감지(Dirty Checking)와 병합(Merge)기능이 JPA의 핵심적인 요소로, 애플리케이션의 성능과 데이터 일관성을 유지하는 데 중요한 역할을 합니다. 순차적으로 알아보겠습니다.준영속 엔티티 준영속 엔티티는 JPA에서 영속성 컨텍스트와의 연결이 끊어진 상태의 엔티티를 의미합니다. 즉, 엔티티가 처음에는 영속 상태로 관리되다가, 영속성 컨텍스트가 종료되거나 명시적으로 분리될 때 준영속 상태로 전환됩니다..

[ ORM ]/JPA 2025.01.18

[ JPA ] E-commerce 프로젝트 - 주문 검색 기능 개발 (JPQL,Criteria,Querydsl)

Intro안녕하세요. 환이s입니다👋이전 포스팅에서 주문 도메인 개발까지 알아봤습니다.이어서 앞서 말씀드린 주문 파트의 핵심인 검색 기능 개발을 진행하면서 JPA에서 동적 쿼리를 어떻게 해결하는지 알아보겠습니다🙂 주문 검색 기능 개발 먼저 주문 목록 페이지를 확인해 보겠습니다.  위 화면을 보면 주문상태를 검색조건으로 필터링할 수 있는 기능인 것을 확인할 수 있습니다.각 조건을 선택하면 해당 조건을 동적으로 추가하고 제거해야 하기 때문에 동적 쿼리가 필요하게 됩니다. 그렇다면 주문 도메인 개발 때 생성한 OrderRepository에 검색 로직을 추가해서 동적 쿼리를 생성해야 하는데, 그전에 검색 조건 파라미터 먼저 만들어 줍니다.  ✅ 검색 조건 파라미터 - OrderSearchpublic class..

[ ORM ]/JPA 2025.01.13

[ JPA ] E-commerce 프로젝트 - 주문 도메인 개발

Intro안녕하세요. 환이s입니다👋이전 포스팅에서 상품 도메인 개발까지 알아봤습니다.이어서 주문 도메인을 개발해 보겠습니다🙂 ✅ 구현 기능     1️⃣ 상품 주문     2️⃣ 주문 내역 조회     3️⃣ 주문 취소 ✅ 순서     1️⃣ 주문 엔티티, 주문상품 엔티티 개발     2️⃣ 주문 리포지토리 개발     3️⃣ 주문 서비스 개발     4️⃣ 주문 검색 기능 개발     5️⃣ 주문 기능 테스트주문, 주문상품 엔티티 개발 먼저 엔티티 내에 핵심 비즈니스 로직을 구현합니다. ✅ Order import lombok.Getter; import lombok.Setter; import javax.persistence.*; import java.time.LocalDateTime; import j..

[ ORM ]/JPA 2025.01.11

[ JPA ] E-commerce 프로젝트 - 상품 도메인 개발

Intro 안녕하세요. 환이s입니다👋이전 포스팅에서 회원 도메인 개발까지 알아봤습니다. 이어서 상품 도메인을 개발해 보겠습니다. 상품 테스트는 회원 테스트와 비슷하므로 생략하겠습니다🙂상품 도메인 개발 - 상품 엔티티 개발(비즈니스 로직 추가) 먼저 Item 엔티티에서 관리하는 stockQuantity를 변경하는 비즈니스 로직을 엔티티에서 처리하겠습니다.서비스 단에서 처리할 수 있지만, 엔티티에서 처리하는 것이 응집도가 높은 설계로 볼 수 있습니다. ✅Itemimport jpabook.jpashop.exception.NotEnoughStockException;import lombok.Getter;import lombok.Setter;import jpabook.jpashop.domain.Category;..

[ ORM ]/JPA 2025.01.06

[ JPA ] E-commerce 프로젝트 - 회원 도메인 개발

Intro 안녕하세요. 환이s입니다👋이전 포스팅에서 프로젝트에 필요한 엔티티 설계를 진행했습니다. 이어서 요구사항 구현 기능으로 회원 등록과 목록 조회 기능을 코드로 구현하고, 테스트 코드를 작성하여 기능이 제대로 작동하는지 확인해 보겠습니다🙂 회원 도메인 개발 - 리포지토리 개발 리포지토리에서는 엔티티매니저(EntityManager)를 통해 데이터베이스에 대한 CRUD 작업을 수행할 수 있습니다.  엔티티매니저는 일반적으로 개발자가 직접 인스턴스화하지 않고, 스프링 부트와 같은 프레임워크에서 DI(Dependency Injection) 방식으로 주입받아 사용하는데 크게 총 3가지 방법을 소개해드리겠습니다. 1️⃣  @Autowired 3가지 방법 중 가장 간단한 방법인 필드 주입 방법입니다. @Au..

[ ORM ]/JPA 2024.12.27

[ JPA ] E-commerce 프로젝트 - 도메인 분석 설계

Intro 안녕하세요. 환이s입니다👋 이전 포스팅에서 JPA와 DB 설정 방법에 대해 알아보았습니다. 오늘부터 간단한 상품 주문과 회원 관리 기능을 갖춘 웹 프로젝트를 만들어 보려고 하는데, 먼저 요구사항에 맞춰서 도메인 분석과 설계를 통해 실제 코드에 엔티티 연관관계 매핑까지 진행해 보겠습니다.블로그 내용은 강의를 들으며 작성한 수강 일지로, 코드에 사용되는 어노테이션이나 연관 관계 매핑에 대한 구체적인 설명은 이전에 다룬 내용을 바탕으로 생략하겠습니다.도메인 분석 설계 - 요구사항 분석 먼저 메인 화면을 보고 진행하겠습니다.  메인 화면을 보면 기능은 크게  회원 기능/ 상품 기능/ 주문 기능 총 3개의 기능 요구사항으로 나뉘어 볼 수 있는데, 각 기능별 목록을 정리해 보겠습니다. 회원 기능회원 등..

[ ORM ]/JPA 2024.12.23

[ JPA ] Java Persistence Query Language(JPQL , 객체 지향 쿼리 언어)(1)

Intro JPA는 엔티티 객체를 중심으로 개발하기 때문에 검색 쿼리 실행하면 테이블 대상이 아닌 엔티티 객체를 대상으로 요청을 보내야 한다. 하지만 모든 데이터베이스 데이터를 객체로 변환해서 검색하는 것은 불가능하며 애플리케이션이 필요한 데이터만 가져오려면 결국 검색 조건이 포함된 SQL을 사용해야 한다. 오늘은 검색 조건에 엔티티 객체를 대상으로 요청을 보내기 위한 객체 지향 쿼리 언어에 대해 알아보자. JPQL(Java Persistence Query Language) JPQL은 SQL을 추상화하여 사용하는 객체지향 쿼리 언어이다. 따라서 테이블을 대상으로 하지 않고 엔티티 객체를 대상으로 쿼리를 수행하며 추상화를 통해서 특정 데이터베이스 SQL에 의존되지 않게 개발할 수 있다. 실제 수행할 때는 ..

[ ORM ]/JPA 2024.04.03

[ JPA ] 즉시 로딩과 지연 로딩(FetchType.LAZY or EAGER)

Intro 이전 포스팅에서 프록시(Proxy)에 대한 글을 작성했습니다. 프록시(Proxy)는 이번 포스팅에서 즉시 로딩(EAGER)과 지연 로딩(LAZY)을 구현하는데 중요한 개념인데, 일단 원리는 미뤄두고 즉시 로딩(EAGER)과 지연 로딩(LAZY)에 대한 개념에 대해 먼저 알아보자. 예제 테이블로 Member와 Team이 있다고 가정해보자. Member를 조회할 때 Team도 함께 조회해야 할까? 비즈니스 로직에서 단순히 멤버 로직만 사용하는데 함께 조회하면, 아무리 연관관계가 걸려 있다고 해도 손해이다. JPA에서는 데이터를 조회할 때 즉시 로딩(EAGER)과 지연 로딩(LAZY) 두 가지 방식이 있다. 이 두 가지 방식을 간단하게 설명하면 즉시 로딩(EAGER)은 데이터를 조회할 때 연관된 데..

[ ORM ]/JPA 2024.03.26

[ JPA ] 상속 관계 매핑

Intro 관계형 데이터베이스에는 객체 지향 언어에서 다루는 상속이라는 개념이 없다. 대신에 슈퍼타입 서브타입 관계라는 모델링 기법이 객체의 상속 개념과 가장 유사하다. ORM에서 이야기하는 상속 관계 매핑은 객체의 상속 구조와 데이터베이스의 슈퍼타입 서브타입 관계를 매핑하는 것이다. 슈퍼타입 서브타입 논리 모델을 실제 물리 모델인 테이블로 구현할 때는 3가지 방법을 선택할 수 있다. 각각의 테이블로 변환 각 테이블을 생성하고 조회할 때 조인을 사용한다. 통합 테이블로 변환 테이블을 하나만 사용해서 통합한다. (JPA에서는 단일 테이블 전략이라 한다.) 서브타입 테이블로 변환 서브 타입마다 하나의 테이블을 만든다. (JPA에서는 구현 클래스마다 테이블 전략이라 한다.) 세 가지 방법 모두 JPA를 통해 ..

[ ORM ]/JPA 2024.03.18

[ JPA ] 다양한 연관관계 매핑

연관관계 매핑 시 고려사항 3가지 엔티티의 연관관계를 매핑할 때는 다음 3가지 고려사항이 있다. [ 다중성 ] 다대일(@ManyToOne) 일대다(@OneToMany) 일대일(@OneToOne) 다대다(@ManyToMany) 다대다는 실무에서 사용하면 안 된다. [ 단방향, 양방향 ] 테이블의 외래 키(FK) 하나로 조인을 사용해서 양방향으로 쿼리가 가능하므로 사실상 방향이라는 개념이 없다. 객체는 참조용 필드를 가지고 있는 객체만 연관된 객체를 조회할 수 있다. 객체 관계에서 한쪽만 참조하는 것을 단방향, 양쪽에서 서로 참조하는 것을 양방향이라고 한다. [ 연관관계의 주인 ] JPA는 두 객체 연관관계 중 하나를 정해서 데이터베이스 외래 키(FK)를 관리하는데 이것을 연관관계의 주인이라 한다. 외래 키..

[ ORM ]/JPA 2024.03.13
728x90