Search

Lazy Loading

Date
2025/02/23
Category
WEB
Tag
SpringBoot

Lazy Loading

Lazy Loading은 객체 지ν–₯ ν”„λ‘œκ·Έλž˜λ°μ—μ„œ 자주 μ‚¬μš©λ˜λŠ” νŒ¨ν„΄μœΌλ‘œ, 객체의 ν•„μš”ν•˜μ§€ μ•Šμ€ 데이터λ₯Ό 미리 λ‘œλ“œν•˜μ§€ μ•Šκ³ , μ‹€μ œλ‘œ ν•„μš”ν•  λ•Œ λ‘œλ“œν•˜λŠ” 방식이닀. 이λ₯Ό 톡해 초기 λ‘œλ”© μ‹œκ°„μ„ 쀄이고 λ©”λͺ¨λ¦¬ μ‚¬μš©μ„ μ΅œμ ν™”ν•  수 μžˆλ‹€.

μž₯점

β€’
λ©”λͺ¨λ¦¬ νš¨μœ¨μ„±: ν•„μš”ν•˜μ§€ μ•Šμ€ 데이터λ₯Ό λ‘œλ“œν•˜μ§€ μ•ŠμœΌλ―€λ‘œ λ©”λͺ¨λ¦¬ μ‚¬μš©μ„ 쀄일 수 μžˆλ‹€.
β€’
μ„±λŠ₯ ν–₯상: μ²˜μŒμ— ν•„μš”ν•œ λ°μ΄ν„°λ§Œ λ‘œλ“œν•˜λ―€λ‘œ μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ˜ 초기 응닡 μ‹œκ°„μ΄ λ‹¨μΆ•λœλ‹€.
β€’
λ„€νŠΈμ›Œν¬ μ˜€λ²„ν—€λ“œ κ°μ†Œ: ν΄λΌμ΄μ–ΈνŠΈμ™€ μ„œλ²„ κ°„μ˜ 데이터 μ „μ†‘λŸ‰μ„ 쀄여 λ„€νŠΈμ›Œν¬ μ„±λŠ₯을 ν–₯μƒμ‹œν‚¨λ‹€.

단점

β€’
μ§€μ—°λœ μ„±λŠ₯ μ €ν•˜: 데이터에 μ ‘κ·Όν•  λ•Œλ§ˆλ‹€ 쿼리가 μ‹€ν–‰λ˜λ―€λ‘œ, 반볡적인 접근이 μžˆμ„ 경우 μ„±λŠ₯이 μ €ν•˜λ  수 μžˆλ‹€.
β€’
N+1 문제: μ—°κ΄€λœ 데이터λ₯Ό 반볡적으둜 μ‘°νšŒν•  λ•Œ 쿼리가 N+1번 μ‹€ν–‰λ˜λŠ” λ¬Έμ œκ°€ λ°œμƒν•  수 μžˆλ‹€.

JPAμ—μ„œμ˜ ν™œμš©

JPAμ—μ„œλŠ” μ—”ν‹°ν‹° κ°„μ˜ 관계λ₯Ό μ„€μ •ν•  λ•Œ Lazy Loading을 μ‰½κ²Œ κ΅¬ν˜„ν•  수 μžˆλ‹€. 예λ₯Ό λ“€μ–΄, @OneToMany λ˜λŠ” @ManyToMany κ΄€κ³„μ—μ„œ fetch = FetchType.LAZYλ₯Ό μ§€μ •ν•˜λ©΄ ν•΄λ‹Ή κ΄€κ³„μ˜ 데이터λ₯Ό ν•„μš”ν•  λ•Œλ§Œ λ‘œλ“œν•˜κ²Œ λœλ‹€.