Home
>
Spring
>
π[Spring] μ°κ΄κ΄κ³λ₯Ό μ¬μ©νλ©΄ 무μμ΄ μ’μκΉμ?
Spring
Framework
π[Spring] μ°κ΄κ΄κ³λ₯Ό μ¬μ©νλ©΄ 무μμ΄ μ’μκΉμ?
- JPAμμ μ°κ΄κ΄κ³λ₯Ό μ¬μ©νλ©΄ κ°μ²΄ μ§ν₯μ μΈ λ°©λ²μΌλ‘ λ°μ΄ν°λ² μ΄μ€μ ν
μ΄λΈ κ° κ΄κ³λ₯Ό νννκ³ , λ°μ΄ν°μ μΌκ΄μ±μ μ μ§νλ©° ν¨μ¨μ μΌλ‘ κ΄λ¦¬ν μ μμ΅λλ€.
- JPA μ°κ΄κ΄κ³λ μ ν리μΌμ΄μ
μμ μν°ν°λ€ κ°μ κ΄κ³λ₯Ό κ°μ²΄ λͺ¨λΈλ‘ κ·Έλλ‘ νννλ―λ‘, SQL μ€μ¬μ λ°μ΄ν°λ² μ΄μ€ μ κ·Όλ³΄λ€ μ§κ΄μ μ΄κ³ μ μ§λ³΄μκ° μ¬μ΄ μ½λ μμ±μ λμ΅λλ€.
1οΈβ£ JPA μ°κ΄κ΄κ³λ₯Ό μ¬μ©νμ λμ μ₯μ .
1οΈβ£ κ°μ²΄ μ§ν₯μ μΈ λ°μ΄ν° λͺ¨λΈλ§.
- μ°κ΄κ΄κ³λ₯Ό ν΅ν΄ μν°ν°λ€μ΄ μ€μ λΉμ¦λμ€ λλ©μΈμμμ μ μ¬νκ² μ°κ²°λμ΄ ννλλ―λ‘, κ°μ²΄ μ§ν₯μ μΈ λ°μ΄ν° λͺ¨λΈλ§μ΄ κ°λ₯ν©λλ€.
- Userμ Orderμ κ΄κ³μ²λΌ μν°ν°κ° μλ‘ μ°Έμ‘°νλ©° κ΄κ³λ₯Ό ννν μ μμ΅λλ€.
- μ΄λ₯Ό ν΅ν΄ λΉμ¦λμ€ λ‘μ§μ μ½λλ‘ λ μμ°μ€λ½κ² ννν μ μμΌλ©°, κ°λ°μκ° λ°μ΄ν°λ² μ΄μ€ ꡬ쑰μ λν κ³ λ―Όλ³΄λ€ λΉμ¦λμ€ λ‘μ§μ λ μ§μ€ν μ μμ΅λλ€.
2οΈβ£ μλμΌλ‘ SQLμ μμ±νμ¬ κ΄λ¦¬ λΆλ΄ κ°μ.
- JPAλ μ°κ΄κ΄κ³λ₯Ό μ€μ νλ©΄ νμν SQLμ μλμΌλ‘ μμ±νκ³ μ€νν΄μ£Όλ―λ‘, μ°κ΄κ΄κ³λ₯Ό μ§μ SQLλ‘ κ΄λ¦¬νλ λΆλ΄μ λμ΄μ€λλ€.
- μλ₯Ό λ€μ΄, Userμ Order κ°μ κ΄κ³κ° μ€μ λμ΄ μμΌλ©΄, User κ°μ²΄μμ Order κ°μ²΄λ₯Ό μ‘°νν λ JPAκ° μλμΌλ‘ SQLμ μμ±ν΄ λ°μ΄ν°λ² μ΄μ€μμ νμν λ°μ΄ν°λ₯Ό κ°μ Έμ΅λλ€.
3οΈβ£ μΌκ΄μ±κ³Ό λ¬΄κ²°μ± μ μ§.
- μ°κ΄κ΄κ³μ Cascade μ΅μ
, orphanRemoval μ΅μ
μ ν΅ν΄ κ°μ²΄ κ° κ΄κ³λ₯Ό JPAκ° κ΄λ¦¬ν΄ μ£Όλ―λ‘, λΆλͺ¨μ μμ μν°ν° κ° μΌκ΄μ±μ μ½κ² μ μ§ν μ μμ΅λλ€.
- λΆλͺ¨ μν°ν°κ° μμ λλ©΄ μμ μν°ν°λ μλμΌλ‘ μμ λκ±°λ μ°κ΄λ μμ μν°ν°κ° Orphan Object(κ³ μ κ°μ²΄)λ‘ λ¨μ§ μλλ‘ κ΄λ¦¬ν μ μμ΄ λ°μ΄ν° 무결μ±μ μ μ§νλ λ° μ 리ν©λλ€.
4οΈβ£ μ±λ₯ μ΅μ ν μ§μ.
- JPAλ μ°κ΄κ΄κ³ μ€μ μ ν΅ν΄ μ§μ° λ‘λ©(Lazy Loading), μ¦μ λ‘λ©(Eager Loading), νμΉ μ‘°μΈ(Fetch Join) λ±μ μ¬μ©νμ¬ νμν λλ§ λ°μ΄ν°λ₯Ό μ‘°νν μ μμ΅λλ€.
- μλ₯Ό λ€μ΄, fetch = FetchType.LAZYλ‘ μ€μ νλ©΄ λ°μ΄ν°λ² μ΄μ€μμ κ΄λ ¨λ λ°μ΄ν°λ₯Ό μ¦μ λ‘λνμ§ μκ³ μ€μ λ‘ νμν λ μ‘°ννκ² λμ΄ μ±λ₯ μ΅μ νκ° κ°λ₯ν©λλ€.
5οΈβ£ λΉμ¦λμ€ λ‘μ§μ μμ§λ ν₯μ.
- μ°κ΄κ΄κ³λ₯Ό μ¬μ©νλ©΄ λλ©μΈ κ°μ²΄ κ°μ κ΄κ³λ₯Ό κ°μ²΄μ§ν₯μ μΈ λ°©μμΌλ‘ μΊ‘μννμ¬ λΉμ¦λμ€ λ‘μ§μ μμ±ν μ μμ΄ μμ§λκ° λμμ§λλ€.
- μλ₯Ό λ€μ΄, Order κ°μ²΄μ addOrderItem() λ©μλλ₯Ό μ μν΄ OrderItemμ μΆκ°ν μ μμ΅λλ€.
- Order κ°μ²΄μ μ°κ΄λ λͺ¨λ OrderItemμ΄ μλμΌλ‘ κ΄λ¦¬λλ―λ‘, λΉμ¦λμ€ λ‘μ§μ΄ λ³΄λ€ μΌκ΄μ± μκ² μ μ§λ©λλ€.
6οΈβ£ 볡μ‘ν 쿼리 μμ± μ΅μν.
- μ°κ΄κ΄κ³λ₯Ό ν΅ν΄ κ°μ²΄ κ°μ μ°Έμ‘°λ₯Ό μ½κ² μ¬μ©ν μ μμΌλ―λ‘, μ§μ μ‘°μΈμ μμ±νλ 볡μ‘ν 쿼리λ₯Ό μ€μΌ μ μμ΅λλ€.
- νΉν μλ°©ν₯ μ°κ΄κ΄κ³λ₯Ό ν΅ν΄ μν°ν° κ° κ΄κ³λ₯Ό μ½κ² νμν μ μμ΄ λΉμ¦λμ€ λ‘μ§μ ꡬνν λ μ½λκ° λ¨μν΄μ§λλ€.
2οΈβ£ μ°κ΄κ΄κ³λ₯Ό μ¬μ©ν μμ μ μ₯μ .
- μλ₯Ό λ€μ΄, Teamκ³Ό Memberκ° μλ°©ν₯ μ°κ΄κ΄κ³λ₯Ό κ°μ§λ κ²½μ°, Team κ°μ²΄μμ Member κ°μ²΄λ₯Ό μ½κ² μ‘°νν μ μμ΅λλ€.
Team team = entityManager.find(Team.class, teamId);
List<Member> members = team.getMembers();
- μμ κ°μ΄ Teamμμ Memberλ₯Ό μ½κ² μ‘°νν μ μμΌλ©°, 볡μ‘ν SQLμ μμ±ν νμ μμ΄ JPAκ° μ°κ΄κ΄κ³λ₯Ό κ΄λ¦¬νμ¬ νμν λ°μ΄ν°λ₯Ό μ 곡ν©λλ€.
3οΈβ£ μμ½.
- JPAμμ μ°κ΄κ΄κ³λ₯Ό μ¬μ©νλ©΄ κ°μ²΄ μ§ν₯μ μΌλ‘ λ°μ΄ν° λͺ¨λΈμ νννκ³ , SQLμ μλμΌλ‘ μμ±νλ©°, λ°μ΄ν° 무결μ±κ³Ό μΌκ΄μ±μ μ½κ² μ μ§ν μ μμ΅λλ€. λν, μ§μ° λ‘λ©κ³Ό κ°μ κΈ°λ₯μΌλ‘ μ±λ₯μ μ΅μ ννκ³ , 볡μ‘ν λΉμ¦λμ€ λ‘μ§μ λ μ§κ΄μ μ΄κ³ μμ§λ ₯ μκ² κ΄λ¦¬ν μ μκ² ν©λλ€.