용로그
article thumbnail
[Querydsl] Querydsl과 DTO, @QueryProjection 비종속적으로 사용하기
Spring Data/Querydsl 2023. 8. 21. 20:43

서론 JPA와 Querydsl을 사용하면서 DTO에 관해 느낀 것이 많다. 그래서 이번 글에는 JPA와 Querydsl으로 개발을 진행할 때 고려해 보면 좋을 몇 가지에 대해 소개하겠다. Repository에서 DTO를 반환해야 하는 이유 여러분들은 Querydsl에서 DTO를 반환해야 한다는 이야기를 자주 들어보았을 것이다. 다만, Querydsl에서 DTO를 아무 의미 없이 기계적으로 반환한다면 그건 옳지 않다고 생각한다. 필자가 Querydsl에서 DTO를 반환하는 이유는 다음과 같다. 엔티티 보호 엔티티를 사용자에게 노출하면 원하지 않는 상황에서 자원의 속성이 변경될 가능성이 있다. 그리고 엔티티를 프레젠테이션 계층에 노출하는 것은 테이블 설계와 화면을 공개하는 것이나 다름없기 때문에 보안상으로도..

article thumbnail
[Spring Data] Application Code vs Database Query
Spring Data 2023. 8. 8. 23:49

서론 개발을 하면서 Application Code와 Database Query 둘 중 어느 것을 사용하여 비즈니스 로직을 처리해야 할지 고민했던 적이 있었는가. 그런 상황이 적지 않았을 것이라고 생각한다. 필자는 꽤나 궁금해서 과연 Application Code와 Database Query 사이의 패러다임을 어느정도 감안하고 Trade Off 해야 할지, 더 나아가선 성능은 얼마나 차이가 나는지 측정해보려고 한다. 구현 내용 우선 요구 사항은 필터링 기능이 주를 이룬다. 애플리케이션 코드로 처리하든, 쿼리로 처리하든 개발자에게는 꽤나 많은 리소스가 들 것이라고 예상되기 때문이다. 필터링 요구사항은 다음과 같다. 카테고리별 복수 선택이 가능하며, 같은 카테고리에서 복수 선택 시 or 조건 발생, 다른 카테..

article thumbnail
[JPA] JPA에서 Fetch Join에 대한 On절을 지원하지 않는 이유
Spring Data/JPA 2023. 7. 29. 02:33

집사의고민 프로젝트에서 JPA를 사용하면서 알아본 Fetch Join시 유의해야 하는 부분들에 대해서 기술해보려고 합니다. 특히나 자주 사용하는 fetch join + on절에 대한 이슈를 모르거나 잘 기억이 나지 않으신다면 이해하고 넘어가는게 좋습니다. 우선 쿼리가 정상적으로 동작하는지와 어떤 쿼리가 발생하는지를 알아보기 위해 간단한 테스트 코드를 작성해보았습니다. PetFoodRepositoryImplTest @DataJpaTest @Import(QueryDslTestConfig.class) @Sql(scripts = {"classpath:truncate.sql", "classpath:data.sql"}) @AutoConfigureTestDatabase(replace = AutoConfigureTes..