TIL 75 - [ Spring 최종 프로젝트 ( Day 11 ) - 코드 리팩토링(1) 동적쿼리 QueryDSL ]

2025. 6. 12. 23:28·[내일배움캠프-Sparta]/Spring 6기
반응형

[[내일배움캠프-Sparta]/Spring 6기 ( + TIL )] - TIL 74 - [ Spring 최종 프로젝트 ( Day 10 ) - 코드 리뷰(피드백), 추후 계획, Swagger ]

 

TIL 74 - [ Spring 최종 프로젝트 ( Day 10 ) - 코드 리뷰(피드백), 추후 계획, Swagger ]

오늘은 우리 팀 프로젝트 MVP기능이 예상 기간보다 빠르게 끝나서 ( 주말,공휴일 활용 했으니,, ) 튜터님과 시간을 잡아서 코드리뷰 하는 시간을 가졌다. 💬 코드리뷰 (피드백) 코드리뷰를 해보니

dimenshun.tistory.com

어제 코드 리뷰를 받고 개선해 나가는 작업을 해 나아갔다.

 

그전에 Swagger 라이브러리를 먼저 마무리 짓고, PR을 올려서 병합을 시키고, 새로 다시 dev에서 브랜치를 새로 만들어서 작업을 이어 나갔다.

 

오랜만에 동적 쿼리를 보니까 많이 낯설었다. 구글링해서 찾아보고, 저번에 했던 프로젝트를 참고하면서 진행하였다.

// QueryDSL
implementation 'com.querydsl:querydsl-jpa:5.0.0:jakarta'
annotationProcessor 'com.querydsl:querydsl-apt:5.0.0:jakarta'
annotationProcessor 'jakarta.persistence:jakarta.persistence-api:3.1.0'
annotationProcessor 'jakarta.annotation:jakarta.annotation-api:2.1.1'

우리 프로젝트에 QueryDSL 동적쿼리 라이브러리가 적용되어 있지않아서 일단 먼저 build.gradle에 추가를 시켜주었다.

그리고 QueryDSLconfig클래스를 생성해 Bean을 등록 EntityManager 활성화해주었다.

이러고 이제 서버를 빌드 해주면 이 프로젝트에 있는 Entity들이 Q객체 클래스 형태가 나타나게 된다. ( 두번째 화면 )

이 Q클래스들을 통해서 query문을 코드로 직접 작성할수 있다. ( 동적 쿼리 )

 

이제 컨트롤러에서 원래 존 로직이 category 필터만 requestParam 형태로 하고있는 정적인 형태였다. 하지만 추후에 계속 여러 검색 조건이 생긴다면 if ~ else문 이 기하 급수적으로 많이 나타나기 때문에 동적쿼리로 다뤄보는게 어떻냐는 피드백을 받고, 이번 기회에 QueryDSL을 활용해서 동적쿼리를 해보게 되었다.

우선 우리팀 컨벤션에 맞게 record 형태타입으로 Dto를 다루기로 하였기 때문에 해당 형식으로 Dto를 만들었다.

🙄 Condition?

여기서 Condition 이라는 뜻을 처음 들어보았는데,

Condition이라는 이름은 "검색 조건"을 의미하는 도메인 용어 표현이고,
컨트롤러 → 서비스 → 리포지토리로 넘어갈 때
"이 조건에 따라 문제들을 조회해줘!" 라는 의미를 명확히 전달하기 위해 사용되는 네이밍이라고 한다.

즉, ProblemSearchCondition은
"문제 리스트를 어떤 조건으로 필터링할지 정의한 객체"
라는 걸 알기 쉽도록 이름 붙인 것입니다

 

👀 BooleanBuilder

BooleanBuilder는 where 조건문을 조합하여 좀더 쉽게 표현할수 있는 클래스라고 보면 이해하기가 쉬울것이다.

