Home
>
Spring
>
π[Spring] JPA μ°κ΄κ΄κ³μ λν μΆκ°μ μΈ κΈ°λ₯λ€μλ 무μμ΄ μμκΉμ? - μ°κ΄κ΄κ³ μ¬μ©μ μ£Όμμ .
Spring
Framework
π[Spring] JPA μ°κ΄κ΄κ³μ λν μΆκ°μ μΈ κΈ°λ₯λ€μλ 무μμ΄ μμκΉμ? - μ°κ΄κ΄κ³ μ¬μ©μ μ£Όμμ .
- JPAμμ μ°κ΄κ΄κ³λ₯Ό μ¬μ©ν λλ μ¬λ¬κ°μ§ μ£Όμν΄μΌ ν μ¬νμ΄ μμ΅λλ€.
1οΈβ£ μ°κ΄κ΄κ³μ μ£ΌμΈ μ€μ .
- μ°κ΄κ΄κ³μμ μ£ΌμΈκ³Ό λΉμ£ΌμΈμ μ¬λ°λ₯΄κ² μ€μ ν΄μΌ ν©λλ€.
- μ£ΌμΈμ΄ μλ μͺ½μμ μ°κ΄κ΄κ³λ₯Ό μμ ν΄λ λ°μ΄ν°λ² μ΄μ€μλ λ°μλμ§ μκΈ° λλ¬Έμ, κ΄κ³ μ£ΌμΈμ λͺ
νν μ§μ νκ³ μ£ΌμΈμ ν΅ν΄ κ΄κ³λ₯Ό κ΄λ¦¬ν΄μΌ ν©λλ€.
- μλ₯Ό λ€μ΄, μλ°©ν₯ μ°κ΄κ΄κ³μμ mappedBy μμ±μ μ λνΈ μ€μ νμ§ μμΌλ©΄ λΆνμν μΏΌλ¦¬κ° λ°μν μ μμ΅λλ€.
2οΈβ£ μ§μ° λ‘λ©(Lazy Loading)κ³Ό μ¦μ λ‘λ©(Eager Loading).
- μ°κ΄λ μν°ν°λ₯Ό μΈμ λ‘λν μ§μ λ°λΌ μ±λ₯μ΄ ν¬κ² μν₯μ λ°μ μ μμ΅λλ€.
- FetchType.LAZYλ νμν μμ μ λ°μ΄ν°λ₯Ό λ‘λνμ§λ§, FatchType.EAGERλ μν°ν°λ₯Ό μ‘°νν λ μ¦μ μ°κ΄λ λͺ¨λ λ°μ΄ν°λ₯Ό λ‘λνλ―λ‘, νμ μ΄μμ λ°μ΄ν°λ₯Ό κ°μ Έμ μ±λ₯μ΄ μ νλ μ μμ΅λλ€.
- μλ₯Ό λ€μ΄,
@OneToMany
κ΄κ³μμ EAGER λ‘λ©μ μ¬μ©νλ©΄ μμνμ§ λͺ»ν λλμ μΏΌλ¦¬κ° λ°μν μ μμΌλ―λ‘ μ£Όμν΄μΌ ν©λλ€.
3οΈβ£ 무ν 루ν λ¬Έμ .
- μλ°©ν₯ μ°κ΄κ΄κ³λ₯Ό JSONμΌλ‘ μ§λ ¬νν λ, μλ‘ μ°Έμ‘°νλ κ°μ²΄λ€μ΄ κ³μ νΈμΆλλ©΄μ 무ν 루νκ° λ°μν μ μμ΅λλ€.
- μ΄λ₯Ό λ°©μ§νκΈ° μν΄
@JsonIgnore
λλ @JsonManagedReference
/ @JsonBackReference
κ°μ μ΄λ
Έν
μ΄μ
μ μ¬μ©ν΄ μ§λ ¬ν λμμμ μ μΈν μ μμ΅λλ€.
- μ€νλ§κ³Ό κ°μ μΉ μ ν리μΌμ΄μ
μμ μ΄λ₯Ό μ²λ¦¬νμ§ μμΌλ©΄ 무ν 루νκ° λ°μνμ¬ μλ²κ° μ€λ¨λ μ μμ΅λλ€.
4οΈβ£ μ°κ΄κ΄κ³ 맀ν μ λ°μ΄ν° λ¬΄κ²°μ± μ£Όμ.
- μν°ν°μ μνκ° μΌκ΄λλλ‘ μ°κ΄κ΄κ³ μμͺ½μ λͺ¨λ μ€μ νλ κ²μ΄ μ€μν©λλ€.
- μλ₯Ό λ€μ΄, μλ°©ν₯ κ΄κ³μμ νμͺ½λ§ κ΄κ³λ₯Ό μ€μ νλ©΄ λ€λ₯Έ μͺ½μμλ κ΄κ³κ° μλ κ²μΌλ‘ μ΅μλ μ μμ΅λλ€.
- λ μν°ν°μ λν΄ μλ°©ν₯ κ΄κ³λ₯Ό μ€μ ν λλ, μμͺ½ νλλ₯Ό λͺ¨λ μ€μ νλ νΌνΌ λ©μλλ₯Ό λ§λλ κ²μ΄ μ’μ΅λλ€.
public void setUserProfile(UserProfile profile) {
this.userProfile = profile;
profile.setUser(this);
}
5οΈβ£ Cascade μ΅μ
μ¬μ© μ£Όμ.
- CascadeType μ΅μ
(CascadeType.PERSIST, CascadeType.REMOVE λ±)μ μ¬μ©ν λλ, μμΉ« λΆνμνκ² μ°κ΄λ λͺ¨λ μν°ν°κ° μμνλκ±°λ μμ λ μ μμ΅λλ€.
- μ°κ΄λ λͺ¨λ μν°ν°λ₯Ό ν λ²μ μμννκ±°λ μμ ν λλ§ μ μ€ν μ¬μ©ν΄μΌ ν©λλ€.
- μλ₯Ό λ€μ΄ CascadeType.REMOVEλ₯Ό μλͺ» μ€μ νλ©΄ λΆλͺ¨ μν°ν° μμ μ μ°κ΄λ μμ μν°ν°λ λͺ¨λ μμ λ μ μμ΅λλ€.
6οΈβ£ N + 1 λ¬Έμ .
- μ¦μ λ‘λ©(FetchType.EAGER)μ μ¬μ©ν λ N+1 λ¬Έμ λ₯Ό μ λ°ν μ μμ΅λλ€.
- μλ₯Ό λ€μ΄, λΆλͺ¨ μν°ν°λ₯Ό μ‘°νν λ μμ μν°ν°λ₯Ό λ§€λ² μ‘°ννλ©΄, μΆκ°μ μΈ μΏΌλ¦¬κ° λ°μν΄ μ±λ₯μ ν° μν₯μ λ―ΈμΉ©λλ€.
- μ΄λ₯Ό ν΄κ²°νκΈ° μν΄ JPQLμ fetch joinμ μ¬μ©νμ¬ νμν λ°μ΄ν°λ₯Ό ν λ²μ μ‘°ννκ±°λ,
@BatchSize
κ°μ μ΅μ
μ κ³ λ €ν μ μμ΅λλ€.
7οΈβ£ λ°μ΄ν° λ³κ²½ μ μ£Όμ.
- JPAλ μν°ν°λ₯Ό μΆμ νλ 1μ°¨ μΊμλ₯Ό κ°μ§κ³ μμ΄ μν°ν°λ₯Ό λ³κ²½νλ©΄ μλμΌλ‘ λ°μ΄ν°λ² μ΄μ€μ λ°μλ©λλ€.
- μ΄λ₯Ό μ΄μ©ν μλ λ°μ κΈ°λ₯μ νΈλ¦¬νμ§λ§, ν νΈλμμ
λ΄μμ κ°μ μν°ν°λ₯Ό μ¬λ¬ λ² μ‘°ννκ±°λ λ³κ²½ν κ²½μ°, λ°μ΄ν° μ ν©μ±μ΄ κΉ¨μ§μ§ μλλ‘ μ£Όμν΄μΌ ν©λλ€.
8οΈβ£ 볡μ‘ν μ°κ΄κ΄κ³ μ€κ³ μ μ μ€ν¨.
-
λ§μ μ°κ΄κ΄κ³κ° 볡μ‘νκ² μ½νλ©΄ μ±λ₯μ λ¬Έμ κ° μκΈΈ μ μκ³ , μ½λμ μ μ§ λ³΄μμ±μ΄ λ¨μ΄μ§λλ€.
- μν©μ λ°λΌ λΆνμν μ°κ΄κ΄κ³λ μ κ±°νκ³ βλ¨λ°©ν₯ κ΄κ³βλ₯Ό μ¬μ©νλ κ²μ΄ μ’μ΅λλ€.
- 볡μ‘ν μ°κ΄κ΄κ³λ₯Ό λ¨μννκ³ , μ°κ΄λ μν°ν° μ‘°νκ° νμν λλ§ μΏΌλ¦¬λ₯Ό μννλλ‘ μ€κ³νλ©΄ μ±λ₯κ³Ό μ μ§λ³΄μμ±μ΄ ν₯μλ©λλ€.
9οΈβ£ μμ½.
- μ°κ΄κ΄κ³ μ£ΌμΈμ μ νν μ€μ νκ³ , 무ν 루νμ λ°μ΄ν° 무결μ±μ μ£Όμν©λλ€.
- μ§μ° λ‘λ©μ κΈ°λ³ΈμΌλ‘ νκ³ , νμμ λ°λΌ μ¦μ λ‘λ©κ³Ό νμΉ μ‘°μΈμ μ¬μ©ν©λλ€.
- N+1 λ¬Έμ λ₯Ό λ°©μ§νλ©°, Cascade μ΅μ
μ μ μ€ν μ¬μ©ν©λλ€.
- 볡μ‘ν μ°κ΄κ΄κ³λ νΌνκ³ λ¨μνν μ μλ ꡬ쑰λ₯Ό μ ννλ κ²μ΄ μ’μ΅λλ€.