JPA N+1 문제(EntityGraph, Fetch join)
·
JPA
JPA에 연관관계를 구현하다보면 JPA의 고질적인 문제인 N+1 현상을 경험하게 될 것이다. 🎈 N+1 문제란?한 번의 쿼리에서 관련 데이터를 추가로 조회하기 위해 쿼리를 N번 더 조회하는 현상예시로 user 10명 조회 -> user 마다 post를 조회 (10번 추가 조회)해당 현상은 큰 성능 저하를 일으킴Entity - BasicUser @Entity@Table(name ="BASIC_USERS")@Data@Builder@AllArgsConstructor@NoArgsConstructorpublic class BasicUsers implements Serializable { @Id @Column(name = "USER_EMAIL", nullable = false) private St..
디자인 패턴(생성 패턴)
·
CS(Computer science)
디자인 패턴이란?소프트웨어 개발 과정에서 자주 등장하는 문제들을 효과적으로 해결하기 위해 정형화된 설계 방식재사용성 향상 / 유지보수 용이 / 협업에 유리 / 유연한 설계등의 장점이 있다.GoF의 디자인 패턴에 등장하는 "생성", "구조", "행위" 패턴이 대표적이다. 생성패턴 : 생성 패턴은 인스턴스를 만드는 절차를 추상화하는 패턴1. Singleton(싱글톤 패턴)클래스의 인스턴스를 오직 하나만 생성해서 전역에서 공유하도록 보장하는 생성 패턴스프링에서는 기본적으로 Bean이 싱글턴 스코프최초 한번 new 연산자를 통해 고정된 메모리 영역을 사용하기에 해당 객체 접근 시 메모리 낭비를 방지다른 객체와 강하게 결합될 수 있다는 단점, 테스트가 어려운 단점이 존재public class Singleton {..
[JPA] 영속성 컨텍스트(Persistence Context) & Entity Manager를 파헤쳐보자
·
JPA
🎈 JPA 영속성 컨텍스트란(Persistence Context)?JPA의 영속성 컨텍스트(Persistence Context)는 엔티티(Entity) 객체를 관리하는 논리적 공간으로, JPA에서 매우 중요한 개념이다. 영속성 컨텍스트는 데이터베이스와 관련된 엔티티 객체를 캐싱하고, 이를 통해 엔티티를 효과적으로 관리하며 애플리케이션의 성능과 데이터 일관성을 유지하는 메모리상의 중간 저장소라고 생각할 수 있다. 영속성 컨텍스트는 논리적인 개념일 뿐이다. EntityManager를 통해 영속성 컨텍스트에 접근할 수 있다.서론으로는 이해하기 어려울 것이다. 본론으로 들어가기 앞서 EntityManager를 알고 있어야한다.🎈 JPA Entity Manager란?Entity Manager는 엔티티와 관련된..
[QueryDSL] Projection 사용 법 총정리(조회 시 DTO에 넣는 방법)
·
QueryDSL
🎈Projection 이란?Projection은 QueryDSL에서 쿼리 결과를 특정한 데이터 구조(예: DTO, Bean, Map 등)에 매핑하여 반환하는 방법을 의미한다.Spring Data JPA의 기본 엔티티 반환과 달리, QueryDSL은 특정 컬럼만 선택하거나 복잡한 쿼리 결과를 DTO 형태로 반환할 수 있도록 유연한 프로젝션 기능을 제공한다. 🎈주요 Projection 방식1. 단순 프로젝션특정 Entity의 컬럼이나 Entity  전체를 반환한다. /** * @description QueryDSL Test * @author SongPro * @return List */ @Override public List getUsers(){ ..
[QueryDSL] QueryDSL이란? (초기 설정부터 로직 작성까지)
·
QueryDSL
🎈Query DSL 이란?QueryDSL은 Java 기반의 타입 안전한 동적 쿼리 생성 라이브러리이다.주로 JPA와 함께 사용하며, 쿼리를 작성할 때 SQL 또는 JPQL처럼 문자열로 작성하는 방식 대신에, Java 코드로 작성할 수 있는 강력한 문법을 지원한다.이를통해 컴파일 시점에 쿼리 오류를 발견하고, IDE의 자동완성 기능을 활용하여 더 직관적이고 안전한 방식으로 데이터 베이스 쿼리를 생성할 수 있다. Query DSL을 찾아보면, QClass 이야기를 같이 보았을 것이다.QClass란, 엔티티 클래스를 기반으로 자동 생성되며, 기본적으로 JPA 엔티티의 필드 및 관계를 표현한다.QClass 통해 필드에 접근할 수 있다.🎈Query DSL의 특징타입 안전성 : 쿼리를 문자열이 아닌 Java 코..
[JPA] JPA란 무엇인가?(정의, 주요 특징, 장단점)
·
JPA
JPA(Java Persistence API)는 Java 표준 ORM(Object-Relational Mapping)기술로 Java 애플리케이션에서 객체와 관계형 데이터베이스 간의 매핑을 관리하고 데이터 접근을 처리하는 표준 인터페이스이다. 🎈 JPA의 주요 특징1. 객체-관계 매핑(ORM, Object-Relational Mapping)JPA는 객체와 데이터베이스 테이블을 매핑하여, SQL을 직접 작성하지 않아도 객체의 메서드를 호출함으로써 데이터를 다룰 수 있다.클래스 → 데이터베이스 테이블클래스의 필드 → 테이블의 컬럼객체 → 데이터베이스의 레코드 2. 표준 인터페이스JPA는 표준 스펙이기 때문에, Hibernate, EclipseLink, OpenJPA 등 다양한 구현체를 선택하여 사용할 수 있..