π ν΄κ²° λ°©λ²: λΉκ΄μ λ½(Pessimistic Lock) λμ
λΉκ΄μ λ½ λμ
π λ¬Έμ ν΄κ²° λ°©ν₯
- νΈλμμ (@Transactional) μΌλ‘ μ‘κΈ λ¨μ μμ μ νλμ λ Όλ¦¬μ μ²λ¦¬ λ¨μλ‘ λ¬Άμκ³
- SELECT ... FOR UPDATE (λΉκ΄μ λ½) μ ν΅ν΄
κ°μ μ‘μ μ κ³μ’μ μ¬λ¬ μ°λ λκ° λμμ μ κ·Όν λ λ½μ κ±Έμ΄μ μΆ©λμ λ°©μ§νμ΄. - ν
μ€νΈμμλ 10κ°μ μ‘κΈ μμ²μ λμμ λ λ Έμ λλ
- λ°μ΄ν° μ ν©μ±μ΄ κΉ¨μ§μ§ μμκ³
- λ°λλ½λ μ μκΈ°κ³
- μ‘μ μ μκ³ : 500 / μμ μ μκ³ : 500 μΌλ‘ μ ννκ² μ²λ¦¬λμ΄.
π λΉκ΄μ λ½ μ μ© νλ¦
- @Lock(LockModeType.PESSIMISTIC_WRITE)λ₯Ό ν΅ν΄ μ‘μ μ, μμ μ κ³μ’ rowμ λ½μ 건λ€.
- νΈλμμ λ΄μμ ν¬μΈνΈ μ°¨κ° λ° μ 립μ μννλ€.
- νΈλμμ μ΄ λλλ©΄ λ½μ΄ ν΄μ λλ€.
π‘ λμ ν κ°μ μ
νλͺ© | Before | After |
λ°μ΄ν° μ ν©μ± | μΆ©λ λ° λ°λλ½ λ°μ | μμ μ μ²λ¦¬ |
μλ¬ λ°μλ₯ | Deadlock, NoSuchElementException | μμ |
λμμ± μ²λ¦¬ μ λ΅ | λ―ΈλΉ | λͺ μμ λΉκ΄μ λ½ λμ |
π κ·Έλμ μ΄κ±΄ μ΄λμ μ°μ΄λ?
- ν¬μΈνΈ μ‘κΈ / μν κ³μ’ μκ³ / μ¬κ³ μ°¨κ° / μΏ ν° μ¬μ© λ±
- “νλλ§ μμ΄μΌ νλ μμ”μ μ€μκ°μΌλ‘ μ ννκ² μ²λ¦¬ν΄μΌ ν λ λ§€μ° μ€μν΄
π μΆν κ³ν
- νΈλν½ μ¦κ° μ λκ΄μ λ½ + μ¬μλλ‘ μ ν κ³ λ €
- μ΄λ²€νΈ κΈ°λ° μ²λ¦¬ λμ : Kafka + Redis Lock μ‘°ν© μ€κ³
- μ‘°ν μ±λ₯ ν₯μμ μν CQRS ꡬ쑰 λΆλ¦¬
'TIL' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
kafkaλ₯Ό ν΅ν λκ·λͺ¨νΈλν½ λ° λμμ± μ μ΄ (0) | 2025.04.06 |
---|---|
λ½ μμ κ³ μ (0) | 2025.04.06 |
ν¬μΈνΈ μ‘κΈ μμ€ν μμμ λμμ± μ²λ¦¬ λ° λ°λλ½ μ΄μ (0) | 2025.04.05 |
RabbitMQ κΈ°λ° λΉλκΈ° μν€ν μ² λμ μ±λ₯ κ°μ μ¬λ‘ (0) | 2025.04.02 |
μΊμ±μ ν΅ν μ±λ₯ κ°μ (0) | 2025.04.01 |