KIMHYEYUN 2022. 11. 21. 19:16
λ°˜μ‘ν˜•

JPA (Java Persistence API)

JAVA 객체와 κ΄€κ³„ν˜• DB 사이λ₯Ό λ§€ν•‘ν•˜λŠ” ORM 기술 ν‘œμ€€
μΈν„°νŽ˜μ΄μŠ€ (= 기술 ν‘œμ€€) μ΄λ―€λ‘œ μ‹€μ œ κ΅¬ν˜„μ²΄λŠ” Hibernate λ“±

μž₯점

  • νŠΉμ • λ°μ΄ν„°λ² μ΄μŠ€μ— μ’…μ†λ˜μ§€ μ•ŠμŒ
    • λ°μ΄ν„°λ² μ΄μŠ€λ§ˆλ‹€ 쿼리문이 μ‘°κΈˆμ”© λ‹€λ₯΄κΈ° λ•Œλ¬Έμ— λ°μ΄ν„°λ² μ΄μŠ€ 변경에 어렀움이 λ§Žμ§€λ§Œ, JPAλŠ” μΆ”μƒν™”ν•œ 데이터 μ ‘κ·Ό 계측을 μ œκ³΅ν•˜λ―€λ‘œ μ„€μ • νŒŒμΌμ— μ‚¬μš© λ°μ΄ν„°λ² μ΄μŠ€λ§Œ μ§€μ •ν•˜λ©΄ 됨
  • 객체 μ§€ν–₯적 ν”„λ‘œκ·Έλž˜λ° 및 생산성 ν–₯상
    • κ°œλ°œμžκ°€ 직접 SQL을 μž‘μ„±ν•˜λŠ” λ°μ΄ν„°λ² μ΄μŠ€ 섀계 μ€‘μ‹¬μ—μ„œ JAVA 객체에 μ§‘μ€‘ν•˜λ„λ‘ 지원
    • ν…Œμ΄λΈ” 컬럼 μˆ˜μ • μ‹œ λ§€ν•‘λœ ν΄λž˜μŠ€λ§Œμ„ λ³€κ²½ν•˜λ©΄ 적용됨

단점

  • λ³΅μž‘ν•œ 쿼리 처리 λΆˆκ°€
  • μžλ™μœΌλ‘œ μƒμ„±λ˜λŠ” 쿼리둜 인해 κ°œλ°œμžκ°€ μ˜λ„ν•˜μ§€ μ•Šμ€ μ„±λŠ₯ μ €ν•˜
  • λ°©λŒ€ν•œ JPA 기술 ν•™μŠ΅μ— ν•„μš”ν•œ μ‹œκ°„κ³Ό λ…Έλ ₯

JPA λ™μž‘ 방식

Entity

ν…Œμ΄ν„°λ² μ΄μŠ€μ˜ ν…Œμ΄λΈ”μ— λŒ€μ‘ν•˜λŠ” 클래슀

  • @Entityκ°€ 뢙은 ν΄λž˜μŠ€λŠ” JPAμ—μ„œ 관리

Entity Manager Factory

μ—”ν‹°ν‹° λ§€λ‹ˆμ € μΈγ„΄μŠ€ν„΄μŠ€λ₯Ό κ΄€λ¦¬ν•˜λŠ” 주체

  • μ‹€ν–‰ μ‹œ ν•œ 개만 λ§Œλ“€μ–΄μ§€λ©° μš”μ²­μ΄ 였면 μ—”ν‹°ν‹° λ§€λ‹ˆμ € 생성

Entity Manager

μ˜μ†μ„± μ»¨ν…μŠ€νŠΈμ— μ ‘κ·Όν•˜μ—¬ 엔티티에 λŒ€ν•œ λ°μ΄ν„°λ² μ΄μŠ€ μž‘μ—…μ„ 제곡

Persistence Context

πŸ™ κ°€μž₯ μ€‘μš”

  • μ—”ν‹°ν‹°λ₯Ό 영ꡬ μ €μž₯ν•˜λŠ” ν™˜κ²½μœΌλ‘œ μ—”ν‹°ν‹° λ§€λ‹ˆμ €λ₯Ό 톡해 μ˜μ†μ„± μ»¨ν…μŠ€νŠΈμ— μ ‘κ·Ό

