JPA 7

[JPA] 즉시로딩과 지연로딩, JPQL에서의 N+1 문제와 해결 방법

JPA에서 데이터를 조회할 때 즉시 로딩(EAGER)과 지연 로딩(LAZY) 두가지 방식이 있다. 이 두가지 방식을 간단하게 설명하면 즉시 로딩은 데이터를 조회할 때 연관된 데이터까지 한 번에 불러오는 것이고, 지연 로딩은 필요한 시점에 연관된 데이터를 가져오는 것이다.Fetch Type이란Fetch Type이란, JPA가 하나의 Entity를 조회할 때, 연관관계에 있는 객체들을 어떻게 가져올 것이냐를 나타내는 설정 값이다. JPA는 ORM 기술로, 사용자가 직접 SQL를 생성하지 않고 JPA에서 JPQL을 이용하여 쿼리문을 생성하기 때문에 객체와 필드를 보고 쿼리를 생성하게 된다. 따라서, 다른 객체와 연관관계가 매핑이 되어있으면 그 객체들까지 조회하게 되는데, 이때 이 객체를 어떤 시점에 불러올 것..

JPA 2024.07.21

[JPA] 연관관계 매핑 - 연관 관계를 매핑할 때 어떻게 해야하는 가(단방향, 양방향)

JPA를 공부하면서 학습 했던 내용을 정리해보고자 한다. 일단, RDB에서의 연관관계 매핑은 FK(외래키)로 이루어진다. 그치만 객체에서의 관계는 참조로 이루어진다. (연관관계의 주인이 꼭 있어야한다.) 여기서 RDB와 ORM의 패러다임의 불일치가 발생한다. 객체와 테이블의 연관관계에 대한 차이가 분명하게 있기 때문에, JPA에서는 이러한 연관관계를 매끄럽게 이용할 수 있도록 다양한 어노테이션를 제공해준다. RDB에서에의 관계는 일대일, 일대다, 다대다가 존재한다. 테이블간의 연관관계가 1:1이냐, 1:N이냐, N:M이냐에 따라 외래키를 필드를 추가하여 사용한다. 객체를 테이블에 맞추어서 모델링을 하게 되는 경우를 보면 참조 대신에 외래 키를 직접 필드에 주입을 하게 된다. Member라는 엔티티 안에 ..

JPA 2024.07.20

JPA와 영속성 컨텍스트 이해하기

JPA는 간단하게 말하자면 자바 ORM(Object-Relatinal Mapping) 기술 표준으로 사용되는 인터페이스의 모음이다.즉, 실제적으로 구현된 것이 아니라 구현된 클래스와 매핑을 해주기 위해 사용되는 프레임워크인 것이다.JPA를 구현한 대표적인 오픈소스는 Hibernate가 있다. 주로 사용해 왔던 JPA지만 지나간 이론적인 내용들을 다시 한번 살펴보겠다. JPA에서 가장 중요한 2가지는 다음과 같다객체와 관계형 데이터베이스를 어떻게 매핑할 것인가? (Object Relational Mapping)영속성 컨텍스트그럼 여기서 영속성 컨텍스트가 무엇이냐? 영속성 컨텍스트를 이해하기전 엔티티 매니저 팩토리와 엔티니 매니저를 알아야 한다. (그림)영속성 컨텍스트란?JPA를 이해하는데 가장 중요한 용어..

JPA 2024.07.05

[JPA] [Trouble Shooting] 에러 Cannot delete or update a parent row: a foreign key constraint fails 참조 무결성 제약 조건 ON DELETE CASCADE

글 작성을 한 후, 댓글이 달려있는 상태에서 글 삭제 테스트를 하던 중 이런 에러를 보았다. 더보기 Cannot delete or update a parent row: a foreign key constraint fails (`learningmate`.`tb_reply`, CONSTRAINT `FKsxgehpxyljiiatkcutvuahw13` FOREIGN KEY (`board_no`) REFERENCES `tb_board` (`board_no`)) 일단 에러가 발생한 이유는 ✓ 데이터 삭제 시 해당 테이블에 연관관계가 설정 되어 있기 때문에 부모를 삭제 할 경우 부모 엔티티를 참조하는 자식 엔티티가 불안정한 상태가 되어 사전에 방지해주기 위해 에러가 발생하는 것이다. Trouble Shooting! ..

JPA 2024.04.13

Spring Data JPA를 활용한 Update 처리(변경감지, 더티체킹)

최근 Spring Data JPA를 사용하며 SSR 방식으로 개발중이다. 게시글 정보를 수정하는 Update 로직을 처리 하려고 한다 JPA에서 Update 처리 로직을 보기 전에 변경감지(더티체킹)이 뭔지 알아보자 더티체킹이란? Transaction안에서 엔티티의 변경이 일어나면 변경내용을 자동으로 데이터베이스에 반영하는 JPA 특징이다. 게시글을 관리하는 BoardService의 updateBoard 메서드이다. 우리가 생각하는 JPA를 활용한 쿼리 처리는 JPARepository를 상속받고 있는 boardReporitory 인터페이스에서 JPA에서 제공해주는 기본 메서드인 findAll(), deleteById() 등 이런 메서드를 사용하여 update도 똑같이 처리를 할거라고 생각하겠지만, 소스를..

Spring-Boot 2024.04.13

[Java] ORM의 탄생, SQL 중심적인 개발의 문제점

패러다임의 불일치 우리가 가장 많이 사용하는 프로그래밍 패러다임은 단연 객체지향이다. 내가 공부하고 있는 언어인 자바도 객체지향 언어이다. 그리고 우리가 가장 많이 사용하는 데이터베이스는 관계형 데이터베이스이다. MySQL, MariaDB, Oracle 등 모두 다 관계형 데이터 베이스이다. 우리는 지금 객체를 관계형 데이터베이스에 저장하고 관리하는 시대이다. 이런 패더라임의 불일치로 인한 SQL 중심적인 개발은 많은 문제점이 있다. SQL 중심적인 개발의 문제점 1. 반복적인 객체-테이블 매핑과 CRUD 객체지향, 관계형 데이터베이스는 패러다임의 불일치로 우리는 추가적인 작업을 해야한다. 객체를 관계형 데이터베이스에 저장하고 꺼내오기 위해서는 객체를 테이블로, 테이블은 객체로 매핑하는 작업을 우리 개발..

Java 2024.02.06

ORM이란?

어플리케이션의 객체와 관계형 데이터베이스의 데이터를 자동으로 매핑해주는 것을 의미한다 - java의 데이트 클래스와 관계형 데이터베이스의 테이블을 매핑 객제치향 프로그래밍과 관계형 데이터베이스의 차이로 발생하는 제약 사항을 해결해주는 역할 수행 대표적으로 JPA, Hibernate등이 있음 ORM의 장점 1. SQL 쿼리가 아닌 직관적인 코드로 데이터를 조작할 수 있다 2. 재사용 및 유지보수가 편리하다 3. DBMS에 대한 종속성이 줄어듬 ORM의 단점 1. 복잡성이 커질 경우 ORM만으로 구현하기 어려움 - 직접 쿼리를 구현하지않아 복잡한 설계가 어렵다 2. 대형 쿼리는 별도의 튜닝이 필요할 수 있음 JPA란? JPA는 Java Persistance API의 줄임말이며, ORM과 관련된 인터페이스의 ..

Spring-Boot 2023.10.25