반응형
반응형
Introduction 예전에 QueryDSL 를 통해 데이터를 조회할 때 바로 DTO 객체로 응답 받는 방법을 포스트(https://mokggang.tistory.com/68) 했었는데. 자식 객체 기준에서의 부모 객체를 조회하는(Object in Object) 것 말고, 부모 객체 기준으로 자식객체를 조회하는(ObjectList in Object) 데이터가 필요한 경우 '일대다 관계의 부모와 자식 엔티티를 Join 으로 모두 조회 할 경우에도 DTO 객체로 응답 받아서 사용할 순 없을까 ?' jpaQueryFactory. select( team.id, team.name )). from(team). join(team.memberList, member) fetch(); 위와 같이 TeamDTO 객체 ..
Introduction 서비스 로직에서 특정 데이터를 업데이트, 즉 변경 하기 위해서 JPA 를 사용할 경우 일반적으로 DirtyChecking 을 통해 업데이트를 진행한다. 하지만 다수의 데이터를 일괄적으로 변경을 해야하는 경우에는 다수의 조회 및 업데이트 쿼리가 발생하기 때문에 성능적으로 좋지 않다. 그런 경우 JPQL 을 통해 업데이트 쿼리를 직접 작성하여 Bulk 업데이트를 진행하기도 하는데. Querydsl를 통해 문자열로 이루어진 JPQL 업데이트 쿼리의 Set 파라미터를 동적으로 업데이트를 진행할 수 있다. Bulk update 1.JPQL JPQL을 통한 기본적은 Bulk Update는 단순한 문자열 형태로 진행된다. 아래 코드는 Repository에서 나이와 유저아이디로 해당 유저들의 ..
Introduction 특정 웹사이트를 보면 검색조건들이 존재한다. 회원검색을 예를 들자면, 회원 목록을 조회할 경우 여러가지 검색 옵션들을 지정해 리스트를 보여준다. 1. 이름 검색 2. 이름 + 나이 검색 3. 이름 + 나이 + 성별 검색 이렇게 여러가지 조건에 따라 그에 부합하는 회원 목록을 보여주기 위해서 해당 회원 조회 쿼리에 조건들을 추가한다. 단순히 Spring Data Jpa 만 사용할 경우에는 인터페이스를 통해 조건에 맞는 함수를 추가적으로 만들어 주어야한다. 하지만 검색조건들이 다양한 만큼 조건에 해당하는 함수를 모두 만드는 일은 쉽지 않다. 이를 QueryDsl 에서 동적으로 검색조건을 동작할 수 있게 지원한다. 조건 검색 1. Spring Data Jpa 인터페이스를 활용한 조..
Introduction 백엔드에서 일반적으로 서비스 로직을 구성할 때 매개변수와 전달인자로 DTO를 사용한다. 여러가지 이유가 있겠지만, 필자가 생각하는 기본적인 이유는 1. 데이터의 종류와 타입 등 클라이언트의 요구사항이 다르다. - 서비스에서 클라이언트의 요구사항에 맞는 데이터를 가공 및 추가하는 과정이 필요하고, 불필요한 데이터를 응답할 필요가 없다. 2. Entity 객체의 필드 값을 예상하기 힘들다. - Entity 객체는 특정조건에 따른 결과물일 수도 있기 때문에 특정 데이터에 관해 직관적이지 못하고, 코드 추적이 불가피하다. 3. Entity 객체의 데이터의 무결성 - 서비스 로직에서 전달인자와 매개변수로 Entity 객체를 사용하게 되면, 의도치 않게 Entity의 값이 변경될 경우 JPA..
Introduction 이번에 Redis를 공부하면서 알게된 점들을 간략하게 정리해보려고 합니다. Redis란 무엇이며, 어떤 상황에 어떻게 쓰이는지, 어떠한 자료구조를 가지고 있고, 어떤 기능들을 가지고 있는지 요점을 정리해 Redis란 무엇인지 알 수 있는 시간이 되었으면 합니다. Redis Redis 란 NoSQL의 한 종류로써 데이터를 쓰고, 읽는 데이터베이스입니다. NoSQL 이기 때문에 스키마가 존재하지 않고, 특정한 자료구조의 형태로 쓰고, 읽는 것이 가능합니다. 일반적인데이터베이스와 다른 점이라면 Redis 는 데이터들을 직접 디스크에 write 하지 않습니다. 메모리에 데이터를 적재하고, 메모리에 있는 데이터를 사용하는 In-Memory 구조를 갖습니다. 그렇기 때문에 빠른 속도로 데이..
Introduction 프로그래밍을 하면서, 정확히는 Spring Framework 로 백엔드 개발을 하면서 Maven 과 Gradle 을 둘 다 사용해 보았고, 그저 빌드를 해주고, 의존성을 편하게 관리할 수 있게 해주는 정도의 지식만을 가지고 있었습니다. 두 개의 차이점은 무엇이며, Maven 과 Gradle 에 대해 기능과 특징 및 차이점을 정리하려고 합니다. Maven Maven 의 뜻은 지식의 축적을 의미하는 이디시어 단어이며, Maven 이 생기기 전의 프로젝트들은 각각 다른 Ant Build File들로 관리 되고 있었고, 표준화 되어 있지 않았습니다. 이러한 문제를 해결하고, 프로젝트를 구축하는 표준 방법, 프로젝트가 어떤 것으로 구성 되어 있는지에 대한 명확한 정의, 프로젝트 정보를..