๋ชฉ๋ก๋ถ์ฐ๋ฝ (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'๋ผ๋ ํค์๋๋ฅผ ํตํด์ ํ๋์ ์ค๋ ๋๋ง ์ ๊ทผํ ์ ์๋๋ก ๋๊ธฐํ ๊ธฐ๋ฅ์ ์ ๊ณตํ๋ค. ํ์ง๋ง, ์คํ๋ง ์น ์ ํ๋ฆฌ์ผ์ด..