λλμ νΈλν½μ νΈλ€λ§νκΈ° μν λμμ± μ μ΄ κΈ°λ² μ€ μ¬λ¬κ°μ§ λ°©λ²μ΄ μλλ°
κ·Έμ€μμ λΉκ΄μ λ½κ³Ό, λκ΄μ λ½ λ λ½μ μ°¨μ΄λ₯Ό μμ보μ π
λΉκ΄μ λ½
: μμ μμ²μ λ°λΌμ λμμ± λ¬Έμ κ° λ°μν κ²μ΄λΌκ³ μ¬μ μ μμΈ‘νκ³ , λ½μ κ±Έμ΄λ²λ¦¬λ λ°©λ²λ‘
: νΈλμμ μ μΆ©λμ΄ λ°μνλ€κ³ κ°μ νκ³ νλμ νΈλμμ μ΄ μμμ μ κ·Όμ λ½μ κ±Έκ³ , λ€λ₯Έ νΈλμμ μ΄ μ κ·Όνμ§ λͺ»νλλ‘ ν¨
: λ°μ΄ν°λ² μ΄μ€μμ Shared Lock(곡μ , μ½κΈ° μ κΈ), Exclusive Lock(λ°°ν, μ°κΈ° μ κΈ)μ 건λ€.
1. Shared Lock
- μ κ·Όν νΈλμμ μ΄ μμ μ€μΌ λ λ€λ₯Έ νΈλμμ μμλ μ½κΈ°λ§ κ°λ₯νκ³ , Exclusive Lock μ μ©μ΄ λΆκ°λ₯νλ€.
2. Exclusive Lock
- μ κ·Όν νΈλμμ μ΄ μμ μ€μΌ λ λ€λ₯Έ νΈλμμ μμλ μ½κΈ°/μ°κΈ°κ° λͺ¨λ λΆκ°λ₯νκ³ Shared/Exclusive Lock μ μ©μ΄ μΆκ°μ μΌλ‘ λΆκ°λ₯
public interface BoardRepository extends JpaRepository<Board, Long> {
@Lock(LockModeType.PESSIMISTIC_WRITE)
@Query("select b from Board b where b.id = :id")
Board findByIdForUpdate(Long id);
}
*/ LockMode μ’
λ₯
LockModeType.PESSIMISTIC_WRITE
- μΌλ°μ μΈ μ΅μ
. λ°μ΄ν°λ² μ΄μ€μ μ°κΈ° λ½
- λ€λ₯Έ νΈλμμ
μμ μ½κΈ°λ μ°κΈ°λ λͺ»ν¨. (Exclusive lock)
LockModeType.PESSIMISTIC_READ
λ°λ³΅ μ½κΈ°λ§νκ³ μμ νμ§ μλ μ©λλ‘ λ½μ κ±Έ λ μ¬μ©
λ€λ₯Έ νΈλμμ
μμ μ½κΈ°λ κ°λ₯ν¨. (Shared Lock)
LockModeType.PESSINISTIC_FORCE_INCREMENT
Version μ 보λ₯Ό μ¬μ©νλ λΉκ΄μ λ½
3. μ₯μ κ³Ό λ¨μ
: λΉκ΄μ λ½ μ체λ λ‘μ° μ체μ λ½μ μ€μ λ‘ μ€μ ν¨μΌλ‘ μ±λ₯μ λ¬Έμ κ° λ°μν μ μμ
: μΆ©λμ΄ μμ£Ό λ°μνλ νκ²½μμ λ‘€λ°±μ νμλ₯Ό μ€μΌ μ μκ³ , λ°μ΄ν° 무결μ±μ 보μ₯νλ μμ€μ΄ λ§€μ° λμ!
λκ΄μ λ½
: μμμ λ½μ κ±Έμ΄μ μ μ νλ λ°©μμ΄ μλ, λμμ± λ¬Έμ κ° λ°μνλ©΄ κ·Έλ μ²λ¦¬νμ! λ λκ΄μ μ²λ¦¬ κΈ°λ²
: νΈλμμ μ΄ μΆ©λμ΄ λ°μνμ§ μμκ²μ΄λΌλ κ°μ μ νμ¬ μΆ©λμ λ§μ§μκ³ μΆ©λμ΄ λκ²μ κ°μ§νλ©΄ κ·Έλ μ²λ¦¬
: λ°μ΄ν°λ² μ΄μ€κ° μ 곡νλ λ½ κΈ°λ₯μ μ¬μ©νμ§μκ³ (DBλ¨μμ λμμ± μ²λ¦¬X) JPAκ° μ 곡νλ λ²μ κ΄λ¦¬ κΈ°λ₯μ μ¬μ©ν¨
=> versionμ μνλ₯Ό λ³΄κ³ μΆ©λμ νμΈνλ©° μΆ©λμ΄ νμΈλ κ²½μ° Rollback νλ λ°©μμΌλ‘ μ²λ¦¬
@Entity
public class Board {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;
@Version // μν°ν°λ₯Ό μμ ν λ λ§λ€ λ²μ μ΄ μ¦κ°ν¨
private Long version;
}
1. μ₯μ κ³Ό λ¨μ
: μΆ©λμ΄ λμ§ μλλ€λ κ°μ νμ λμ μμ²μ λν΄ μ²λ¦¬ μ±λ₯μ΄ μ’μ
: μ¦μ μΆ©λμ΄ μΌμ΄λλ κ²½μ° λ‘€λ°± μ²λ¦¬μ λν λΉμ©(μμ²μ΄ μ€ν¨ν κ²½μ° κ°λ°μκ° μ§μ λ‘€λ°±μ²λ¦¬λ₯Ό ν΄μΌν¨)μ΄ λ§μ΄ λ€μ΄ μν΄κ° λ°μν¨
: νΈλμμ μ 컀λ°νκΈ°μ μλ μΆ©λ μ¬λΆλ₯Ό μ μ μμ
'π JPA' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
λμμ± μ μ΄ Chap 2 | λΆμ°λ½ (0) | 2023.01.24 |
---|---|
JPA | JPA With Native Query (0) | 2022.12.14 |
JPA | μ°κ΄κ΄κ³ (0) | 2022.12.08 |