SlideShare uma empresa Scribd logo
1 de 35
Querydsl
Central MakeUs Challenge 9기 Server 무무 / 고범석
시작하기 전에
왜 써야하는지 체감하는게 이번 발표에서 전달하고자 하는 바
메서드를 설명하는 것 자체가 무의미하다 판단
JPA의 이해도가 어느 정도 필요
목차
1. 상황 설정
2. 요구사항
3. 요구사항 수정과 DTO를 통한 개선
4. Querydsl로 문제점 개선 및 설정 방법
5. 느낀 점과 유의사항
상황 설정 - 인물
👶
응애 나 신입 백엔드 개발자 무무
JPA 사용한지 얼마 안됨
API를 설계해야 하는 상황
상황 설정 - DB
상황 설정 - Entity, 양방향
상황 설정 - 요구사항
🧑🧑💻
하나의 게시글과 댓글들을 조회하는
API를 만들어주세요
게시글에는 ID, 제목, 내용
댓글은 ID와 내용이 필요해요
Entity 그대로 반환 ?
Entity 그대로 반환 ?
👶 ??
JSON 변환 시 문제 발생
Entity 그대로 반환 해결
👶 !
상황 설정 - 요구사항 수정
🧑🧑💻
응답 객체에서
게시글 내용, 댓글 내용 모두
“contents” 라는 필드를 쓰는데 헷갈려요
Entity 수정하기
👶
이게 맞아..?
Entity 수정하기
👶
DTO가 있었지!
DTO 만들기
서비스 레이어에서 DTO로 변환 후 반환
엔티티들의 덩치가 커진다면?
컬럼이 많아지고 단순 조회 시
불필요한 컬럼들까지 @Repository에서
조회하는 상황 발생
필요한 컬럼만 골라서 조회해보기
필요한 컬럼만 골라서 조회해보기
👶
맨날 이래야하나?
Querydsl 사용
👶
build.gradle
QType
Preference (.gitignore)
Querydsl Preference
build.gradle task 추가
새로운 Q 타입 생성 시 꼬임 방지를 위해 task 추가
@Configuration
DTO 수정
DTO 수정
Repository
결과
써보고 느낀 점
- 컴파일 에러를 잡아주고 타입 세이프한 쿼리를 만들어 주는게 큰 장점이라 생각
- 직접 써본 바로는 SQL에서 사용할 수 있는건 거의 다 있음 (서브쿼리는 예외)
- 동적 쿼리
- 실제 SQL과 거의 유사한 형태라서 가독성도 나쁘지 않음
능사는 아님
- 쿼리를 좀 더 편하고 안정적으로 작성해주는 쿼리 빌더일 뿐
- 즉, JPA에서 발생하는 문제들은 고스란히 Querydsl에서도 존재
- @QueryProjection을 사용하는 DTO를 여러 계층에서 사용할 경우 해당 계층이
Querydsl에 의존적이어서 Trade-off
참고자료
1. Gradle 부가 Task 작업
http://honeymon.io/tech/2020/07/09/gradle-annotation-processor-with-querydsl.html
2. Annotation 기반의 Querydsl 설정
https://gaemi606.tistory.com/entry/Spring-Boot-Querydsl-%EC%B6%94%EA%B0%80-Gradle-7x
Github Repository
https://github.com/kobeomseok95/querydsl-session
👋

Mais conteúdo relacionado

Mais procurados

Jpa 잘 (하는 척) 하기
Jpa 잘 (하는 척) 하기Jpa 잘 (하는 척) 하기
Jpa 잘 (하는 척) 하기경원 이
 
유지보수 가능한 개발 원칙
유지보수 가능한 개발 원칙유지보수 가능한 개발 원칙
유지보수 가능한 개발 원칙Hyosang Hong
 
VSTS와 Azure를 이용한 팀 프로세스 관리
VSTS와 Azure를 이용한 팀 프로세스 관리VSTS와 Azure를 이용한 팀 프로세스 관리
VSTS와 Azure를 이용한 팀 프로세스 관리Gyuwon Yi
 
SpringDataJPA - 스프링 캠프
SpringDataJPA - 스프링 캠프SpringDataJPA - 스프링 캠프
SpringDataJPA - 스프링 캠프Younghan Kim
 
Domain-Driven-Design 정복기 2탄
Domain-Driven-Design 정복기 2탄Domain-Driven-Design 정복기 2탄
Domain-Driven-Design 정복기 2탄Suhyeon Jo
 
