λͺ©λ‘REDIS (3)
DevLog πΆ

π± λ€μ΄κ°κΈ° μ μ§λ ν¬μ€ν μμλ λ λμ€λ₯Ό νμ©ν΄ λΆμ°λ½μ ꡬννλ λ€μν λ°©λ²λ€μ μ΄ν΄λ³΄μλ€. μ΄λ² ν¬μ€ν μμλ μ‘°κΈ λ μλ€λ₯Έ λ°©λ²μΌλ‘ λ λμ€λ₯Ό νμ©νμ¬ λΆμ°λ½μ ꡬνν΄λ³΄κ³ μ νλ€. β Case 4 - Lua Script νμ©νκΈ° Redis 2.6 λ²μ μμ 루μ μ€ν¬λ¦½νΈ μμ§μ΄ μΆκ°λλ©΄μ, λ λμ€ μλ²μμ 루μ μ€ν¬λ¦½νΈλ₯Ό μ€νν μ μκ² λμλ€. λ λμ€ λ΄λΆμμλ EVAL (νΉμ EVALSHA)μ΄λΌλ λͺ λ Ήμ΄λ₯Ό ν΅ν΄ μ¬μ©ν μ μλ€. EVAL script numkeys [key [key ...]] [arg [arg ...]] λ§μ½ μ€ν¬λ¦½νΈκ° κΈΈμ΄μ§κ² λλ€λ©΄ μ€ν¬λ¦½νΈ μ 체λ₯Ό EVALλ‘ μ μ‘νκΈ°μλ λ€νΈμν¬ λμμ λΉμ©μ΄ λ°μν μ μκΈ° λλ¬Έμ, λ λμ€μμλ SCRIPT LOAD λͺ λ Ήμ΄λ₯Ό ν΅ν΄ μ€ν¬λ¦½νΈλ₯Ό ..

π± λ€μ΄κ°κΈ° μ μ‘°κΈ μ€λλκΈ΄ νμ§λ§ μ΄μ ν¬μ€ν μμ λ€μλλ½μ ν΅ν λΆμ°λ½ ꡬνμ μ§ννμλ€. λ§μ§λ§ ν¬μ€ν μμ λ λμ€λ₯Ό νμ©νλ€κ³ λ§νμλλ°, κ³μ 미루λ€κ° μ΄λ²μ λ λμ€ κ³΅λΆλ₯Ό νλ©΄μ κ°λ¨νκ² κ΅¬νμ μ§νν΄λ³΄μλ€. λΆμ°λ½μ λν κ°λ μ μ΄μ ν¬μ€ν μμ λ€λ£¨μκΈ° λλ¬Έμ, λ λμ€λ₯Ό μ΄μ©ν΄μ λ°λ‘ λΆμ°λ½μ ꡬνν΄λ³΄μ. λν, μ§λ ν¬μ€ν μμλ Jmeterλ₯Ό νμ©νμμ§λ§, μ΄λ² ν¬μ€ν μμλ E2E ν μ€νΈλ₯Ό ν΅ν΄ μ§μ ꡬνμ ν΄λ³΄κ³ μ νλ€. π± ꡬν μν© μ λ§ κ°λ¨νκ² μμ‘μ μλ―Ένλ 'Balance'λΌλ κ°μ, 2κ°μ μμ²μ΄ λμμ λ€μ΄μμ λ λ λμ€λ₯Ό ν΅ν λΆμ°λ½μ ꡬννμ¬ μ μ΄ν΄λ³΄μ. μμ κ²°κ³Όμμ μ΅μ μ μν©μ΄λΌλ©΄ Request 1, 2λ² λͺ¨λ 80μ΄λΌλ κ°μ λ°ννμ¬ μ μμ μΌλ‘ μμ‘μ΄ κ°±μ λμ§ μμ..

π± λ€μ΄κ°κΈ° μ DB 곡λΆνλ€κ° 'λ€μλλ½'μ λν΄μ μκ² λμλλ°, λ€μλλ½μ μ¬μ©νλ©΄ λΆμ°λ½μ ꡬνν μ μλ€λ κΈμ λ³΄κ³ ν λ² ν μ€νΈν΄λ³΄κ³ μΆμ΄μ κΈμ μμ±ν΄λ³΄κ³ μ νλ€. μ 체 μμ€μ½λλ μ¬κΈ°μμ νμΈ κ°λ₯νλ€. (λκ° ν μ€νΈμ© λ ν¬ λ§λ€κΈ° μ λ§€ν΄μ κ·Έλ₯ μ μ°λ λ ν¬μλ€κ° νλ €λ€ λ³΄λ μ½νλ¦°μΌλ‘ μμ±νκ² λμλ€.) π± λΆμ°λ½μ΄λ? λΆμ°λ½μ΄λ λ©ν° μ€λ λ νκ²½μμ 곡μ μμμ μ κ·Όν λ, λ°μ΄ν°μ μ ν©μ±μ μ§ν€κΈ° μν΄ μ¬μ©νλ κΈ°μ μ΄λ€. μ¬κΈ°μ μ¬λ¬ μ€λ λκ° κ³΅μ μμμ μ κ·Όνλ©° κ²½μνλ μν©μ 'Race Condition (κ²½μ μν)'λΌκ³ λ λΆλ₯΄λ©°, μλ°μμλ 'synchronized'λΌλ ν€μλλ₯Ό ν΅ν΄μ νλμ μ€λ λλ§ μ κ·Όν μ μλλ‘ λκΈ°ν κΈ°λ₯μ μ 곡νλ€. νμ§λ§, μ€νλ§ μΉ μ ν리μΌμ΄..