-
Notifications
You must be signed in to change notification settings - Fork 1
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
[FEAT/#297] 배너 목록 조회 기능 구현 #298
Conversation
- 잘못된 Return Type 수정
2가지 조회 Request Parameter 오류에 대한 Failure Code를 선언했습니다. - Filter 파라미터 - Sort 파라미터
요청에 따른 동적 Filtering & Sorting 분기가 필요해 SQL Query를 통한 동적 쿼리 적용보다 Application 단에서의 조건 분기로 처리하는 것이 적합하다고 생각하여 메서드를 통한 전처리를 진행했습니다.
- 복수의 초기 데이터가 필요해 정적 SQL 파일을 통해 Dummy Data를 주입했습니다.
|
기존 `LocalDate.now()` 사용으로 인해 프로덕션/테스트 환경 모두 런타임 환경 기준으로만 실행되는 의존성을 Clock 빈 객체 주입 방식으로 수정 - 테스트 용이성을 높였습니다. - 기존 의존적인 방식으로 인한 Test 실패를 해결했습니다.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
PR 꼭 자세하게 써주기~~! 일단 머지하세용
Related Issue 🚀
Work Description ✏️
PR Point 📸
※ Request Parameter 처리
현재 구현된 방향성은 아래와 같습니다.
#fromParameter
라는 비즈니스 로직 가용 값으로 전환하는 static method를 제공합니다.※ 시스템 시간 의존성 제거
주로 요청 시점 기반 동적 연산이 필요한 경우,
LocalDate.now()
/LocalDateTime.now()
를 통해 현재 시간에 대한 데이터를 조회하게 됩니다.하지만 위와 같이 구현한 경우, 특정 날짜 값과의 연산이 필요한 기능에 대해 Test를 진행하면 에러가 발생할 확률이 높아진다고 생각합니다.
(실제로 CI 단계에서 에러가 발생하는 것을 발견했습니다.)
이에 따라
Clock
객체 주입을 통한LocalDate.now()
/LocalDateTime.now()
호출 방식으로 변경해 해결했습니다.이로써 얻게 된 효용은 아래와 같습니다.
※ DB 조건부(
where
/order by
) 조회 vs Stream 중간 연산 (filter
/sorted
)현재 구현 방식은 후자인 "Stream 중간 연산 (
filter
/sorted
)"을 채택한 방식입니다.Application ↔ DB 간 네트워크 속도 최적화 & 할당되는 메모리 절약을 위해 DB에서 최대한 필터링하는 것이 가장 바람직하지만
위 두 상황을 이유로 본 작업 내용과 같이 구현하게 되었습니다.
이에 따라 추후에 DB 쿼리를 통해 필요한 데이터만 조회할 수 있도록 개선할 계획입니다.
※ 페이지네이션(Pagination)에 대한 고민
이 또한 위 내용과 동일한 상황적 이유와 함께 "단순 기본형 타입 필드로 구성된 객체"라는 이유로 별도 페이지네이션 처리에 대해선 구현하지 않고 전체 배너 정보 리스트를 반환하도록 했습니다.
(+JPA Pagable 전용 메서드까지 추가적인 구현이 필요하기 때문)
하지만 추후 게시하는 배너가 누적될수록 데이터의 양이 방대해지기 때문에 페이지네이션을 고려할 필요가 있습니다.
이에 따라 추후 JPA Pagable 적용을 계획하고 있습니다.