-
5. 세 번째 요구사항 추가하기 - 책 통계Kotlin/실전! 코틀린과 스프링 부트로 ... 개발 2023. 8. 8. 10:34
32. 책 통계 보여주기 - 프로덕션 코드 개발
1. SQL의 다양한 기능들 ( sum, avg, count, group by, order by)을 이해한다.
2. 간결한 함수형 프로그래밍 기법을 사용해보고 익숙해진다.
3. 동일한 기능을 애플리케이션과 DB로 구현해보고, 차이점을 이해한다.
33. 책 통계 보여주기 - 테스트 코드 개발과 리팩토링
34. 다양한 SQL을 알아보자!
- 살펴볼 SQL 종류 : sum / avg / count / group by / order by
35. 애플리케이션 대신 DB로 기능 구현하기
@Transactional(readOnly = true) fun countLoanedBook(): Int { // return userLoanHistoryRepository.findAllByStatus(UserLoanStatus.LOANED).size return userLoanHistoryRepository.countByStatus(UserLoanStatus.LOANED).toInt() }
- 1. 전체 데이터 쿼리 메모리 로딩 + size
- 2. count 쿼리 타입 변환
- 후자가 DB 및 Network 부하, 애플리케이션 부하가 덜 든다.
ㆍ10만건, 100만건, 1000만건, 1억건 -> 부하를 고려해야 한다.
@Transactional(readOnly = true) fun getBookStatistics(): List<BookStatResponse> { return bookRepository.findAll() // List<Book> .groupBy { book -> book.type } // Map<BookType, List<Book>> .map { (type, books) -> BookStatResponse(type, books.size) } // List<BookStatResponse> }
@Query("SELECT NEW com.group.libraryapp.dto.book.reponse.BookStatResponse(b.type, COUNT(b.id)) FROM Book b GROUP BY b.type") fun getStats(): List<BookStatResponse>
- 1. 전체 데이터 쿼리 메모리 로딩 + grouping
- 2. group by 쿼리
- (상황에 따라 다르지만) 후자가 Network 부하, 애플리케이션 부하가 덜 든다. 인덱스를 이용해 튜닝할 여지가 있다.
- 데이터의 양 / 트래픽 / 다른 비즈니스 요구사항 등에 따라 또 다른 방법을 사용해야 할 수 있다.
ㆍ대용량 통계 처리 배치를 이용한 구조
ㆍ이벤트 발행과 메시징 큐를 이용한 구조
36. 세 번째 요구사항 클리어!
'Kotlin > 실전! 코틀린과 스프링 부트로 ... 개발' 카테고리의 다른 글
7. 마지막 세션 (0) 2023.08.08 6. 네 번째 요구사항 추가하기 - Querydsl (0) 2023.08.08 4. 두 번째 요구사항 추가하기 - 도서 대출 현황 (0) 2023.08.07 3. 첫 번째 요구사항 추가하기 - 책의 분야 (0) 2023.08.05 2. Java 서버를 Kotlin 서버로 리팩토링 (0) 2023.08.02