Skip to content

πŸ“— 비동기 νŽ˜μ΄μ§• 예제 μ½”λ“œ.

Notifications You must be signed in to change notification settings

jun-labs/async-paging

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 

History

22 Commits
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

Async Paging

νŽ˜μ΄μ§• 카운트, 데이터 페치 쿼리 뢄리 예제.





πŸ’» ν”„λ‘œκ·Έλž¨ μ‹€ν–‰

λΉŒλ“œ ν›„, ν”„λ‘œμ νŠΈ μ‹€ν–‰ ν•©λ‹ˆλ‹€. μ• ν”Œλ¦¬μΌ€μ΄μ…˜ μ‹€ν–‰ ν›„, 데이터 μ΄ˆκΈ°ν™” μž‘μ—…μ΄ 있기 λ•Œλ¬Έμ— 잠깐 λŒ€κΈ°ν•©λ‹ˆλ‹€.

./gradlew build
java -jar build/libs/paging-async-0.0.1.jar





πŸ“š Content

νŽ˜μ΄μ§•μ—μ„œ 카운트 와 데이터 페칭 두 쿼리가 순차적으둜 μ‹€ν–‰λ©λ‹ˆλ‹€. 이λ₯Ό λΆ„λ¦¬ν•œ ν›„, λΉ„λ™κΈ°λ‘œ μ‘°νšŒν•˜λ©΄ 쑰회 μ„±λŠ₯을 쑰금 더 ν–₯μƒμ‹œν‚¬ 수 μžˆμŠ΅λ‹ˆλ‹€.

@Repository
class UserEntityReadRepository(
    private val queryFactory: JPAQueryFactory,
) : UserReadRepository {

    companion object {
        private val totalCountExpression = numberTemplate(Long::class.java, "count(1)")
    }

    override suspend fun findUsers(
        page: Int,
        size: Int,
    ): Pair<Long, List<User>> = coroutineScope {
        val totalCount = async {
            queryFactory.select(totalCountExpression)
                .from(user)
                .fetchOne() ?: 0L
        }

        val findUsers = async {
            queryFactory.selectFrom(user)
                .offset((page) * size.toLong())
                .limit(10)
                .fetch()
        }
        Pair(totalCount.await(), findUsers.await())
    }
}

단, μ΄λŠ” offset λ°©μ‹μ˜ ν•œκ³„λŠ” λ²—μ–΄λ‚˜μ§€ λͺ»ν•˜λ―€λ‘œ, 데이터가 λ§Žμ„ 수둝 속도가 λŠλ €μ§‘λ‹ˆλ‹€.

About

πŸ“— 비동기 νŽ˜μ΄μ§• 예제 μ½”λ“œ.

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published