[Feat/#23] 파일 목록 조회 기능 (검색 정렬 페이징)
📋 구현 내용
엑셀 파일 목록 조회 기능
- 동적 검색 조건
- excelInfoId
- eq
- in
- not in
- fileName
- equal
- like
- createdAt
- lt ( minCreatedAt )
- gt ( maxCreatedAt )
- between ( minCreatedAt, maxCreatedAt )
- excelInfoId
- 동적 정렬 조건
- createdAt
- ASC
- DESC
- fileName
- ASC
- DESC
- createdAt
- 페이징 ( limit, offset )
- limit 20 ( 요청 값으로 변경 가능)
- 복합 검색, 정렬 조건
- 위의 조건들이 같이 붙어도 동작해야한다.
- 테스트 코드 작성
🔍 테스트 케이스
- 동적 검색 조건, 페이징
- 동적 정렬 조건, 페이징
- 복합 조건, 페이징
📢 코멘트
- 테스트 코드 작성 시 객체의 생성 날짜를 임의로 설정하기 위해 엔티티에
@SuperBuilder
를 적용해보았지만,save
발생 시 jpa에서 삽입 시간을 강제하여 의미가 없었습니다. - 다행히 생성 날짜를 굳이 바꾸지 않아도 테스트 코드를 작성할 수 있었지만,
@SpringBootTest
에서는 메소드마다 영속성컨텍스트를 비우기 어려워 작성한 테스트 코드를ExcelInfoClassTest
클래스에서ExcelInfoRepository
클래스로 옮겨@DataJpaTest
의 주입을 받아 테스트하였습니다. -
@DataJpaTest
에서도QueryDSL
의존성을 주입받을 수 있도록 관련 설정 파일을 만들었습니다. - 추후
service
계층의 테스트 코드와페이징 성능을 개선해보도록 하겠습니다.- 성능 개선은 커버링 인덱스를 적용하려 했으나,
isDelete
를 인덱스 걸어야 가능하여 잠정 중단.. 하겠습니다.
- 성능 개선은 커버링 인덱스를 적용하려 했으나,
-
FileListRequestDto
의Long excelInfoId
에서List<Long> excelInfoIdList
으로 변경하였습니다.- Array와 List 둘다 사용 가능하지만, Array는 크기만큼 데이터가 들어있지 않으면
not in
연산자에서 에러가 발생합니다.
- Array와 List 둘다 사용 가능하지만, Array는 크기만큼 데이터가 들어있지 않으면
- QueryDSL에서 필요한 데이터만 가져오도록 생성자 프로젝션을 사용하였습니다.
Edited by 곽영일