νΈλμμ AOP @Transactionalμ μ΅μ
by rlaehddnd0422μ€νλ§ νΈλμμ μ λ€μν μ΅μ μ μ§μν©λλ€. μ΅μ μ μ΄λ€κ²λ€μ΄ μλμ§ μμλ³΄κ² μ΅λλ€.
value μ΅μ
valueμ΅μ μ νΈλμμ μ μ΄λ¦μ μ§μ νλ μ΅μ μ λλ€. μ΄ μ΅μ μ ν΅ν΄ νΈλμμ μ μ΄λ¦μ μ§μ νλ©΄, ν΄λΉ μ΄λ¦μΌλ‘ νΈλμμ μ μλ³ν μ μμ΅λλ€.
value μ΅μ μ λ€μκ³Ό κ°μ΄ μ¬μ©ν μ μμ΅λλ€.
- @Transactional(value = "txName"): txNameμΌλ‘ μ§μ λ μ΄λ¦μ νΈλμμ μ μ¬μ©ν©λλ€.
- @Transactional("txName"): value = λ₯Ό μλ΅νκ³ , μ§μ txNameμΌλ‘ νΈλμμ μ΄λ¦μ μ§μ ν μ μμ΅λλ€.
- @Transactional(value = { "txName1", "txName2" }): μ¬λ¬ κ°μ νΈλμμ μ΄λ¦μ λ°°μ΄ ννλ‘ μ§μ ν μ μμ΅λλ€.
νΈλμμ μ΄λ¦μ λ³΄ν΅ νΈλμμ 맀λμ μμ μ¬μ©λ©λλ€. νΈλμμ 맀λμ λ νΈλμμ μ μ΄λ¦μ μ¬μ©νμ¬ μ¬λ¬ κ°μ νΈλμμ μ ꡬλΆνκ³ , κ°κ°μ νΈλμμ μ κ΄λ¦¬ν©λλ€. μ΄λ, κ°μ μ΄λ¦μΌλ‘ μ§μ λ νΈλμμ μ κ°μ νΈλμμ μΌλ‘ μ·¨κΈλ©λλ€.
νΈλμμ μ΄λ¦μ μ¬μ©νμ¬ νΈλμμ μ κ΄λ¦¬νλ κ²μ, λ€μ€ λ°μ΄ν° μμ€λ₯Ό μ¬μ©νκ±°λ, λΆμ° νκ²½μμ μ¬λ¬ κ°μ μλ²μμ μμ μ μνν λ μ μ©ν©λλ€. μ΄λ, νΈλμμ μ΄λ¦μ μ¬μ©νμ¬ μμ μ μλ³νλ©΄, λ€λ₯Έ μλ²μμλ λμΌν νΈλμμ μ μ¬μ©νμ¬ λ°μ΄ν°λ₯Ό μΌκ΄μ± μκ² κ΄λ¦¬ν μ μμ΅λλ€.
rollbackFor / norollbackFor μ΅μ
νΈλμμ μνμ€ μμΈκ° λ°μνλ©΄ μμΈμ μ’ λ₯μ λ°λΌ μ²λ¦¬ λ°©λ²μ΄ λ¬λΌμ§λλ€.
- νΈλμμ μν λμ€ μ²΄ν¬ μμΈκ° λ°μνλ κ²½μ°μλ 컀λ°ν©λλ€.
- νΈλμμ μν λμ€ μΈμ²΄ν¬ μμΈ(RuntimeException ν¬ν¨ νμ μμΈ)μ΄ λ°μνλ κ²½μ°μλ λ‘€λ°±ν©λλ€.
νμ§λ§ rollbackForμ΅μ μ μ¬μ©νλ©΄ 체ν¬μμΈμ κ²½μ°μλ λ‘€λ°±νλλ‘ μ€μ ν μ μμ΅λλ€.
@Transactional(rollbackFor = MyCheckedException.class)λ‘ μ€μ νλ€κ³ κ°μ ν΄λ΄ μλ€.
μ΄ κ²½μ° ν΄λΉ λ©μλκ° νΈλμμ μν λμ€ μ§μ ν μμΈμΈ MyCheckedExeptionμ΄ λ°μνλ€λ©΄, λ‘€λ°±νλλ‘ μ€μ ν©λλ€.
norollBackFor μ΅μ μ rollbackForμ΅μ μ λ°λλ‘ μ§μ ν μΈμ²΄ν¬ μμΈκ° ν°μ§ κ²½μ°, 컀λ°νλλ‘ μ§μν©λλ€.
κ·Έλ λ€λ©΄ μ μ€νλ§μ 체ν¬μμΈλ 컀λ°νκ³ , μΈμ²΄ν¬ μμΈλ λ‘€λ°±ν κΉμ?
μ΄ μ§λ¬Έμ λ΅νκΈ° μν΄μλ 체ν¬μμΈμ μΈμ²΄ν¬μμΈμ λν μ΄ν΄κ° μ€μν©λλ€.
- μ²΄ν¬ μμΈλ μμ κ°λ₯ν μμΈ μν©μ μ²λ¦¬νλ λ° μ¬μ©λλ©°, νΈμΆνλ λ©μλμμ μμΈ μ²λ¦¬λ₯Ό κ°μ ν©λλ€.
λ°λΌμ ν΄λΉ μμΈκ° λ°μνλ©΄ νΈμΆν μͺ½μμ μμΈ μ²λ¦¬λ₯Ό ν΄μΌ νλ©°, μ΄λ‘ μΈν΄ λ©μλ νΈμΆ μ€νμ΄ μ μ§λ©λλ€.
μ΄λ¬ν νΉμ± λλ¬Έμ μ²΄ν¬ μμΈκ° λ°μνλ©΄ ν΄λΉ λ©μλμμλ μμΈ μ²λ¦¬λ₯Ό ν΄κ²°ν μ μμΌλ―λ‘, μμΈκ° λ°μνλ©΄ λ©μλκ° νΈμΆλ κ³³μΌλ‘ μμΈλ₯Ό μ νν΄μΌ ν©λλ€. λ§μ½ ν΄λΉ μμΈκ° νΈλμμ μ²λ¦¬ μ€ λ°μνλ€λ©΄, λ‘€λ°±μ ν΄μΌ ν©λλ€.
- λ°λ©΄μ μΈμ²΄ν¬(λ°νμ) μμΈλ νΈμΆνλ λ©μλμμ μμΈ μ²λ¦¬λ₯Ό κ°μ νμ§ μμ΅λλ€.
λ°λΌμ ν΄λΉ μμΈκ° λ°μνλ©΄ μμΈλ₯Ό μ²λ¦¬νλ μ½λκ° μλ€λ©΄ νΈμΆ μ€νμ νκ³ μμ νΈμΆμκΉμ§ μ νλλ©°, μ€νλ§μμλ ν΄λΉ μμΈκ° λ°μνλ©΄ νΈλμμ μ λ‘€λ°±νμ¬ μμ μ±μ 보μ₯ν©λλ€.
λν μΈμ²΄ν¬ μμΈλ μμ€ν μ΄ λΆμμ ν μνκ° λλ κ²½μ°κ° λ§κΈ° λλ¬Έμ, λ‘€λ°±μ ν΅ν΄ μμ€ν μμ μ±μ μ μ§νλ κ²μ΄ μ€μν©λλ€.
λ°λΌμ μ€νλ§μμλ μ²΄ν¬ μμΈμ μΈμ²΄ν¬ μμΈλ₯Ό ꡬλΆνμ¬ νΈλμμ μ²λ¦¬λ₯Ό λ€λ₯΄κ² νμ¬ μμ μ±μ 보μ₯ν©λλ€.
λΉμ¦λμ€ λ‘μ§μμ λ°μνλ μμΈμ κ²½μ°μλ μλ²μΈ‘μ΄ μλ ν΄λΌμ΄μΈνΈκ° μλͺ»ν΄μ λ°μνλ μμΈμ λλ€. μ΄ λ μ²΄ν¬ μμΈλ₯Ό μ¬μ©ν΄μ ν΄λΌμ΄μΈνΈκ° μμ²ν νΈλμμ μ 컀λ°νκ³ , 컀λ°ν μ΄νμ ν΄λΌμ΄μΈνΈμκ² μΆκ° μμ²μ¬νμ μλ΅νλ νμμΌλ‘ μ²λ¦¬ν©λλ€.
isolation μ΅μ
νΈλμμ 격리 μμ€μ μ§μ ν μ μμ΅λλ€. κ°λ°μκ° νΈλμμ 격리μμ€μ μ§μ νλ κ²½μ°λ λλ λλ€.
νΈλμμ 격리μμ€μ λν΄μλ μλ κΈμ μ°Έκ³ ν΄μ£ΌμΈμ.
timeout μ΅μ
νΈλμμ μνμκ°μ λν νμμμμ μ΄λ¨μλ‘ μ§μ ν μ μμ΅λλ€. κΈ°λ³Έ κ°μ νΈλμμ μμ€ν μ νμμμ μ¬μ©.
label μ΅μ
νΈλμμ μ΄λ Έν μ΄μ μ μλ κ°μ μ§μ μ½μ΄μ μ΄λ€ λμμ νκ³ μΆμ λ μ¬μ©ν μ μλλ°, μΌλ°μ μΌλ‘ μ¬μ©λμ§ μμ΅λλ€.
readOnly μ΅μ
νΈλμμ μ λν΄νΈλ‘ μ½κΈ°, μ°κΈ°κ° λͺ¨λ κ°λ₯ν νΈλμμ μ΄ μμ±λ©λλ€.
νμ§λ©΄ μ΄ μ΅μ μ trueλ‘ μ€μ νκ² λλ©΄ ν΄λΉ νΈλμμ μ μ½κΈ° μ μ© νΈλμμ μ΄ λμ΄, μ½μ , μμ , μμ μ΄ μλκ³ μ½κΈ° κΈ°λ₯λ§ μλν©λλ€. λ§μ½ μ½κΈ° μΈμ μμ μ΄ ν΄λΉ νΈλμμ μμ μνλλ©΄, μΈμ²΄ν¬ μμΈκ° λ°μνκΈ° λλ¬Έμ νΈλμμ μ΄ rollback λ©λλ€.
@Transactionalμ readOnly μ΅μ μ μ£Όλ‘ λ°μ΄ν°λ² μ΄μ€μμ μ½κΈ° μμ λ§ νμν κ²½μ°μ μ¬μ©λ©λλ€.
λ°μ΄ν°λ² μ΄μ€μμ μ½κΈ° μμ λ§ νμν κ²½μ°μλ μ°κΈ° μμ μ΄ μμΌλ―λ‘, ν΄λΉ νΈλμμ μ μ½κΈ° μ μ©μΌλ‘ μ€μ νμ¬ μ±λ₯μ μ΅μ νν μ μμ΅λλ€. readOnly μ΅μ μ μ¬μ©νλ©΄, νΈλμμ μμ λ°μ΄ν°λ₯Ό μ½λ λμμλ§ μ½κΈ° λ½μ κ±Έκ³ , μ°κΈ° μμ μ νμ©νμ§ μμΌλ―λ‘ λΆνμν λ°λλ½κ³Ό μΆ©λμ μ€μΌ μ μμ΅λλ€.
λν, readOnly μ΅μ μ μ¬μ©νλ©΄ ν΄λΉ νΈλμμ μμ λ³κ²½μ¬νμ΄ λ°μνμ§ μμΌλ―λ‘, λ‘€λ°±μ μνν νμκ° μμ΄μ μ±λ₯μ μ΄μ μ κ°μ§λλ€.
λ°λΌμ, λ°μ΄ν°λ² μ΄μ€μμ μ½κΈ° μμ λ§ νμν κ²½μ°μλ readOnly μ΅μ μ μ¬μ©νμ¬ μ±λ₯ μ΅μ νλ₯Ό μνν μ μμ΅λλ€.
μλ₯Ό λ€μ΄, Spring MVC μ ν리μΌμ΄μ μμλ μ½κΈ° μμ μ μν Controller λ©μλμμ readOnly μ΅μ μ μ¬μ©νμ¬ μ±λ₯μ μ΅μ νν μ μμ΅λλ€.
<μ 리>
- νΈλμμ AOP @Transactionalμ μ΅μ λ€μ λν΄ μμ보μμ΅λλ€.
- μΈμ²΄ν¬ μμΈμ μ²΄ν¬ μμΈμ λ°λ₯Έ νΈλμμ 컀λ°/λ‘€λ°± μ¬λΆλ₯Ό μ μμλκ³ , μ΄λ₯Ό λ°νμΌλ‘ μ΄λ€ κ²½μ°μ μΈμ²΄ν¬ μμΈλ₯Ό μ¬μ©ν΄μΌ νκ³ , μ²΄ν¬ μμΈλ₯Ό μ¬μ©ν΄μΌ ν μ§ μμ λ‘μλ€.
<μ°Έκ³ μλ£>
'π Backend > DB Access' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
νΈλμμ μ νμ κ΄νμ¬ (0) | 2023.04.25 |
---|---|
νΈλμμ AOP @Transactional μ¬μ© μ μ£Όμμ¬ν (1) | 2023.04.20 |
[Querydsl] Querydsl μ΄λ? (0) | 2023.04.19 |
[Spring Data JPA] μ€νλ§ λ°μ΄ν° JPA (0) | 2023.04.17 |
[JPA] JPA(Java Persistent API) (0) | 2023.04.17 |
λΈλ‘κ·Έμ μ 보
Study Repository
rlaehddnd0422