λ³Έλ¬Έ λ°”λ‘œκ°€κΈ°

JPA3

[Spring] JPA μ˜μ†μ„± μ»¨ν…μŠ€νŠΈ μ΄ν•΄ν•˜κΈ° πŸ€” μ˜μ†μ„± μ»¨ν…μŠ€νŠΈλž€? JPA μ˜μ†μ„± μ»¨ν…μŠ€νŠΈ (Persistence Context) λž€ μ—”ν‹°ν‹°λ₯Ό 영ꡬ μ €μž₯ν•˜λŠ” ν™˜κ²½μ΄λΌλŠ” 뜻으둜, μ• ν”Œλ¦¬μΌ€μ΄μ…˜κ³Ό λ°μ΄ν„°λ² μ΄μŠ€ μ‚¬μ΄μ—μ„œ μ—”ν‹°ν‹°λ₯Ό κ΄€λ¦¬ν•˜λŠ” 논리적인 μ˜μ—­μž…λ‹ˆλ‹€. EntityManager 둜 μ—”ν‹°ν‹°λ₯Ό μ €μž₯ν•˜κ±°λ‚˜ μ‘°νšŒν•˜λ©΄ EntityManager λŠ” μ˜μ†μ„± μ»¨ν…μŠ€νŠΈμ— μ—”ν‹°ν‹°λ₯Ό λ³΄κ΄€ν•˜κ³  κ΄€λ¦¬ν•©λ‹ˆλ‹€. πŸ’« μ—”ν‹°ν‹°μ˜ 생λͺ…μ£ΌκΈ° μ—”ν‹°ν‹°μ˜ 생λͺ…μ£ΌκΈ° μ—”ν‹°ν‹°μ—λŠ” 4가지 μƒνƒœκ°€ μ‘΄μž¬ν•©λ‹ˆλ‹€. λΉ„μ˜μ†(new/transient) : μ˜μ†μ„± μ»¨ν…μŠ€νŠΈμ™€ μ „ν˜€ 관계가 μ—†λŠ” μƒνƒœ μ˜μ†(managed) : μ˜μ†μ„± μ»¨ν…μŠ€νŠΈμ— μ €μž₯된 μƒνƒœ (μ˜μ†μ„± μ»¨ν…μŠ€νŠΈμ— μ˜ν•΄ κ΄€λ¦¬λœλ‹€λŠ” 뜻) μ€€μ˜μ†(detached) : μ˜μ†μ„± μ»¨ν…μŠ€νŠΈμ— μ €μž₯λ˜μ—ˆλ‹€κ°€ λΆ„λ¦¬λœ μƒνƒœ μ‚­μ œ(removed) : μ‚­μ œλœ μƒνƒœ 🫧 λΉ„μ˜μ†.. 2023. 6. 27.
[Spring] ν˜Όλ™λ˜λŠ” JPA κ°œλ… 정리 (Hibernate, Spring Data JPA) 😱 이 글을 μ“°λŠ” 이유 μ·¨μ—… μ€€λΉ„λ₯Ό ν•˜λ©° 면접을 보닀보면 JPA 의 κ°œλ…μ€ 맀번 λ‚˜μ˜¬λ§ŒνΌ 단골 질문이라고 λ³Ό 수 μžˆμŠ΅λ‹ˆλ‹€. ν•˜μ§€λ§Œ, 맀번 Hibernate λŠ” JPA 의 κ΅¬ν˜„μ²΄μž…λ‹ˆλ‹€! λΌλŠ” λŒ€λ‹΅λ§Œ ν•΄μ™”κ³ , μ†”μ§νžˆ 차이λ₯Ό μ œλŒ€λ‘œ μ΄ν•΄ν•˜κ³  μžˆμ§€ μ•Šλ‹€κ³  λŠκΌˆμŠ΅λ‹ˆλ‹€. κ·Έλž˜μ„œ 이번 κΈ°νšŒμ— JPA, Hibernate, Spring Data JPA 의 차이에 λŒ€ν•΄ κ³΅λΆ€ν•˜κ³  μ •λ¦¬ν•΄λ³΄λŠ” μ‹œκ°„μ„ 가져보렀 ν•©λ‹ˆλ‹€. 😎 πŸ€” JPA λž€? JPA λŠ” Java Persistence API 의 μ•½μžλ‘œ, μžλ°” μ• ν”Œλ¦¬μΌ€μ΄μ…˜κ³Ό κ΄€κ³„ν˜• λ°μ΄ν„°λ² μ΄μŠ€ μ‚¬μ΄μ˜ 데이터 μ˜μ†μ„±μ„ κ΄€λ¦¬ν•˜κΈ° μœ„ν•œ ν‘œμ€€ν™”λœ μΈν„°νŽ˜μ΄μŠ€λ₯Ό μ œκ³΅ν•˜λŠ” κΈ°μˆ μž…λ‹ˆλ‹€. JPA λŠ” 객체 지ν–₯ ν”„λ‘œκ·Έλž˜λ°κ³Ό κ΄€κ³„ν˜• λ°μ΄ν„°λ² μ΄μŠ€ κ°„μ˜ 뢈일치λ₯Ό ν•΄κ²°ν•˜κΈ° μœ„ν•΄ 객체와 λ°μ΄ν„°λ² μ΄μŠ€λ₯Ό λ§€ν•‘ν•˜λŠ” .. 2023. 6. 27.
[Spring] JPA 비관적 락 적용으둜 λ™μ‹œμ„± 문제 ν•΄κ²°ν•˜κΈ° πŸ€” 문제 상황 진행쀑인 블라썸 ν”„λ‘œμ νŠΈμ—μ„œ 검색 κ²°κ³Ό 쑰회 횟수λ₯Ό μ¦κ°€μ‹œν‚€λŠ” λ‘œμ§μ„ κ΅¬ν˜„ν•˜λŠ” κ³Όμ •μ—μ„œ λ™μ‹œμ„± λ¬Έμ œκ°€ λ°œμƒν•  수 μžˆλŠ” 상황을 ν™•μΈν–ˆμŠ΅λ‹ˆλ‹€. 예λ₯Ό λ“€μ–΄ 검색 결과둜 꽃 A, B, C κ°€ 쑰회되면 A, B, C 의 쑰회 횟수λ₯Ό 각각 1μ”© μ¦κ°€μ‹œμΌœμ•Ό ν–ˆλŠ”λ°, λ§Œμ•½ A 의 ν˜„μž¬ 쑰회 νšŸμˆ˜κ°€ 1일 λ•Œ, λ™μ‹œμ— 3번 μ‘°νšŒλœλ‹€λ©΄ κ²°κ³ΌλŠ” 4νšŒκ°€ λ˜μ–΄μ•Ό ν•˜μ§€λ§Œ, 2νšŒκ°€ λ˜λŠ” μƒν™©μ΄μ—ˆμŠ΅λ‹ˆλ‹€. 이λ₯Ό μ›ν•˜λŠ” λ°©μ‹λŒ€λ‘œ λ™μž‘μ‹œν‚€κΈ° μœ„ν•΄ 비관적 락을 μ μš©ν•΄λ³΄κΈ°λ‘œ ν–ˆμŠ΅λ‹ˆλ‹€. πŸ‘» JPA λ™μ‹œμ„± μ œμ–΄ 방식 JPA λŠ” 엔티티에 λŒ€ν•œ 무결성을 μœ μ§€ν•  수 μžˆλ„λ‘ λ™μ‹œμ„± μ œμ–΄ λ©”μ»€λ‹ˆμ¦˜μ„ μ§€μ›ν•˜κ³  μžˆμŠ΅λ‹ˆλ‹€. 이 λ©”μ»€λ‹ˆμ¦˜μ—λŠ” 낙관적 락과 비관적 락이 ν¬ν•¨λ©λ‹ˆλ‹€. ⛓️ 낙관적 락 (Optimistic Lock) 낙관적 락은 DB κ°€ .. 2023. 6. 15.