![[QueryDSL] OpenFeign QueryDSL 기본 설정 및 사용법](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdna%2FJCbPG%2FbtsPqJ8Hr9v%2FAAAAAAAAAAAAAAAAAAAAALK0Ch-FOWSZtJmGKVGbf0aRyBijzv8hG3ioDjWd2a1c%2Fimg.png%3Fcredential%3DyqXZFxpELC7KVnFOS48ylbz2pIh7yKj8%26expires%3D1756652399%26allow_ip%3D%26allow_referer%3D%26signature%3DsXpkk6KpbYawU3zAQTB1NGjGWS0%253D)
공식 QueryDSL은 사실상 유지보수 중단상태인것 같다...마지막 릴리스가 5.1로 이후 업데이트가 없고 취약점 문제도 존재한다고 한다.OpenFeign의 QueryDSL은 25년 7월 기준 7.0까지 나온상태고 계속 유지보수가 이뤄지고 있는 것 같다.또한 기본적인 사용법과 API 정의는 거의 동일한것 같기 때문에 OpenFeign의 QueryDSL을 도입하기로 했다. 기본 설정build.gradle// QueryDSL 설정def queryDslVersion = "7.0" // 25년 7월 기준 가장 최신def querydslSrcDir = layout.buildDirectory.dir("generated/querydsl").get().asFile // build/generated/querydslta..
![[Query DSL] Spring Data JPA와 Query DSL 통합(+ Query DSL 페이징 최적화)](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdna%2Fbxp7fz%2FbtsI6ff44JB%2FAAAAAAAAAAAAAAAAAAAAALp4dFtx_aCMGgImxVN6IpNnWbdXTXtnR8QNsouMNxgw%2Fimg.png%3Fcredential%3DyqXZFxpELC7KVnFOS48ylbz2pIh7yKj8%26expires%3D1756652399%26allow_ip%3D%26allow_referer%3D%26signature%3Dsbhudb0BfPBjlT7uAQkir%252FjIP1s%253D)
이 글은 인프런 김영한님의 Spring 강의를 바탕으로 개인적인 정리를 위해 작성한 글입니다.Query DSL을 Spring Data JPA에서 사용하려면 사용자 정의 리포지토리를 만들어야 한다. MemberTeamDto@Datapublic class MemberTeamDto { private Long memberId; private String username; private int age; private Long teamId; private String teamName; @QueryProjection public MemberTeamDto(Long memberId, String username, int age, Long teamId, String teamName) ..
![[Query DSL] 중급 문법](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdna%2FtZqCM%2FbtsI4SkE4Vc%2FAAAAAAAAAAAAAAAAAAAAAKS6geh9R97gdg0MVW6Hgdi9oPOESUwtCM9_xhbbq6lB%2Fimg.png%3Fcredential%3DyqXZFxpELC7KVnFOS48ylbz2pIh7yKj8%26expires%3D1756652399%26allow_ip%3D%26allow_referer%3D%26signature%3D73AAkqetJqcYm6pkZp9AhuL6SXc%253D)
이 글은 인프런 김영한님의 Spring 강의를 바탕으로 개인적인 정리를 위해 작성한 글입니다.테스트 기본 코드@Entity@Getter @Setter@NoArgsConstructor(access = AccessLevel.PROTECTED)@ToString(of = {"id", "username", "age"})public class Member { @Id @GeneratedValue @Column(name = "member_id") private Long id; private String username; private int age; @ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name = "team_id") privat..
![[Query DSL] 기본 문법](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdna%2Fb7q6fr%2FbtsI4pP7MHB%2FAAAAAAAAAAAAAAAAAAAAAAMPWsen0MLkJ_L79D7ADurLnLo_hsho6OW2ueNSwXb4%2Fimg.png%3Fcredential%3DyqXZFxpELC7KVnFOS48ylbz2pIh7yKj8%26expires%3D1756652399%26allow_ip%3D%26allow_referer%3D%26signature%3DQuZ0V%252Fq70WeU6W%252Fs1N%252Fyo8UCBpA%253D)
이 글은 인프런 김영한님의 Spring 강의를 바탕으로 개인적인 정리를 위해 작성한 글입니다.EntityManager 로 JPAQueryFactory 생성Querydsl은 JPQL 빌더JPQL: 문자(실행 시점 오류), Querydsl: 코드(컴파일 시점 오류)JPQL: 파라미터 바인딩 직접, Querydsl: 파라미터 바인딩 자동 처리JPAQueryFactory를 필드로 제공하면 동시성 문제는 JPAQueryFactory를 생성 할 때 제공하는 EntityManager(em)에 달려있다. 스프링 프레임워크는 여러 쓰레드에서 동시에 같은 EntityManager에 접근해도, 트랜잭션 마다 별도의 영속성 컨텍스트를 제공하기 때문에, 동시성 문제는 걱정하지 않아도 된다. 테스트 기본 코드@Entity@Get..
![[Query DSL] Query DSL 초기 세팅](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdna%2FzG1jw%2FbtsI2cjsMMq%2FAAAAAAAAAAAAAAAAAAAAAOV3jCmE08sMW8tcD8H0o4RxgpJh2wlfKvZn2g0oFV3s%2Fimg.png%3Fcredential%3DyqXZFxpELC7KVnFOS48ylbz2pIh7yKj8%26expires%3D1756652399%26allow_ip%3D%26allow_referer%3D%26signature%3DwTMYb5Mb6ePMNqY0g5jCuW0FHws%253D)
이 글은 인프런 김영한님의 Spring 강의를 바탕으로 개인적인 정리를 위해 작성한 글입니다.스프링 부트 버전은 3.5.3이다.(25.7 기준) 의존성 추가build.gradle의 dependencies에 아래의 내용을 추가해준다.sourceSets { main.java.srcDir querydslDir}tasks.withType(JavaCompile).configureEach { options.generatedSourceOutputDirectory.set(file(querydslDir))}clean { delete file(querydslDir)}dependencies {//Querydsl 추가 def querydslVersion = "5.0.0" implementation ..