Daejeon IT Developer Conference Hibernate3
Daejeon IT Developer Conference Hibernate3Daejeon IT Developer Conference Hibernate3
Daejeon IT Developer Conference Hibernate3plusperson
 
스프링 스터디 1장
스프링 스터디 1장스프링 스터디 1장
스프링 스터디 1장Seongchan Kang
 

Mais procurados (10)

Java JPA
Java JPAJava JPA
Java JPA
 
Jpa 잘 (하는 척) 하기
Jpa 잘 (하는 척) 하기Jpa 잘 (하는 척) 하기
Jpa 잘 (하는 척) 하기
 
유지보수 가능한 개발 원칙
유지보수 가능한 개발 원칙유지보수 가능한 개발 원칙
유지보수 가능한 개발 원칙
 
VSTS와 Azure를 이용한 팀 프로세스 관리
VSTS와 Azure를 이용한 팀 프로세스 관리VSTS와 Azure를 이용한 팀 프로세스 관리
VSTS와 Azure를 이용한 팀 프로세스 관리
 
SpringDataJPA - 스프링 캠프
SpringDataJPA - 스프링 캠프SpringDataJPA - 스프링 캠프
SpringDataJPA - 스프링 캠프
 
J2 Ee
J2 EeJ2 Ee
J2 Ee
 
Domain-Driven-Design 정복기 2탄
Domain-Driven-Design 정복기 2탄Domain-Driven-Design 정복기 2탄
Domain-Driven-Design 정복기 2탄
 
Daejeon IT Developer Conference Hibernate3
Daejeon IT Developer Conference Hibernate3Daejeon IT Developer Conference Hibernate3
Daejeon IT Developer Conference Hibernate3
 
스프링 스터디 1장
스프링 스터디 1장스프링 스터디 1장
스프링 스터디 1장
 
DDD start 1장
DDD start 1장DDD start 1장
DDD start 1장
 

Semelhante a Querydsl 발표

Jpa 쿼리 포함 자료
Jpa 쿼리 포함 자료Jpa 쿼리 포함 자료
Jpa 쿼리 포함 자료Hyosang Hong
 
Sql 중심 코드 탈피
Sql 중심 코드 탈피Sql 중심 코드 탈피
Sql 중심 코드 탈피ssuser776e2d
 
보다 나은 웹 어플리케이션 설계
보다 나은 웹 어플리케이션 설계보다 나은 웹 어플리케이션 설계
보다 나은 웹 어플리케이션 설계Eb Styles
 
초보개발자의 TDD 체험기
초보개발자의 TDD 체험기초보개발자의 TDD 체험기
초보개발자의 TDD 체험기Sehun Kim
 
신입 웹 개발자 포트폴리오 / 댓글 게시판
신입 웹 개발자 포트폴리오 / 댓글 게시판신입 웹 개발자 포트폴리오 / 댓글 게시판
신입 웹 개발자 포트폴리오 / 댓글 게시판hyeonjae Cheon
 
Sql 중심 코드 탈피 발표자료
Sql 중심 코드 탈피 발표자료Sql 중심 코드 탈피 발표자료
Sql 중심 코드 탈피 발표자료ssuser776e2d
 
피플펀드 웹서비스 성능개선기(+초기 스타트업의 개발방법론) 20171220
피플펀드 웹서비스 성능개선기(+초기 스타트업의 개발방법론) 20171220피플펀드 웹서비스 성능개선기(+초기 스타트업의 개발방법론) 20171220
피플펀드 웹서비스 성능개선기(+초기 스타트업의 개발방법론) 20171220Seomgi Han
 
테스트개선지원 사례 - 웹어플리케이션대상
테스트개선지원 사례 - 웹어플리케이션대상테스트개선지원 사례 - 웹어플리케이션대상
테스트개선지원 사례 - 웹어플리케이션대상SangIn Choung
 
유니티 REST API를 사용한 파이어 베이스의 데이터 베이스 사용.
유니티 REST API를 사용한 파이어 베이스의 데이터 베이스 사용.유니티 REST API를 사용한 파이어 베이스의 데이터 베이스 사용.
유니티 REST API를 사용한 파이어 베이스의 데이터 베이스 사용.ssuser6dd171
 
웹사이트기획 및 관리
웹사이트기획 및 관리웹사이트기획 및 관리
웹사이트기획 및 관리봉조 김
 