where() 절 안에 조건을 선택적으로, 순차적으로, 여러 개 조립해서 넣고 싶을 때 사용하는 조건 빌더입니다.

 

  • 조건이 있을 때만 where절에 추가하고 싶을 때 (null 체크, optional 조건 등)
  • 조건이 여러 개일 때 가독성 있게 표현하고 싶을 때
  • 코드 중복을 줄이고 재사용성을 높이고 싶을 때

 

여기까지만 고민해보고 내일 다시 리팩토링을 다룰 생각이다.

 

오랜만에 봐서 그런지 너무 낯설기도 했다. 조금더 QueryDSL에 내용을 알아보아야겠다.

 

내일은 남은 코드 리팩토링과 테스트 코드를 작성할 예정이다.

반응형

'[내일배움캠프-Sparta] > Spring 6기' 카테고리의 다른 글

TIL 77 - [ Spring 최종 프로젝트 ( Day 13 ) - 웹 크롤링 ]  (0) 2025.06.16
TIL 76 - [ Spring 최종 프로젝트 ( Day 12 ) - 코드 리팩토링(2) 동적쿼리 QueryDSL, 트러블 슈팅 ]  (0) 2025.06.13
TIL 74 - [ Spring 최종 프로젝트 ( Day 10 ) - 코드 리뷰(피드백), 추후 계획, Swagger ]  (0) 2025.06.11
TIL 73 - [ Spring 최종 프로젝트 ( Day 9 ) - 5분 브리핑 녹화[1회차], mvp 기능 테스트 ]  (0) 2025.06.10
TIL 72 - [ Spring 최종 프로젝트 ( Day 8 ) - 코드 리팩토링, 5분 브리핑 준비 (1회차) ]  (0) 2025.06.09
'[내일배움캠프-Sparta]/Spring 6기' 카테고리의 다른 글
  • TIL 77 - [ Spring 최종 프로젝트 ( Day 13 ) - 웹 크롤링 ]
  • TIL 76 - [ Spring 최종 프로젝트 ( Day 12 ) - 코드 리팩토링(2) 동적쿼리 QueryDSL, 트러블 슈팅 ]
  • TIL 74 - [ Spring 최종 프로젝트 ( Day 10 ) - 코드 리뷰(피드백), 추후 계획, Swagger ]
  • TIL 73 - [ Spring 최종 프로젝트 ( Day 9 ) - 5분 브리핑 녹화[1회차], mvp 기능 테스트 ]
dimenshun
dimenshun
한 소년의 개발 일기
    반응형
  • dimenshun
    Dev Life Notes
    dimenshun
  • 전체
    오늘
    어제
    • 분류 전체보기 (268)
      • CS (23)
        • 자료구조 (0)
        • 알고리즘 (0)
        • 컴퓨터 구조 (8)
        • 네트워크 (6)
        • 운영체제 (3)
        • DB ( + SQLD ) (5)
        • SW공학 (1)
      • 프로그래밍 (3)
        • Java (0)
        • Spring (0)
        • HTML,CSS (3)
        • JavaScript (0)
      • 개발 툴 (7)
        • Git(버전관리) (1)
        • Docker (3)
        • AWS (2)
        • JSP (1)
      • 코딩테스트(Algorithm) (125)
        • 백준 (6)
        • 프로그래머스 (119)
      • [내일배움캠프-Sparta] (110)
        • Spring 6기 (106)
        • KPT 회고 (3)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    코딩테스트
    백엔드
    CPU
    network
    웹
    docker
    메모리
    내일배움캠프
    네트워크
    Java
    cs
    트랜잭션
    개발자
    Python
    컴퓨터구조
    SQL
    spring
    세션
    db
    Til
    KPT
    web
    AWS
    OS
    운영체제
    배포
    알고리즘
    It
    Testcode
    SQLD
  • hELLO· Designed By정상우.v4.10.3
dimenshun
TIL 75 - [ Spring 최종 프로젝트 ( Day 11 ) - 코드 리팩토링(1) 동적쿼리 QueryDSL ]
상단으로

티스토리툴바