본문 바로가기

IT49

[Spring boot] JPA N+1 발생 케이스 및 해결 방법 JPA FetchType저번 포스트에서 Jpa의 FetchType인 지연 로딩과 즉시 로딩에 대해 정리하였다. [Spring boot] JPA FetchTypeFetchTypeFetchType이란 JPA에서 엔티티를 조회할 때 연관된 ‘엔티티 조회 방법을 결정하는 전략’을 의미한다.javax.persistence.FetchType 패키지 내에 열거형(Eunm) 형태로 제공된다.// javax.persistence.FetchType.kyu-nahc.tistory.com 즉시 로딩은 예상 못하는 쿼리가 생기거나, JPQL에서 N+1 문제가 발생할 수 있다고 설명하였다.다시 한번 N+1문제를 정리하면 조회 시 1개의 쿼리를 생각하고 설계를 했으나나오지 않아도 되는 조회의 쿼리가 N개가 더 발생하는 문제이다.하.. 2024. 9. 22.
[Spring boot] JPA FetchType FetchTypeFetchType이란 JPA에서 엔티티를 조회할 때 연관된 ‘엔티티 조회 방법을 결정하는 전략’을 의미한다.javax.persistence.FetchType 패키지 내에 열거형(Eunm) 형태로 제공된다.// javax.persistence.FetchType.classpublic enum FetchType { LAZY, EAGER; private FetchType() { }} FetchType에는 FetchType.EAGER 타입으로 ‘즉시 로딩(Eager Loading)’ 전략과FetchType.LAZY 타입으로 ‘지연 로딩(Lazy Loading)’ 전략이 존재한다.FetchType 타입은 언제 사용하는 것일까?A라는 엔티티와 B라는 엔티티가 존재한다는 가정 하였.. 2024. 9. 19.
[Spring boot] What is QueryDSL? QueryDSL QueryDSL은 정적 타입을 이용해서 SQL과 같은 쿼리를 생성해 주는 오픈소스 프레임워크이다.쿼리를 문자열로 작성하거나 작성하는 것이 아닌, QueryDSL이 제공하는 Fluent API를 이용해 코드 작성의 형식으로 쿼리를 생성할 수 있게 도와준다. 즉 QueryDSL은 SQL, JPQL 등을 코드로 작성할 수 있도록 해주는 빌더 오픈소스 프레임워크이다. 사실, QueryDSL 이 JPA에서만 사용하는 프레임워크로만 알 수도 있지만,위의 공식 사이트를 보면 JPA 뿐만 아니라 SQL, Mongodb, Lucenece 등 다양한 언어에 대해서 서비스를 제공한다. 이번엔 JPA를 사용할 때 함께 많이 사용하는 QueryDSL JPA에 대해서 알아볼 것이다.QueryDSL JPA는 SQL.. 2024. 9. 18.
[Java] Java State Pattern State Pattern상태 패턴(State Pattern)은 객체가 특정 상태에 따라 행위를 달리하는 상황에서, 상태를 조건문으로 검사해서 행위를 달리하는 것이 아닌, 상태를 객체화하여 상태가 행동을 할 수 있도록 위임하는 패턴을 말한다.객체 지향 프로그래밍에서의 클래스는 꼭 사물 / 생물 형태의 데이터만 표현할 수 있는 게 아니다. 경우에 따라서 무형태의 행위 / 동작도 클래스로 묶어 표현할 수 있다.그래서 상태를 클래스로 표현하면 클래스를 교체해서 ‘상태의 변화’를 표현할 수 있고, 객체 내부 상태 변경에 따라 객체의 행동을 상태에 특화된 행동들로 분리해 낼 수 있으며, 새로운 행동을 추가하더라도 다른 행동에 영향을 주지 않는다. 전략 패턴(Strategy Pattern)이 '전략 알고리즘'을 클래.. 2024. 9. 16.
[Java] Java Composite Pattern Composite Pattern Composite 패턴은 구조 패턴 중 하나로, 객체들의 관계를 트리 구조로 구성하여 부분-전체 계층을 표현하는 패턴이다.Composite Pattern은 복합 객체(Composite)와 단일 객체(Leaf)를 동일한 컴포넌트로 취급하여, 클라이언트에게 이 둘을 구분하지 않고 동일한 인터페이스를 사용하도록 하는 구조 패턴인 것이다. 따라서 Composite 패턴은 전체-부분의 관계를 갖는 객체들 사이의 관계를 트리 계층 구조로 정의해야 할 때 유용하다.사용자는 이 복합체 패턴을 통해 단일 객체와 복합 객체 모두 동일하게 다룰 수 있다. 여기서 구조 패턴이란 작은 클래스들을 상속과 합성을 이용하여 더 큰 클래스를 생성하는 방법을 제공하는 패턴이다. 이 패턴을 사용하면 서로 .. 2024. 9. 16.
[Java] Java Template Method Pattern Template Method Pattern템플릿 메서드(Template Method) 패턴은 여러 클래스에서 공통으로 사용하는 메서드를 템플릿화 하여 상위 클래스에서 정의하고, 하위 클래스마다 세부 동작 사항을 다르게 구현하는 패턴이다.즉, 변하지 않는 기능(템플릿)은 상위 클래스에 만들어두고 자주 변경되며 확장할 기능은 하위 클래스에서 만들도록 하여, 상위의 메서드 실행 동작 순서는 고정하면서 세부 실행 내용은 다양화될 수 있는 경우에 사용된다.템플릿 메서드 패턴은 상속이라는 기술을 극대화하여, 알고리즘의 뼈대를 맞추는 것에 초점을 둔다. 이미 수많은 프레임워크에서 많은 부분에 템플릿 메서드 패턴 코드가 우리도 모르게 적용되어 있다. Template Method Pattern 구조 AbstractCla.. 2024. 9. 16.

loading