유니티3D 그리고 웹통신
유니티3D 그리고 웹통신유니티3D 그리고 웹통신
유니티3D 그리고 웹통신현욱 김
 
Specification In DDD
Specification In DDDSpecification In DDD
Specification In DDDJay Kim
 
Spring-Boot (springcamp2014)
Spring-Boot (springcamp2014)Spring-Boot (springcamp2014)
Spring-Boot (springcamp2014)sung yong jung
 
ksh portfolio 02
ksh portfolio 02ksh portfolio 02
ksh portfolio 02SunhoKo2
 
GraphQL in Action - REST와 이별할 때 생각해야 하는 것들
GraphQL in Action - REST와 이별할 때 생각해야 하는 것들GraphQL in Action - REST와 이별할 때 생각해야 하는 것들
GraphQL in Action - REST와 이별할 때 생각해야 하는 것들Kivol
 
김윤환_포트폴리오
김윤환_포트폴리오김윤환_포트폴리오
김윤환_포트폴리오Yun-hwan Kim
 

Semelhante a Querydsl 발표 (20)

Jpa 쿼리 포함 자료
Jpa 쿼리 포함 자료Jpa 쿼리 포함 자료
Jpa 쿼리 포함 자료
 
Sql 중심 코드 탈피
Sql 중심 코드 탈피Sql 중심 코드 탈피
Sql 중심 코드 탈피
 
보다 나은 웹 어플리케이션 설계
보다 나은 웹 어플리케이션 설계보다 나은 웹 어플리케이션 설계
보다 나은 웹 어플리케이션 설계
 
초보개발자의 TDD 체험기
초보개발자의 TDD 체험기초보개발자의 TDD 체험기
초보개발자의 TDD 체험기
 
신입 웹 개발자 포트폴리오 / 댓글 게시판
신입 웹 개발자 포트폴리오 / 댓글 게시판신입 웹 개발자 포트폴리오 / 댓글 게시판
신입 웹 개발자 포트폴리오 / 댓글 게시판
 
Sql 중심 코드 탈피 발표자료
Sql 중심 코드 탈피 발표자료Sql 중심 코드 탈피 발표자료
Sql 중심 코드 탈피 발표자료
 
피플펀드 웹서비스 성능개선기(+초기 스타트업의 개발방법론) 20171220
피플펀드 웹서비스 성능개선기(+초기 스타트업의 개발방법론) 20171220피플펀드 웹서비스 성능개선기(+초기 스타트업의 개발방법론) 20171220
피플펀드 웹서비스 성능개선기(+초기 스타트업의 개발방법론) 20171220
 
Portfolio
PortfolioPortfolio
Portfolio
 
테스트개선지원 사례 - 웹어플리케이션대상
테스트개선지원 사례 - 웹어플리케이션대상테스트개선지원 사례 - 웹어플리케이션대상
테스트개선지원 사례 - 웹어플리케이션대상
 
유니티 REST API를 사용한 파이어 베이스의 데이터 베이스 사용.
유니티 REST API를 사용한 파이어 베이스의 데이터 베이스 사용.유니티 REST API를 사용한 파이어 베이스의 데이터 베이스 사용.
유니티 REST API를 사용한 파이어 베이스의 데이터 베이스 사용.
 
웹사이트기획 및 관리
웹사이트기획 및 관리웹사이트기획 및 관리
웹사이트기획 및 관리
 
Jpa more
Jpa moreJpa more
Jpa more
 
유니티3D 그리고 웹통신
유니티3D 그리고 웹통신유니티3D 그리고 웹통신
유니티3D 그리고 웹통신
 
Specification In DDD
Specification In DDDSpecification In DDD
Specification In DDD
 
Spring-Boot (springcamp2014)
Spring-Boot (springcamp2014)Spring-Boot (springcamp2014)
Spring-Boot (springcamp2014)
 
ksh portfolio 02
ksh portfolio 02ksh portfolio 02
ksh portfolio 02
 
Web micro blog
Web micro blogWeb micro blog
Web micro blog
 
GraphQL in Action - REST와 이별할 때 생각해야 하는 것들
GraphQL in Action - REST와 이별할 때 생각해야 하는 것들GraphQL in Action - REST와 이별할 때 생각해야 하는 것들
GraphQL in Action - REST와 이별할 때 생각해야 하는 것들
 
김윤환_포트폴리오
김윤환_포트폴리오김윤환_포트폴리오
김윤환_포트폴리오
 
My di container
My di containerMy di container
My di container
 

Querydsl 발표