νμ¬μ μ
μ¬ν΄μ μ½λλ₯Ό μ΄ν΄λ³΄λ μ€μ
λΆλͺ
ν jpa entity κ°μ²΄μ μ½κΈ° κ³Όμ μ€, λΆλͺ
ν νΈλμμ
μ²λ¦¬κ° νμν μ½λκ° λ³΄μλ€.
μ΄λ₯Όν
λ©΄ Spring Security μΈμ¦μ κ±°μΉκ³ Security Context Holder μ μ μ₯λ UserPrinciple κ°μ²΄
@Target(AnnotationTarget.VALUE_PARAMETER)
@Retention(AnnotationRetention.RUNTIME)
@AuthenticationPrincipal(expression = "#this == 'anonymousUser' ? null : user")
annotation class CurrentUser(val require: Boolean = true)
μ΄λ¬ν μ λ
Έν
μ΄μ
μ ννλ€ μ μμ μΌλ‘ Api μμ νλΌλ―Έν°λ‘ μ£Όμ
λ°μμ μ¬μ©νλ€.
μ΄λ₯Ό ν
λ©΄,
@GetMapping
fun getProject(
@CurrentUser user : User
) : ProjectResponse {
//...
}
μ΄λ¬ν user κ°μ²΄λ₯Ό κ°μ§κ³ μλΉμ€ λ¨μμ μ§μ° λ‘λ©μΌλ‘ getterλ₯Ό ν΅ν΄ μΆκ° νλ‘νΌν°λ₯Ό μ‘°νν λ μ¬μ©νλ€.
λλ ν΄λΉ κ°μ²΄κ° μ€μμ μνλΌκ³ μκ°νμλ€. λΉμ°ν userμμ μ‘°νν λλ @Transactional μ΄ νμν κ±°λΌκ³ μκ°νλ€.
κ·Όλ° μ΄μνκ²λ νΈλμμ
μμ΄ νλ‘νΌν°λ€μ getterλ‘ κ°μ Έμ¬ μ μμλ€.
μκ°μ λ€μ¬ jpa κ°λ
μ μ°Ύμ보λ λμ€, λ΄κ° μκ³ μλ κ°λ
μ΄ νλ μκ°λ, μ 리νκ² λμλ€.
Spring Data JPA μ μμμ± μ»¨ν μ€νΈ μ λ΅
μμμ± μ»¨ν
μ€νΈ μ λ΅μ νΈλμμ
μ λ²μμ μμμ± μ»¨ν
μ€νΈμ μμ‘΄ λ²μκ° κ°μμ μ΄λ₯΄λ μ λ΅μ΄λ€.
νΈλμμ
μ΄ μμ λλ©΄, μμμ± μ»¨ν
μ€νΈκ° μμ± λκ³ ,
νΈλμμ
μ΄ μ’
λ£ λλ©΄, μμμ± μ»¨ν
μ€νΈκ° μ’
λ£ λλ€.
κ·Έλμ λ³΄ν΅ @Transactional μ λΆμ¬ ν¨μλ₯Ό μ μΈνλ€.
μ΄ λ§μ νΈλμμ
λ²μ λ°μ 컨νΈλ‘€λ¬λ λ·° λ¨μ μ€μμ μνκ° λλ€.
ν΄μ, νΈλμμ
λ²μ λ°μμλ λ³κ²½ κ°μ§κ° μΌμ΄λμ§ μλλ€.
νΈλμμ
λ²μ λ°μμ μ§μ° λ‘λ©μ μ¬μ©ν κ²½μ°λ, entityκ° μ€μμ μνμ΄λ―λ‘,
LazyInitializationException μμΈκ° λ°μν κ²μ΄λ€.
μ΄λ₯Ό ν΄κ²°νκΈ° μν΄,
- νμν μν°ν°λ₯Ό 미리 μ¦μλ‘λ© νλ λ°©λ²,
- OSIV λ₯Ό μΌ λκ³ μν°ν°λ₯Ό μμ μνλ‘ μ μ§νλ λ°©λ² λ±μ΄ μλ€.
첫 λ²μ§Έ λ°©λ²μ
Global Fetch μ λ΅μ Eagerλ‘ μ€μ νλ λ°©λ²μΈλ°,
λ무 λ¨μ μ΄ ν¬λ€.
λ°λ‘ N+1 λ¬Έμ κ° λ°μνλ€λ κ²μΌλ‘ μ§μνλ€.
λ λ²μ§Έ λ°©λ²μ
μμ μνλ₯Ό μ μ§νκΈ° μν΄,
DB μμ 컀λ₯μ
μ κ³μ μ μ§νκ² λμ΄ νΈλν½μ΄ λ§μ΄ λͺ°λ¦¬λ μλΉμ€μ κ²½μ° μ±λ₯μ΄ μ νλ μ μλ€.
νΈλμμ μμ΄ μ½κΈ°
λ¨μν μ§μ° λ‘λ©μ ν΅ν΄ λ¨μ μ‘°νλ§ ν κ²½μ°μλ @Transactional μ μ μΈν νμκ° μλ€.
μμ μμ μ½λμμ User Entityλ μ€μμ μνμ΄μ§λ§,
μμμ± μ»¨ν
μ€νΈ μμ²΄κ° νΈλμμ
λ²μ λ°μμλ μ‘°νκ° κ°λ₯νλ―λ‘,
getterλ₯Ό ν΅ν΄ νλ‘νΌν° μ‘°νκ° κ°λ₯νλ€.
fun getCard(user: User) : Card{
return user.card
}
μ΄λ° μμΌλ‘ userμ νλ‘νΌν°μΈ card λ₯Ό λ¨μν μ½λ κ²μ νΈλμμ
μμ΄ κ°λ₯νλ€λ μκΈ°μ΄λ€.
userλ μ€μμ μνμ΄μ§λ§, μμμ± μ»¨ν
μ€νΈλ νΈλμμ
λ²μ λ°μμλ μ½κΈ°κ° κ°λ₯νκΈ° λλ¬Έμ΄λ€.
μμΌλ‘ μ΄λ¬ν μ λ΅μ κΎΈμ€ν μ΄μ©ν μ μμ κ² κ°λ€.
'π JPA' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
MapStruct! JPA Entity λ§€ν κ° μ£Όμν΄μ μ¬μ©νμ (0) | 2024.03.24 |
---|---|
JPA μ§κ³ν¨μ sum μ long μ λ°ννλ€. (0) | 2023.07.26 |
[Spring Data JPA] JPA Enum νλμ κ΄ν λ¬Έμ (1) | 2023.02.21 |
[Spring Data JPA] νλ°© 쿼리μ ν¨λ₯ (feat : JPQL) (0) | 2023.02.01 |
JPA κ°λ μ 리 (0) | 2022.07.15 |