본문 바로가기
회고

TIL_210616

코동이 2021. 6. 17.

1. Facts(사실, 객관)

- 검색 DTO 강의

- 품격 광고 로직 생성

- 품격 회원, 상품 테이블 생성

- 회사 일시불결제 상세페이지 구현

- 컬렉션(1:N) 고급 조회 dto 강의

2. Feelings(느낌, 주관)

- 이전에 패스트캠퍼스 강의에서 들었던 복잡한 고급 dto 조회는 김영한님 실전2강의에서는 v2에 해당할 정도로 노가다 방식이었다. 하지만 그걸 넘어서서 join fetch 방법, 또한 repository에서 바로 dto를 반환하는 방법을 배우면서 좀 더 고급지게 고급 dto를 조회할 수 있는 방법을 알았습니다.

 

- 회사에서 일시불 전용 제품은 상담신청을 제거하고 일시불 버튼만 보이도록 개선해야 했습니다. 회사 내부 시스템의 DB와 연동하여 일시불 여부를 알아내도록 개선했습니다. 회사 내부 시스템을 알아야 연동을 잘 할 수 있기 때문에 도메인과 시스템 파악을 잘 해야겠다는 생각을 했습니다. 단순히 코드를 짜는 것 뿐만 아니라 전체적인 그림을 잘 이해하는 것도 중요합니다.

 

- 그동안 계속 JPA 강의를 듣고 토이프로젝트를 적용하고 고군분투 했습니다. 당근마켓 포맷으로 만드는 프로젝트에서 JPA를 적용하기 위해 다방면으로 뛰었습니다. 여전히 어떤 부분까지 ENUM으로 할지, 1:N N:1은 어떻게 해야할지 고민이 많은데 계속 적용하고 연구해야겠다고 생각합니다.

3. Findings (배운 점)

- 고급 dto를 조회하는 방법을 알았습니다. 여기서 고급 dto란, 보통 리턴하는 dto 안에 계속 연쇄적으로 dto가 있는 상황을 의미합니다. 이 때, ToOne과 같은 상황은 그냥 join fetch를 사용하면 되고, ToMany같은 데이터가 뻥튀기 되는 상황은 적절히 핸들링 해야 합니다. 다음과 같은 방법이 있습니다.

 

1. distinct와 fetch join 이용하기(v3)

-> 가장 생각하기 편한 방법으로, 모든 경우 fetch join을 통해 가져오고, distinct로 조회하면 JPA가 내부적으로 중복되는 상황들을 걸러서 리턴합니다. 한계점으로는 1:N fetch join은 1번만 사용이 가능하고, paging query를 날릴 수 없습니다.

 

2. @BatchSize와 :1에만 fetch join 이용하기(v3.1)

-> paing query가 불가한 것을 완전히 극복하는 방법으로, @BatchSize 혹은 글로벌에 default_batch_fetch_size를 통해 db에서 정한 값만큼 조회를 합니다. 따라서 :N의 경우는 전혀 고려하지 않고 :1만 fetch join을 사용하면 됩니다

 

3. 저장소에서 바로 dto로 조회하기(v4)

-> 이것은 "select new ..."를 통해서 직접 조회합니다. dto를 직접 리턴하는 만큼, dto의 변수를 하나씩 넣어주어야 하는 복잡함이 있지만 성능은 가장 우수합니다

4. Affirmation (자기 선언)

- 나는 너무 나를 몰아부치지 않고 완급을 조절하고 있는 사람이다!

반응형

'회고' 카테고리의 다른 글

TIL_210629  (0) 2021.06.29
TIL_210617  (0) 2021.06.17
TIL_210615  (0) 2021.06.16
TIL_210526  (0) 2021.05.27
TIL_210525  (0) 2021.05.27