Querydsl JPA + QueryDSL 계층형 댓글, 대댓글 구현(2) 이번엔 전편에 이어서 계층형 댓글, 대댓글을 다시 리팩토링해볼 예정이다. 이전 게시글에서는 계층형 댓글, 대댓글을 구현은 되었지만 N+1 문제가 있었다. 이번에는 그 N+1 문제를 해결해 볼 것이다. 위의 로직은 이 전편에서 만들었던 N+1 문제가 발생하던 로직이다. 만약 부모 댓글의 개수가 100개라면 100번 이상의 쿼리가 나가게 되는 아주 좋지 못한 코드이다..ㅠ 🥲 위의 코드는 게시글... JavaJPASpringbootQuerydslJPA 게시글 생성 + 파일 업로드(SpringBoot + JPA + AWS S3) 이번 글에서는 게시글 생성 + 파일 업로드(Aws S3)를 다룰 것이다. 먼저 게시글을 생성 하려면 제목, 내용, 카테고리 이름, 이미지파일을 프론트에서 넘겨받아야 한다. 이미지 파일은 List로 여러 개의 파일을 받을 것이다. 이미지 파일을 전송할 때는 FormData 방식으로 전달을 해야 하고, Json 타입의 제목, 내용, 카테고리 이름을 같이 보내기 때문에 @RequestPart를 사... S3awsSpringbootQuerydslJPAJPA [Project] Kotlin + Spring Boot + Querydsl을 이용한 주소 검색 API 회사 서비스에서 외부 주소 API가 자주 삑난다고 주소 검색 내재화 API를 만든다는 말이 있었다. Server : Spring Boot, Spring Data Jpa, Querydsl 2. JPA Dialect를 이용한 match-against 기능 등록 순수 JPQL에는 match-against 기능을 지원하지 않는다. 이를 사용하기 위해 JPA의 Dialect를 알아야 한다. JPA는 ... projectSpringbootQuerydslQuerydsl 실무 활용 - 순수 JPA 와 Querydsl MemberJpaRepository 생성자에서 JPAQueryFactory를 새로 만들어 엔티티 매니저를 주입시키는 것을 볼 수 있다. 이 방법 말고도 JPAQueryFactory를 빈으로 따로 만들고 생성자에 그냥 주입만 시키는 방법도 있다. 이 경우에는 @RequiredArgsConstructor를 통해 더 간편한 코드를 짤 수 있다는 장점이 있다. 하지만, 이 방법은 테스트를 진행할때 ... JPASpringQuerydslJPA [Spring] QueryDSL로 조건검색 API를 만들어보자(동적 쿼리) 개발을 하다보면 위의 그림 처럼 여러가지 조건을 가지고 검색을 해야할 경우가 많이 있습니다. 조건이 고정되어 있다면 조금 쉽겠지만 사용자가 필요에 따라 조건을 추가하거나 뺄 수 있다면 슬슬 머리가 아픕니다. 요런식으로 if문을 통해서 구현을 조건 검색을 구현 할 수 있으나 이 경우 조건이 3개만 되도 6개의 if문을 써야하고 4개가 되면 무려 24개의 if문을 사용해야합니다. 조금 더 프로그... 동적쿼리JPASpring조건검색BooleanExpressionsqlQuerydslrepositoryBooleanExpression JPA Auditing 커스텀 & queryDSL Java에서 ORM 기술인 JPA를 사용하여 도메인을 관계형 데이터베이스 테이블에 매핑할 때 공통적으로 도메인들이 가지고 있는 필드나 컬럼들이 존재합니다. 대표적으로 생성일자, 수정일자, 식별자 같은 필드 및 컬럼이 있습니다. 도메인마다 공통으로 존재한다는 의미는 결국 코드가 중복된다는 말과 일맥상통합니다. 그래서 JPA에서는 Audit이라는 기능을 제공하고 있습니다. Audit은 감시하다,... auditJPAQuerydslJPA JPA + QueryDSL 계층형 댓글, 대댓글 구현(1) JPA + QueryDSL을 이용한 계층형 댓글, 대댓글 Post 엔티티 클래스 post 와 comment의 관계는 1:N 관계이다. comment는 자기 자신을 selfjoin을 하고있으며, 부모 댓글이 삭제될 시 하위 댓글들도 같이 삭제가 된다. 여기서 처음 Post를 조회할 때 컬렉션 객체는 바로 가져올 수 없으므로 따로 처리를 해주어야 한다. 먼저 viewCount를 조회 시 자동으로... SpringbootQuerydslJPAJPA 기본 Q-Type QClass를 사용할 때 앞선 코드에서는 위 코드처럼 사용했다. QMember로 들어가보면 아래와 같이 QMember에 static 메소드가 있다. 이것을 이용해 좀 더 편리하게 QMember 인스턴스를 만들 수 있다. 여기서 QMember.member를 static으로 선언해 아래처럼 더 줄일 수 있다. QMember의 static메소드를 다시 보자. public static final Q... QuerydslQuerydsl 🔥 TIL - Day 63 팀 프로젝트 2일차! 📌 오늘의 구현이슈 406 not acceptable 코드리뷰 상세정보 쿼리 최적화 📌 406 not acceptable 에러코드에 해당하는 것 같다. 발생하는 케이스가 굉장히 많은 것 같다. 나의 경우 Springboot 환경에서 발생했다. 일단 에러의 이유는 응답객체를 Json으로 변환하지 못하는 문제 때문이었다. 이게 왜 406인지는 잘 납득이 안 되지만 그렇다고 ... JPASpringQuerydslTILJPA 🔥 TIL - Day 66 Jpa exist 최적화 📌 JPA에서 exist 쿼리 사용하기 JPA의 도움을 받는다면 exist 쿼리를 사용하는 것은 쉬운 일이다. 내가 이번에 구현하고자 한 기능은 조작 (수정,삭제 ..)하고자 하는 게시글의 주인이 현재 로그인된 사용자가 맞는가 에 대한 것이다. 이번에 내가 조건으로 사용한 칼럼은 2개이지만 이보다 많은 조건을 필요로 하는 쿼리가 필요할 수 있다. 네이밍 기반 쿼리가 너무 복잡해지는 경우 보통... SpringJPAQuerydslJPA 멀티 모듈에서 QueryDSL 설정 방법 Gradle 6.3 core 모듈은 여러 하위 모듈에서 공통으로 사용하는 도메인 계층을 관리합니다. settings.gradle gradle이 빌드 과정에서 settings.gradle 파일을 참조하기 때문에 반드시 root 모듈과 sub 모듈을 include 해야합니다. settings.gradle 파일 저같은 경우에는 core 모듈에서 도메인 영역인 Entity, Repository를 가... gradleJavaQuerydslSpring bootJava
JPA + QueryDSL 계층형 댓글, 대댓글 구현(2) 이번엔 전편에 이어서 계층형 댓글, 대댓글을 다시 리팩토링해볼 예정이다. 이전 게시글에서는 계층형 댓글, 대댓글을 구현은 되었지만 N+1 문제가 있었다. 이번에는 그 N+1 문제를 해결해 볼 것이다. 위의 로직은 이 전편에서 만들었던 N+1 문제가 발생하던 로직이다. 만약 부모 댓글의 개수가 100개라면 100번 이상의 쿼리가 나가게 되는 아주 좋지 못한 코드이다..ㅠ 🥲 위의 코드는 게시글... JavaJPASpringbootQuerydslJPA 게시글 생성 + 파일 업로드(SpringBoot + JPA + AWS S3) 이번 글에서는 게시글 생성 + 파일 업로드(Aws S3)를 다룰 것이다. 먼저 게시글을 생성 하려면 제목, 내용, 카테고리 이름, 이미지파일을 프론트에서 넘겨받아야 한다. 이미지 파일은 List로 여러 개의 파일을 받을 것이다. 이미지 파일을 전송할 때는 FormData 방식으로 전달을 해야 하고, Json 타입의 제목, 내용, 카테고리 이름을 같이 보내기 때문에 @RequestPart를 사... S3awsSpringbootQuerydslJPAJPA [Project] Kotlin + Spring Boot + Querydsl을 이용한 주소 검색 API 회사 서비스에서 외부 주소 API가 자주 삑난다고 주소 검색 내재화 API를 만든다는 말이 있었다. Server : Spring Boot, Spring Data Jpa, Querydsl 2. JPA Dialect를 이용한 match-against 기능 등록 순수 JPQL에는 match-against 기능을 지원하지 않는다. 이를 사용하기 위해 JPA의 Dialect를 알아야 한다. JPA는 ... projectSpringbootQuerydslQuerydsl 실무 활용 - 순수 JPA 와 Querydsl MemberJpaRepository 생성자에서 JPAQueryFactory를 새로 만들어 엔티티 매니저를 주입시키는 것을 볼 수 있다. 이 방법 말고도 JPAQueryFactory를 빈으로 따로 만들고 생성자에 그냥 주입만 시키는 방법도 있다. 이 경우에는 @RequiredArgsConstructor를 통해 더 간편한 코드를 짤 수 있다는 장점이 있다. 하지만, 이 방법은 테스트를 진행할때 ... JPASpringQuerydslJPA [Spring] QueryDSL로 조건검색 API를 만들어보자(동적 쿼리) 개발을 하다보면 위의 그림 처럼 여러가지 조건을 가지고 검색을 해야할 경우가 많이 있습니다. 조건이 고정되어 있다면 조금 쉽겠지만 사용자가 필요에 따라 조건을 추가하거나 뺄 수 있다면 슬슬 머리가 아픕니다. 요런식으로 if문을 통해서 구현을 조건 검색을 구현 할 수 있으나 이 경우 조건이 3개만 되도 6개의 if문을 써야하고 4개가 되면 무려 24개의 if문을 사용해야합니다. 조금 더 프로그... 동적쿼리JPASpring조건검색BooleanExpressionsqlQuerydslrepositoryBooleanExpression JPA Auditing 커스텀 & queryDSL Java에서 ORM 기술인 JPA를 사용하여 도메인을 관계형 데이터베이스 테이블에 매핑할 때 공통적으로 도메인들이 가지고 있는 필드나 컬럼들이 존재합니다. 대표적으로 생성일자, 수정일자, 식별자 같은 필드 및 컬럼이 있습니다. 도메인마다 공통으로 존재한다는 의미는 결국 코드가 중복된다는 말과 일맥상통합니다. 그래서 JPA에서는 Audit이라는 기능을 제공하고 있습니다. Audit은 감시하다,... auditJPAQuerydslJPA JPA + QueryDSL 계층형 댓글, 대댓글 구현(1) JPA + QueryDSL을 이용한 계층형 댓글, 대댓글 Post 엔티티 클래스 post 와 comment의 관계는 1:N 관계이다. comment는 자기 자신을 selfjoin을 하고있으며, 부모 댓글이 삭제될 시 하위 댓글들도 같이 삭제가 된다. 여기서 처음 Post를 조회할 때 컬렉션 객체는 바로 가져올 수 없으므로 따로 처리를 해주어야 한다. 먼저 viewCount를 조회 시 자동으로... SpringbootQuerydslJPAJPA 기본 Q-Type QClass를 사용할 때 앞선 코드에서는 위 코드처럼 사용했다. QMember로 들어가보면 아래와 같이 QMember에 static 메소드가 있다. 이것을 이용해 좀 더 편리하게 QMember 인스턴스를 만들 수 있다. 여기서 QMember.member를 static으로 선언해 아래처럼 더 줄일 수 있다. QMember의 static메소드를 다시 보자. public static final Q... QuerydslQuerydsl 🔥 TIL - Day 63 팀 프로젝트 2일차! 📌 오늘의 구현이슈 406 not acceptable 코드리뷰 상세정보 쿼리 최적화 📌 406 not acceptable 에러코드에 해당하는 것 같다. 발생하는 케이스가 굉장히 많은 것 같다. 나의 경우 Springboot 환경에서 발생했다. 일단 에러의 이유는 응답객체를 Json으로 변환하지 못하는 문제 때문이었다. 이게 왜 406인지는 잘 납득이 안 되지만 그렇다고 ... JPASpringQuerydslTILJPA 🔥 TIL - Day 66 Jpa exist 최적화 📌 JPA에서 exist 쿼리 사용하기 JPA의 도움을 받는다면 exist 쿼리를 사용하는 것은 쉬운 일이다. 내가 이번에 구현하고자 한 기능은 조작 (수정,삭제 ..)하고자 하는 게시글의 주인이 현재 로그인된 사용자가 맞는가 에 대한 것이다. 이번에 내가 조건으로 사용한 칼럼은 2개이지만 이보다 많은 조건을 필요로 하는 쿼리가 필요할 수 있다. 네이밍 기반 쿼리가 너무 복잡해지는 경우 보통... SpringJPAQuerydslJPA 멀티 모듈에서 QueryDSL 설정 방법 Gradle 6.3 core 모듈은 여러 하위 모듈에서 공통으로 사용하는 도메인 계층을 관리합니다. settings.gradle gradle이 빌드 과정에서 settings.gradle 파일을 참조하기 때문에 반드시 root 모듈과 sub 모듈을 include 해야합니다. settings.gradle 파일 저같은 경우에는 core 모듈에서 도메인 영역인 Entity, Repository를 가... gradleJavaQuerydslSpring bootJava