[Spring Data JPA] Offset 기반 Pagination 성능 향상하기 (index 설정, count 쿼리 캐싱)
·
Java & Kotlin/JPA
🧐 들어가기전프로젝트를 진행하면서 Pageable을 활용한 검색 필터링 API를 구현해야 했다. 이 API는 프로젝트의 핵심 자재인 원단을 등록하고 조회할 때 사용되며, 비즈니스 로직의 특성상 원단은 빈번하게 조회해야 하며, 조회 결과를 기반으로 다음 단계의 로직이 수행되기 때문에 조회 성능이 매우 중요한 요소였다. 해당 API는 총 다섯 개의 파라미터를 받는다.page, size, startDate, endDate, 그리고 fabricTypeName이며, 이 중 fabricTypeName만 필수로 입력받고 나머지 값들은 선택적으로 전달된다. JPA Repository에서는 아래와 같이 @Query를 사용하여 JPQL로 조회 조건을 정의하였다: @Query( """ SELECT f F..
[Spring Data JPA] Pageable, Page, Slice 뜯어보기 (JPA에서 Page를 생성하는 내부 동작)
·
Java & Kotlin/JPA
🧐 들어가기전페이스북, 인스타그램, 네이버 카페 등 우리가 자주 사용하는 서비스들에는 공통점이 하나 있다. 바로 모든 데이터를 한 번에 보여주지 않고 필요한 만큼만 잘라서 보여준다는 점이다. 사용자는 현재 보고 있는 데이터를 기준으로 "다음", "이전", 또는 "특정 페이지"를 요청하고 시스템은 이에 맞는 데이터 일부만을 응답한다. 이는 단순히 UX의 문제만은 아니다. 수천, 수만, 수백만 건에 달하는 데이터를 한 번에 응답하는 일은 서버에 큰 부하를 주고 성능 저하나 장애로 이어질 수 있다. 따라서 위 사진처럼 N개의 데이터만 보여주고, 사용자의 요청에 따라 다음 혹은 이전 순번의 N개의 데이터를 볼 수 있게 구현하는 것을 통해 이러한 점을 보완할 수 있다. 하지만, 위와 같은 기능을 구현하기 위해서..
[Kotlin + Spring] JPA Entity 캡슐화 유지하는 방법 (field vs property, lazy-loading, private set, protected set)
·
Java & Kotlin/JPA
🧐 들어가기 전코프링으로 JPA Entity를 설계하던 도중 문득 의문이 생기게 되었다. 자프링에서는 보통 엔티티의 필드를 정의할 때 private로 외부로의 필드의 노출을 막고, 롬복 어노테이션을 통해 getter나 setter를 제공하여 해당 메서드를 통해 접근할 수 있도록 하여 객체지향적인 특성을 만족시켜 주었다.그러나 Spring 공식문서를 살펴보면, 코프링의 Entity를 설계할 때는 private와 같은 접근제어자를 사용하지 않는다. 따라서 왜 private 접근제어자를 사용하지 않는지, 그렇다면 어떻게 객체지향적인 특성을 만족하면서 설계할 수 있는지에 대해 알아보고자 한다.🔸Kotlin은 Field의 개념이 아닌 Property의 개념프로그래밍에서 필드(Field)와 프로퍼티(proper..
JPA 영속성 컨텍스트 내부 동작의 흐름 깊게 파헤치기
·
Java & Kotlin/JPA
🧐 들어가기 전... 영속성 관리 (영속성 컨텍스트, 엔티티 매니저, 엔티티 생명주기)🧐 들어가기 전...JPA : Java Persistence API, 자바의 ORM 기술 표준으로 애플리케이션과 JDBC 사이에서 동작한다. JPA가 제공하는 기능은 크게 두 가지로 나뉜다.엔티티와 테이블을 매핑 엔티티를 실제jhzlo.tistory.com🔍 JPA란?: Java 애플리케이션에서 데이터베이스와 객체 간의 매핑을 효율적으로 관리하기 위한 표준 ORM(Object-Relational Mapping) 기술이다.JPA는 관계형 데이터베이스와 객체지향 언어 사이의 불일치를 해결하기 위한 매우 강력한 도구이다. 객체 지향 패러다임과 관계형 데이터 모델 간의 불일치는 개발 과정에서 빈번한 문제를 야기하며, 이는..
영속성 관리 (영속성 컨텍스트, 엔티티 매니저, 엔티티 생명주기)
·
Java & Kotlin/JPA
🧐 들어가기 전...JPA : Java Persistence API, 자바의 ORM 기술 표준으로 애플리케이션과 JDBC 사이에서 동작한다. JPA가 제공하는 기능은 크게 두 가지로 나뉜다.엔티티와 테이블을 매핑 엔티티를 실제 사용JPA는 엔티티 매니저를 통해서 엔티티를 사용하게 되는데,이때 엔티티 매니저는 저장, 수정, 삭제, 조회 등의 엔티티와 관련된 모든일을 처리한다. 개발자 입장에서는 엔티티 매니저는 엔티티를 저장하는 가상의 데이터베이스라고 생각하면 된다.✅ 엔티티 매니저 팩토리와 엔티티 매니저☑️ 엔티티 매니저 팩토리 VS 엔티티 매니저Entity Manager Factory:엔티티 매니저를 생성한다Persistence Unit을 기반으로 생성되는 객체로, 데이터베이스와의 연결 설정, JPA ..
J_hzlo
'Java & Kotlin/JPA' 카테고리의 글 목록