Skip to content

Latest commit

Β 

History

History
51 lines (35 loc) Β· 2.53 KB

proxy.md

File metadata and controls

51 lines (35 loc) Β· 2.53 KB

ν”„λ‘μ‹œ

ν”„λ‘μ‹œλž€?

사전적 μ˜λ―Έλ‘œλŠ” Proxy, λŒ€λ¦¬(ν–‰μœ„)λ‚˜ λŒ€λ¦¬κΆŒ, λŒ€λ¦¬νˆ¬ν‘œλ₯Ό λœ»ν•˜λ©°, μ‹œμŠ€ν…œμ˜ 일뢀 κΈ°λŠ₯을 λ‹€λ₯Έ 것이 μž„μ‹œλ‘œ λŒ€ν–‰ν•˜λŠ” 것을 λ§ν•œλ‹€.

JPAλ₯Ό μ‚¬μš©ν•  λ•Œ ν”„λ‘μ‹œλŠ” κ°€μ§œ μ—”ν‹°ν‹° 객체λ₯Ό μ˜λ―Έν•œλ‹€.

  • μ‹€μ œ 클래슀λ₯Ό 상속 λ°›μ•„μ„œ λ§Œλ“€μ–΄μ§„λ‹€.
  • μ‹€μ œ ν΄λž˜μŠ€μ™€ 겉 λͺ¨μ–‘이 κ°™λ‹€.
  • ν”„λ‘μ‹œ κ°μ²΄λŠ” μ‹€μ œ 객체의 μ°Έμ‘°(target)λ₯Ό λ³΄κ΄€ν•œλ‹€.
  • ν”„λ‘μ‹œ 객체λ₯Ό ν˜ΈμΆœν•˜λ©΄ ν”„λ‘μ‹œ κ°μ²΄λŠ” μ‹€μ œ 객체의 λ©”μ†Œλ“œλ₯Ό ν˜ΈμΆœν•œλ‹€.
  • em.find() λ₯Ό ν˜ΈμΆœν•˜λ©΄ 데이터 베이슀λ₯Ό ν†΅ν•΄μ„œ μ‹€μ œ μ—”ν‹°ν‹° 객체λ₯Ό μ‘°νšŒν•˜μ§€λ§Œ
  • em.getReference() λ₯Ό ν˜ΈμΆœν•˜λ©΄ λ°μ΄ν„°λ² μ΄μŠ€ 쑰회λ₯Ό λ―Έλ£¨λŠ” ν”„λ‘μ‹œ 객체λ₯Ό μ‘°νšŒν•œλ‹€.

ν”„λ‘μ‹œ 객체 μ΄ˆκΈ°ν™”

  • em.getReference(Member.class, "id1");λ₯Ό ν˜ΈμΆœν•œλ‹€κ³  μ¦‰μ‹œ λ°μ΄ν„°λ² μ΄μŠ€μ— 쑰회 쿼리가 λ‚ λΌκ°€λŠ” 것이 μ•„λ‹ˆλ‹€.
  • μ˜μ†μ„± μ»¨ν…μŠ€νŠΈμ— ν”„λ‘μ‹œ 객체만 생성해 놓고, λ‚˜μ€‘μ— Member의 λ©”μ†Œλ“œλ‚˜ μ΄ˆκΈ°ν™” μš”μ²­μ΄ 호좜되면 κ·Έ λ•Œ 쑰회 쿼리λ₯Ό DB에 λ‚ λ €μ„œ μ‹€μ œ μ—”ν‹°ν‹°λ₯Ό μƒμ„±ν•œλ‹€.
  • μ΄λ ‡κ²Œ ν”„λ‘μ‹œ 객체λ₯Ό μ΄μš©ν•˜λ©΄, 데이터λ₯Ό DBμ—μ„œ λ°”λ‘œ κ°–κ³ μ˜€λŠ” μ¦‰μ‹œ λ‘œλ”©,
  • λ‹Ήμž₯ ν•„μš”ν•˜μ§€ μ•Šμ€ λ°μ΄ν„°μ˜ 쑰회λ₯Ό λ‚˜μ€‘μœΌλ‘œ λ―Έλ£¨λŠ” 지연 λ‘œλ”©μ„ μ‚¬μš©ν•  수 μžˆλ‹€.

ν”„λ‘μ‹œμ˜ νŠΉμ§•

  • ν”„λ‘μ‹œ κ°μ²΄λŠ” 처음 μ‚¬μš©ν•  λ•Œ ν•œ 번만 μ΄ˆκΈ°ν™”λœλ‹€.
  • ν”„λ‘μ‹œ κ°μ²΄λŠ” 원본 μ—”ν‹°ν‹°λ₯Ό 상속받기 λ•Œλ¬Έμ—, νƒ€μž… μ²΄ν¬μ‹œ μ£Όμ˜ν•΄μ•Όν•œλ‹€. (== λŒ€μ‹ , instanceof λ₯Ό μ‚¬μš©)
  • μ˜μ†μ„± μ»¨ν…μŠ€νŠΈλŠ” 같은 μ˜μ†μ„± μ»¨ν…μŠ€νŠΈ(같은 νŠΈλžœμž­μ…˜ 레벨)의 μ˜μ†λœ 데이터에 ν•œν•΄μ„œ 동일성을 보μž₯ν•œλ‹€. (== λΉ„κ΅μ‹œ trueλ₯Ό 보μž₯)
    • μ˜μ†μ„± μ»¨ν…μŠ€νŠΈμ— μ°ΎλŠ” 데이터가 이미 μžˆλ‹€λ©΄ em.getReference()λ₯Ό ν˜ΈμΆœν•΄λ„ μ‹€μ œ μ—”ν‹°ν‹°λ₯Ό λ°˜ν™˜ν•œλ‹€.
  • μ€€μ˜μ† μƒνƒœμΌ λ•Œ, ν”„λ‘μ‹œλ₯Ό μ΄ˆκΈ°ν™”ν•˜λ©΄ λ¬Έμ œκ°€ λ°œμƒν•œλ‹€.
    • ν•˜μ΄λ²„λ„€μ΄νŠΈλŠ” 이 λ•Œ org.hibernate.LazyInitializationException μ˜ˆμ™Έλ₯Ό ν„°νŠΈλ¦°λ‹€.

ν”„λ‘μ‹œ 확인 방법

  • ν”„λ‘μ‹œ μΈμŠ€ν„΄μŠ€μ˜ μ΄ˆκΈ°ν™” μ—¬λΆ€ 확인
    • emf.PersistenceUnitUtil.isLoaded(Object entity)
  • ν”„λ‘μ‹œ κ°•μ œ μ΄ˆκΈ°ν™”
    • Hibernate.initialize(entity)
  • JPA ν‘œμ€€μ€ κ°•μ œ μ΄ˆκΈ°ν™” λ©”μ†Œλ“œκ°€ μ—†λ‹€. -> μ—”ν‹°ν‹° 쑰회 λ©”μ†Œλ“œ 호좜

Reference