전체 글145 [QueryDSL] Spring Data JPA + QueryDSL 기본 문법 #2 - from절에 서브쿼리 사용 문제 해결 ≣ 목차 조건 문법SQL에서 제공하는 기본적인 조건식을 제공합니다.member.username.eq("member1") // username = 'member1'member.username.ne("member1") //username != 'member1'member.username.eq("member1").not() // username != 'member1'member.username.isNotNull() //이름이 is not nullmember.age.in(10, 20) // age in (10,20)member.age.notIn(10, 20) // age not in (10, 20)member.age.between(10,30) //between 10, 30member.age.goe(30) // .. 2025. 1. 30. [QueryDSL] Spring Data JPA + QueryDSL 설정 #1 JPQL / Spring Data JPA 문제점JPA는 데이터 접근 기술과 상관없이 쿼리를 작성할 수 있으며, JPQL은 JPA에서 사용하는 객체 지향 쿼리 언어로, SQL과 유사하지만 데이터베이스 테이블이 아닌 엔티티 객체를 기반으로 쿼리를 작성하기 때문에 데이터베이스 매커니즘이 아닌 엔티티를 이용해 객체 지향적으로 코드를 작성할 수 있습니다. Spring Data JPA은 JPA 기반의 Repository 인터페이스를 제공해 CRUD을 직접 작성할 필요 없이 간단하게 구현할 수 있습니다. 그러나 동적 쿼리를 작성할 때 코드가 복잡해지며, 코드에 문제가 있을 경우 애플리케이션 실행 후 해당 메소드를 실행할 때 오류를 발견할 수 있다는 큰 단점이 있습니다. 이는 컴파일 타임에 오류를 잡을 수 없는 점을 .. 2025. 1. 22. [Spring Data JPA] Projections 간단 정리 Projection은 데이터베이스에서 간단하게 필요한 필드만 선택하여 가져오는 기능입니다. 이를 통해 전체 엔티티를 조회하는 대신, 특정 필드만 포함된 객체를 생성할 수 있습니다. 즉, 성능을 향상시키고 데이터 전송을 최적화할 수 있습니다. 초기 설정(엔티티)@Entitypublic class Address { @Id private Long id; @OneToOne private Person person; private String state; private String city; private String street; private String zipCode; // getters and setters}@Entity@Setter@Getter@NoAr.. 2025. 1. 20. [Spring Data JPA] 직접 PK 값을 설정하면 발생하는 문제 - Persistable 문제 상황@GeneratedValue를 사용하지 않고, 직접 PK 값을 설정해야 하는 경우가 있습니다. 잘못된 PK 값 설정 시, SimpleJpaRepository.save() 메소드에서 entityInformation.isNew(entity)가 false를 반환하게 됩니다. 이 경우, merge() 메소드가 호출되며, 데이터베이스에 해당 데이터가 존재하는지 확인 후, 없으면 새로운 데이터를 삽입합니다. 이로 인해 예상치 못한 자원 사용이 발생할 수 있습니다.// 문제가 발생하는 엔티티@Entity@NoArgsConstructor(access = AccessLevel.PROTECTED)public class Item { @Id private String id; public Item(St.. 2025. 1. 15. [Spring Data JPA] Auditing 알아보기 - Spring Security 적용 Auditing 기능은 엔티티의 생성 및 수정 시점을 감시하여 생성일, 생성자, 수정일, 수정자를 자동으로 기록할 수 있으며, 이러한 생성일과 수정자는 엔티티가 공통적으로 가지는 컬럼이므로 중복 코드를 줄이기 위해 BaseEntity 클래스로 분리하여 다양한 방법으로 Auditing을 구현할 수 있습니다. 1. JPA으로 구현1-1. 공통 관심사 엔티티 구현@Getter@MappedSuperclasspublic abstract class BaseEntity { @Column(updatable = false) private LocalDateTime createdDate; private LocalDateTime updatedDate; @PrePersist public void pr.. 2025. 1. 13. [Spring Data JPA] Custom Repository - 사용자 정의 리포지토리 Spring Data JPA를 사용하면 인터페이스만 정의해도 Spring이 환경 설정 파일을 기반으로 데이터 접근 기술의 구현체를 자동으로 생성해줍니다. 하지만 만약 Spring이 제공하는 구현체가 아닌 다른 데이터 접근 기술을 사용하고 싶다면 어떻게 하는지 알아보겠습니다. CustomRepositoryJPA, JDBC, 데이터 접근 기술, Querydsl 다양한 데이터 접근 기술로 사용자 정의 Repository를 생성할 수 있습니다. 필자는 JPA를 이용해서 간단하게 Custom 인터페이스를 구현해보겠습니다. 1. 사용자 정의 인터페이스 작성 사용자 정의 Repository를 위해서 먼저 사용자 정의 인터페이스를 작성합니다.public interface MemberRepositoryCustom { .. 2025. 1. 13. [Spring Data JPA] 페이징과 정렬 ≣ 목차데이터를 일정한 크기로 나누는 페이징 처리를 이용해 사용자에게 표시하는 경우는 상당히 많습니다. 또한, 페이징 하는 과정에서 특정 기준에 따라 데이터를 정렬해야 하는 경우도 있습니다. 이번 포스팅에서는 Spring Data JPA를 통해 쉽게 페이징하고 정렬하는 방법을 알아보겠습니다. 초기 설정더보기@Entity@Getter@Setter@ToString(of = {"id", "username", "age"})@NoArgsConstructor(access = AccessLevel.PROTECTED)public class Member { @Id @GeneratedValue @Column(name = "member_id") private Long id; private Str.. 2025. 1. 3. [디자인 패턴] CQRS 패턴 간단 정리 CQRS 패턴이란?Command Query Responsibility Segregation(CQRS) 패턴은 시스템의 명령(Command) 부분과 조회(Query) 부분을 분리하여 설계하는 아키텍처 패턴입니다. 이 패턴은 시스템의 복잡성을 관리하고, 성능을 최적화하는 데 도움을 줍니다.더보기Command: 상태를 변경하는 작업을 의미하며, 데이터의 추가, 수정, 삭제와 같은 작업을 의미Query: 시스템의 상태를 조회하는 작업을 의미하며, 데이터의 조회를 의미 CQRS 패턴을 적용한 간단한 예시@Entity@Getter@Setterpublic class Order { @Id @GeneratedValue private Long id; private final int userI.. 2024. 12. 16. [JPA] OSIV(Open Session In View) 패턴 이해 https://pjstudyblog.tistory.com/75 [Spring Boot] spring.jpa.open-in-view is enabled by default 경고 메시지JpaBaseConfiguration$JpaWebConfiguration : spring.jpa.open-in-view is enabled by default. Therefore, database queries may be performed during view rendering. Explicitly configure spring.jpa.open-in-view to disable this warning 해당 경고 메시지는pjstudyblog.tistory.com위에 포스팅에서는 OSIV패턴에 문제점을 해결하려면 JPA를 열심히.. 2024. 12. 16. [JPA] JPA 컬렉션 조회 성능 최적화 #3 - JPA에서 DTO 직접 반환 @BatchSize의 단점은 데이터베이스의 부하, 메모리 사용량의 동일성 등등 있습니다. @BatchSize을 1000으로 설정하면 한 번에 1000개의 데이터를 DB에서 애플리케이션으로 불러오게 되어 DB에 순간적으로 큰 부하가 발생할 수 있지만, 100으로 설정하면 10번의 쿼리를 통해 데이터를 가져와 부하가 분산될 수 있습니다. 하지만 애플리케이션은 전체 데이터를 로딩해야 하므로 메모리 사용량은 동일하며, 1000으로 설정하는 것이 좋을 수 있지만 DB와 애플리케이션 모두 순간 부하를 얼마나 견딜 수 있는지가 중요합니다. 그럼 DB, 애플리케이션에 많은 부하를 주지 않고 많은 데이터를 어떻게 한번에 처리하는지 알아보겠습니다. DTO 및 엔티티 코드더보기@Entity@Getter@Setterpub.. 2024. 12. 14. 이전 1 2 3 4 5 6 7 8 ··· 15 다음