🏝️ Spring/JPA

@Enumerated μžλ°”μ˜ enum νƒ€μž…μ„ 맀핑할 λ•Œ μ‚¬μš©ν•©λ‹ˆλ‹€. 속성 속성 κΈ°λŠ₯ κΈ°λ³Έκ°’ value EnumType.ORDINAL : enum μˆœμ„œλ₯Ό λ°μ΄ν„°λ² μ΄μŠ€μ— μ €μž₯ EnumType.STRING : enum 이름을 λ°μ΄ν„°λ² μ΄μŠ€μ— μ €μž₯ EnumType.ORDINAL κ²°λ‘ λΆ€ν„° λ§ν•˜λ©΄ EnumType.STRING을 μ‚¬μš©ν•˜λŠ” 것을 ꢌμž₯ν•©λ‹ˆλ‹€. μ˜ˆμ‹œ enum RoleType { ADMIN, USER } @Enumerated(EnumType.STRING) private RoleType roleType; EnumType.ORDINAL enum에 μ •μ˜λœ μˆœμ„œλŒ€λ‘œ, ADMIN은 0, USER은 1값이 λ°μ΄ν„°λ² μ΄μŠ€μ— μ €μž₯λ©λ‹ˆλ‹€. μž₯μ • : λ°μ΄ν„°λ² μ΄μŠ€μ— μ €μž₯λ˜λŠ” 데이터 크기가 μž‘μŠ΅λ‹ˆλ‹€. 단점 : 이미 μ €μž₯된 enum의..
🧐 @Column @Column은 객체 ν•„λ“œλ₯Ό ν…Œμ΄λΈ”μ˜ μ»¬λŸΌμ— λ§€ν•‘μ‹œμΌœμ£ΌλŠ” μ–΄λ…Έν…Œμ΄μ…˜μž…λ‹ˆλ‹€. 속성 속성 κΈ°λŠ₯ κΈ°λ³Έκ°’ name ν•„λ“œμ™€ 맀핑할 ν…Œμ΄λΈ”μ˜ 컬럼 이름을 μ§€μ •ν•œλ‹€. 객체의 ν•„λ“œ 이름 insertable (거의 μ‚¬μš©ν•˜μ§€ μ•ŠμŒ) μ—”ν‹°ν‹° μ €μž₯ μ‹œ 이 ν•„λ“œλ„ 같이 μ €μž₯ν•œλ‹€. false둜 μ„€μ •ν•˜λ©΄ 이 ν•„λ“œλŠ” λ°μ΄ν„°λ² μ΄μŠ€μ— μ €μž₯ν•˜μ§€ μ•ŠλŠ”λ‹€. false μ˜΅μ…˜μ€ 읽기 μ „μš©μΌ λ•Œ μ‚¬μš©ν•œλ‹€ true updateable μ—”ν‹°ν‹° μˆ˜μ • μ‹œ 이 ν•„λ“œλ„ 같이 μˆ˜μ •ν•œλ‹€. false둜 μ„€μ •ν•˜λ©΄ λ°μ΄ν„°λ² μ΄μŠ€μ— μˆ˜μ •ν•˜μ§€ μ•ŠλŠ”λ‹€. false μ˜΅μ…˜μ€ 읽기 μ „μš©μΌ λ•Œ μ‚¬μš©ν•œλ‹€ true table (거의 μ‚¬μš©ν•˜μ§€ μ•ŠμŒ) ν•˜λ‚˜μ˜ μ—”ν‹°ν‹°λ₯Ό 두 개 μ΄μƒμ˜ ν…Œμ΄λΈ”μ— 맀필할 λ•Œ μ‚¬μš©ν•œλ‹€.(@SecondaryTable μ‚¬μš©) μ§€μ •ν•œ ν•„λ“œλ₯Ό λ‹€λ₯Έ ν…Œ..
@Entity JPAμ—μ„œ μ—”ν‹°ν‹°λž€ μ‰½κ²Œ μƒκ°ν•˜λ©΄, DB ν…Œμ΄λΈ”μ— λŒ€μ‘ν•˜λŠ” ν•˜λ‚˜μ˜ 클래슀라고 생각할 수 μžˆμŠ΅λ‹ˆλ‹€. @Entityκ°€ 뢙은 ν΄λž˜μŠ€λŠ” JPAκ°€ 관리해주며, JPAλ₯Ό μ‚¬μš©ν•΄μ„œ DB ν…Œμ΄λΈ”κ³Ό 맀핑할 ν΄λž˜μŠ€λŠ” @Entityλ₯Ό κΌ­ λΆ™μ—¬μ•Όλ§Œ 맀핑이 κ°€λŠ₯ν•©λ‹ˆλ‹€. @Entityλ₯Ό μ‚¬μš©ν•  λ•ŒλŠ” λͺ‡κ°€μ§€ μ£Όμ˜μ‚¬ν•­μ΄ μžˆμŠ΅λ‹ˆλ‹€. μ£Όμ˜μ‚¬ν•­ μ ‘κ·Ό μ œμ–΄μžκ°€ public ν˜Ήμ€ protected 인 κΈ°λ³Έ μƒμ„±μžκ°€ ν•„μˆ˜μž…λ‹ˆλ‹€. κ΅¬ν˜„μ²΄μ— 따라 λ˜λŠ” 것도 μžˆμœΌλ‚˜, μŠ€νŽ™μƒ μ‚¬μš©ν•˜μ§€ λͺ»ν•˜λ„둝 ν•΄λ‘μ—ˆκΈ° λ•Œλ¬Έμ— μ‚¬μš©ν•˜μ§€ μ•ŠλŠ” 것이 μ’‹μŠ΅λ‹ˆλ‹€. final 클래슀, enum, interface, inner ν΄λž˜μŠ€μ—λŠ” μ‚¬μš©μ΄ λΆˆκ°€λŠ₯ν•©λ‹ˆλ‹€ μ €μž₯ν•˜λ €λŠ” 속성은 final이면 μ•ˆλ©λ‹ˆλ‹€. κ΅¬ν˜„μ²΄μ— 따라 λ˜λŠ” 것도 μžˆμœΌλ‚˜, μŠ€νŽ™μƒ μ‚¬μš©ν•˜μ§€ λͺ»ν•˜λ„둝 ν•΄λ‘μ—ˆ..
ν”ŒλŸ¬μ‹œ μ˜μ†μ„± μ»¨ν…μŠ€νŠΈ(Persistence Context)와 λ°μ΄ν„°λ² μ΄μŠ€λ₯Ό λ™κΈ°ν™”ν•˜λŠ” 것을 μ˜λ―Έν•©λ‹ˆλ‹€. 보톡 λ°μ΄ν„°λ² μ΄μŠ€ νŠΈλžœμž­μ…˜μ΄ μ»€λ°‹λ˜λŠ” μˆœκ°„μ— ν”ŒλŸ¬μ‹œκ°€ λ°œμƒν•©λ‹ˆλ‹€. ν”ŒλŸ¬μ‹œκ°€ λ°œμƒν•˜λ©΄ "μ“°κΈ° 지연 μ €μž₯μ†Œ"에 λͺ¨μ•„λ’€λ˜ INSERT, UPDATE, DELETE SQL등이 λ°μ΄ν„°λ² μ΄μŠ€μ— μ „λ‹¬λ©λ‹ˆλ‹€. 즉 ν”ŒλŸ¬μ‹œκ°€ λ°œμƒν•˜λ©΄ μ˜μ†μ„± μ»¨ν…μŠ€νŠΈμ˜ 변경사항을 DB에 λ°˜μ˜ν•¨μœΌλ‘œμ¨ DB와 μ˜μ†μ„± μ»¨ν…μŠ€νŠΈλ₯Ό λ™κΈ°ν™”μ‹œν‚€λŠ” κ²ƒμž…λ‹ˆλ‹€. ν”ŒλŸ¬μ‹œκ°€ λ°œμƒν•˜λ©΄ ν”ŒλŸ¬μ‹œκ°€ λ°œμƒν•˜λ©΄ λ‹€μŒκ³Ό 같은 일이 μ°¨λ‘€λŒ€λ‘œ μˆ˜ν–‰λ©λ‹ˆλ‹€ λ³€κ²½ 감지(Dirty Checking) μˆ˜μ •λœ μ—”ν‹°ν‹°κ°€ μžˆλ‹€λ©΄ μ“°κΈ° 지연 SQL μ €μž₯μ†Œμ— 등둝 μ“°κΈ° 지연 SQL μ €μž₯μ†Œμ˜ 쿼리λ₯Ό λ°μ΄ν„°λ² μ΄μŠ€μ— 전솑(등둝, μˆ˜μ •, μ‚­μ œ) ν”ŒλŸ¬μ‹œν•˜λŠ” 방법 em.flush() - 직접 호좜 ..
μ—”ν‹°ν‹°μ˜ 생λͺ…μ£ΌκΈ° μ—”ν‹°ν‹°λŠ” λ‹€μŒκ³Ό 같이 4λ‹¨κ³„μ˜ 생λͺ… μ£ΌκΈ°κ°€ μžˆμŠ΅λ‹ˆλ‹€. λΉ„μ˜μ† (new/transient) μ˜μ† (managed) μ€€μ˜μ† (detached) μ‚­μ œ (removed) λΉ„μ˜μ†(new/transient) λΉ„μ˜μ† μƒνƒœλŠ” 객체λ₯Ό μƒˆλ‘œ μƒμ„±ν•œ μƒνƒœμž…λ‹ˆλ‹€. JPA와 μ „ν˜€ 관계없이 객체만 μƒμ„±ν•œ μƒνƒœμž…λ‹ˆλ‹€. Member member = new Member(1L, "μ‹ λ™ν›ˆ"); //memberλŠ” λΉ„μ˜μ† μƒνƒœ μ˜μ† μƒνƒœκ°€ μ•„λ‹ˆλ―€λ‘œ λ‹Ήμ—°νžˆ μ˜μ†μ„± μ»¨ν…μŠ€νŠΈμ— μ˜ν•΄ κ΄€λ¦¬λ˜μ§€ μ•ŠμœΌλ©°, 1μ°¨ μΊμ‹œ, λ³€κ²½κ°μ§€λ“±μ˜ κΈ°λŠ₯이 μ μš©λ˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. μ˜μ†(managed) μ˜μ†μ„± μ»¨ν…μŠ€νŠΈμ— μ˜ν•΄μ„œ κ΄€λ¦¬λ˜μ–΄μ§€λŠ” μƒνƒœμž…λ‹ˆλ‹€. μƒμ„±ν•œ 객체λ₯Ό em.persist()λ₯Ό 톡해 μ˜μ†μ„± μ»¨ν…μŠ€νŠΈμ— μ €μž₯ν•˜κ±°λ‚˜, ν˜Ήμ€ em.find()λ₯Ό 톡해 D..
🧐 μ—”ν‹°ν‹° λ§€λ‹ˆμ € νŒ©ν† λ¦¬ & μ—”ν‹°ν‹° λ§€λ‹ˆμ € μ˜μ†μ„± μ»¨ν…μŠ€νŠΈμ— λŒ€ν•΄ μ•Œμ•„λ³΄κΈ° 전에 μ—”ν‹°ν‹° λ§€λ‹ˆμ € νŒ©ν† λ¦¬μ™€ μ—”ν‹°ν‹° λ§€λ‹ˆμ €μ— λŒ€ν•΄μ„œ μ•Œμ•„λ³΄κ² μŠ΅λ‹ˆλ‹€. μ—”ν‹°ν‹° λ§€λ‹ˆμ € νŒ©ν† λ¦¬λŠ” μƒμ„±λ˜λŠ” μ‹œμ μ— DB 컀λ„₯μ…˜ 풀을 생성해 λ‘” ν›„, 고객의 μš”μ²­μ΄ λ“€μ–΄μ˜¬ λ•Œλ§ˆλ‹€ μ—”ν‹°ν‹° λ§€λ‹ˆμ €λ₯Ό μƒμ„±ν•©λ‹ˆλ‹€. μ—”ν‹°ν‹° λ§€λ‹ˆμ €λŠ” DB 연결이 ν•„μš”ν•œ μ‹œμ (보톡 νŠΈλžœμž­μ…˜μ΄ μ‹œμž‘λ˜λŠ” 경우)에 컀λ„₯μ…˜ 풀에 μžˆλŠ” connection을 μ–»μŠ΅λ‹ˆλ‹€. 🧐 μ—”ν‹°ν‹° λ§€λ‹ˆμ € νŒ©ν† λ¦¬κ°€ μ—”ν‹°ν‹° λ§€λ‹ˆμ €λ₯Ό μ‚¬μš©ν•˜λŠ” 이유 μ—”ν‹°ν‹° λ§€λ‹ˆμ € νŒ©ν† λ¦¬λŠ” μƒμ„±λ˜λŠ” μ‹œμ μ— DB 컀λ„₯μ…˜ 풀을 μƒμ„±ν•˜κΈ°μ— 생성 λΉ„μš©μ΄ 맀우 ν½λ‹ˆλ‹€. κ·ΈλŸ¬λ‚˜ μ—”ν‹°ν‹° λ§€λ‹ˆμ €μ˜ 생성 λΉ„μš©μ€ 거의 듀지 μ•ŠμœΌλ―€λ‘œ, μ—”ν‹°ν‹° λ§€λ‹ˆμ € νŒ©ν† λ¦¬λŠ” ν•„μš”μ— 따라 μ•€ν‹°ν‹° λ§€λ‹ˆμ €λ₯Ό μƒμ„±ν•˜μ—¬ μ‚¬μš©ν•©λ‹ˆλ‹€. μ—”ν‹°ν‹° λ§€λ‹ˆμ € νŒ©ν† λ¦¬λŠ” μŠ€λ ˆλ“œ ..
말 λž‘
'🏝️ Spring/JPA' μΉ΄ν…Œκ³ λ¦¬μ˜ κΈ€ λͺ©λ‘ (9 Page)