μ—”ν‹°ν‹° 생λͺ…μ£ΌκΈ°

  • λΉ„μ˜μ†(new) : new ν‚€μ›Œλ“œλ₯Ό 톡해 μƒμ„±λœ μƒνƒœλ‘œ μ˜μ†μ„± μ»¨ν…μŠ€νŠΈμ™€ 관련이 μ—†λŠ” μƒνƒœ
  • μ˜μ†(managed)
    • μ—”ν‹°ν‹°κ°€ μ˜μ†‘μ„ μ»¨ν…μŠ€νŠΈμ— μ €μž₯된 μƒνƒœλ‘œ μ˜μ†μ„± μ»¨ν…μŠ€νŠΈμ— μ˜ν•΄ κ΄€λ¦¬λ˜λŠ” μƒνƒœ
    • μ˜μ† μƒνƒœμ—μ„œ λ°μ΄ν„°λ² μ΄μŠ€μ— μ €μž₯λ˜μ§€ μ•ŠμœΌλ©°, νŠΈλžœμž­μ…˜ 컀밋 μ‹œμ μ— λ°μ΄ν„°λ² μ΄μŠ€μ— 반영
  • μ€€μ˜μ† μƒνƒœ(detacted) : μ˜μ†μ„± μ»¨ν…μŠ€νŠΈμ— μ—”ν‹°ν‹°κ°€ μ €μž₯λ˜μ—ˆλ‹€κ°€ λΆ„λ¦¬λœ μƒνƒœ
  • μ‚­μ œ μƒνƒœ(removed) : μ˜μ†μ„± μ»¨ν…μŠ€νŠΈμ™€ λ°μ΄ν„°λ² μ΄μŠ€μ—μ„œ μ‚­μ œλœ μƒνƒœ

μ˜μ†μ„± μ»¨ν…μŠ€νŠΈ μ‚¬μš© μž₯점

βœ… μ™œ μ‚¬μš©?? → μ• ν”Œλ¦¬μΌ€μ΄μ…˜κ³Ό λ°μ΄ν„°λ² μ΄μŠ€ 사이에 μ˜μ†μ„± μ»¨ν…μŠ€νŠΈλΌλŠ” 쀑간 계측을 λ§Œλ“€μ—ˆκΈ° λ•Œλ¬Έ, μ΄λ ‡κ²Œ 쀑간 계측을 λ§Œλ“€λ©΄ 버퍼링, 캐싱 등을 ν•  수 μžˆλ‹€λŠ” μž₯점 쑴재

1μ°¨ μΊμ‹œ

  • Map<KEY,VALUE> 둜 μ €μž₯됨
  • entityManager.find() μ‹œ 1μ°¨ μΊμ‹œ 쑰회
    • 쑴재 μ‹œ, ν•΄λ‹Ή μ—”ν‹°ν‹° λ°˜ν™˜
    • μ—†μœΌλ©΄, λ°μ΄ν„°λ² μ΄μŠ€μ—μ„œ 쑰회 ν›„ 1μ°¨ μΊμ‹œμ— μ €μž₯ 및 λ°˜ν™˜

동일성 보μž₯

  • ν•˜λ‚˜μ˜ νŠΈλžœμž­μ…˜μ—μ„œ 같은 ν‚€κ°’μœΌλ‘œ μ˜μ†μ„± μ»¨ν…μŠ€νŠΈμ— μ €μž₯된 μ—”ν‹°ν‹° 쑰회 μ‹œ 같은 μ—”ν‹°ν‹° 쑰회λ₯Ό 보μž₯
    1μ°¨ μΊμ‹œμ— μ €μž₯된 μ—”ν‹°ν‹°λ₯Ό μ‘°νšŒν•˜κΈ° λ•Œλ¬Έμ— κ°€λŠ₯

728x90
λ°˜μ‘ν˜•