ํ๋ก์ ํธ๋ฅผ ์งํํ๋ค ๋ณด๋ฉด, ๋จ์ํ ๊ธฐ๋ฅ ๊ตฌํ์ ๋์ด
"์ด๋ค ๊ธฐ์ ์ ์ ํํ ๊ฒ์ธ๊ฐ?"์ ๋ํ ์ค์ํ ๊ณ ๋ฏผ์ ํ๊ฒ ๋๋ค.
์ด๋ฒ ๊ธ์์๋ ์ด์ปค๋จธ์ค ํ๋ก์ ํธ(EvoStyle)์์
์ ์ฐฉ์ ํ ์ธ ์ฟ ํฐ ๋ฐ๊ธ ๊ธฐ๋ฅ์ ๊ตฌํํ๋ ๊ณผ์ ์์ ์ด๋ค Lock ์ ๋ต์ ์ ํํ๋์ง, ๊ทธ๋ฆฌ๊ณ ๊ทธ ์ด์ ๋ ๋ฌด์์ธ์ง ์ ๋ฆฌํ ์์ ์ด๋ค.
๋ฐฐ๊ฒฝ
์ด์ปค๋จธ์ค ์๋น์ค์์๋ ์ด๋ฒคํธ ์ฟ ํฐ์ฒ๋ผ ๋ค์ ์ฌ์ฉ์๊ฐ ๋์์ ๋ฐ๊ธ ์์ฒญ์ ๋ณด๋ผ ์ ์๋ ์ํฉ์ด ์์ฃผ ๋ฐ์ํ๋ค.
์ด๋ฒ ํ๋ก์ ํธ์์๋ ์ฟ ํฐ ์ค๋ณต ๋ฐ๊ธ ๋ฐฉ์ง, ์ฌ๊ณ ์ด๊ณผ ์ฌ์ฉ ๋ฐฉ์ง, ์์ฒญ ์๋ ๊ด๋ฆฌ์ ๊ฐ์ ์๊ตฌ์ฌํญ์ด ํต์ฌ ๊ณผ์ ๊ฐ ๋์๋ค.
ํ์ฌ๋ ๋จ์ผ ์๋ฒ ํ๊ฒฝ์ด์ง๋ง, ํฅํ ์ํ ํ์ฅ(๋ฉํฐ ์๋ฒ)์ ๊ณ ๋ คํ ์ค๊ณ๊ฐ ํ์ํ๋ค.
๋ฌธ์ ์ ์
๋์ผํ ์ฟ ํฐ์ ์ฌ๋ฌ ์ฌ์ฉ์๊ฐ ๋์์ ์์ฒญํ์ ๋, ๋ณ๋ค๋ฅธ ๋์์ฑ ์ ์ด ์์ด ์ฒ๋ฆฌํ๋ฉด ๋ค์ ๋ฌธ์ ๊ฐ ๋ฐ์ํ ์ ์๋ค.
๐ ์ฟ ํฐ ์ด๊ณผ ๋ฐ๊ธ
๐ ์ฌ๊ณ ๊ด๋ฆฌ ์คํจ
๐ ๋ฐ์ดํฐ ์ ํฉ์ฑ ๋ฌธ์ ๋ฐ์
๋ฐ๋ผ์ ๋ค์ ๋ชฉํ๋ฅผ ๋ง์กฑ์ํค๋ Lock ์ ๋ต์ด ํ์ํ๋ค.
โ
๋์์ฑ ์ ์ด
โ
๋ฐ์ดํฐ ์ ํฉ์ฑ ๋ณด์ฅ
โ
์ฑ๋ฅ ์ ์ง
โ
ํ์ฅ์ฑ ๋ฐ ์ ์ง๋ณด์์ฑ ํ๋ณด
๊ณ ๋ คํ ๋์
์ฌ๋ฌ Lock ์ ๋ต์ ์ ๋ฆฌํ๊ณ , ๊ฐ๊ฐ ์ฅ๋จ์ ์ ๋น๊ตํด๋ดค๋ค.
์ ๋ต | ์ค๋ช | ์ฅ์ | ๋จ์ |
๋น๊ด์ ๋ฝ (Pessimistic Lock) |
DB SELECT ... FOR UPDATE ์ฌ์ฉ | ํธ๋์ญ์
๋ด ๋ฐ์ดํฐ ์ ํฉ์ฑ ๊ฐ๋ ฅ ๋ณด์ฅ ๋จ์ผ ์๋ฒ ํ๊ฒฝ์์ ๋น ๋ฆ |
ํ์ฅ์ฑ ๋ฎ์ DB ๋ณ๋ชฉ ๊ฐ๋ฅ์ฑ |
๋๊ด์ ๋ฝ (Optimistic Lock) |
๋ฒ์ ํ๋ ๊ธฐ๋ฐ ์ถฉ๋ ๊ฐ์ง | ๋ฝ ์์ด ๋น ๋ฅด๊ฒ ์ฒ๋ฆฌ ๊ฐ๋ฅ | ์ถฉ๋ ๋ฐ์ ์ ์ฌ์๋ ํ์ ์ค์๊ฐ ์ฒ๋ฆฌ์๋ ๋ถ์ ํฉ |
Redisson ๋ถ์ฐ ๋ฝ | Redis๋ฅผ ์ด์ฉํ ๊ธ๋ก๋ฒ ๋ฝ ๊ด๋ฆฌ | ๋ถ์ฐ ํ๊ฒฝ ๋์ ๊ฐ๋ฅ ์ค์๊ฐ ์ ์ด ๊ฐ๋ฅ |
๋คํธ์ํฌ ์ค๋ฒํค๋ ์ค์ ๋ณต์ก๋ ์กด์ฌ |
๋ฉ์์ง ํ ๊ธฐ๋ฐ ์ฒ๋ฆฌ | Kafka ๋ฑ์ผ๋ก ์ ์ฐฉ์ ํ ์ฒ๋ฆฌ | ๋๋ ์ฒ๋ฆฌ์ ์ ๋ฆฌ ์ฅ์ ๋ณต์๋ ฅ ๊ฐํจ |
์ค์๊ฐ์ฑ ๋ถ์กฑ ์์คํ ์ค๊ณ ๋ณต์ก |
์ฑ๋ฅ ํ ์คํธ ๊ฒฐ๊ณผ
๋จ์ผ ์๋ฒ ํ๊ฒฝ์์ 500๋ช ์ ๋์ ์ฌ์ฉ์ ์์ฒญ์ JMeter๋ฅผ ์ด์ฉํด ์๋ฎฌ๋ ์ด์ ํ๋ค.
์ ๋ต | ํ๊ท ์๋ต ์๊ฐ | ์ค๋ณต ์ฌ๋ถ | ๋น๊ณ |
๋น๊ด์ ๋ฝ | 14ms | โ ์ค๋ณต ์์ | DB ํธ๋์ญ์ ๊ธฐ๋ฐ, ๊ฐ์ฅ ๋น ๋ฆ |
Redisson ๋ฝ | 413ms | โ ์ค๋ณต ์์ | Redis ํต์ ์ค๋ฒํค๋ ๋ฐ์ |
๊ฒฐ๊ณผ์ ์ผ๋ก ๋จ์ผ ์๋ฒ ๊ธฐ์ค์์๋ ๋น๊ด์ ๋ฝ์ด ์ฑ๋ฅ๊ณผ ์ ํฉ์ฑ ๋ชจ๋ ๊ฐ์ฅ ์ฐ์ํ๋ค.
์ต์ข ์ ํ : Redisson ๋ถ์ฐ ๋ฝ
๋จ์ผ ์๋ฒ ๊ธฐ์ค์ผ๋ก๋ง ๋ณธ๋ค๋ฉด, ๋น๊ด์ ๋ฝ์ด ๊ฐ์ฅ ๋น ๋ฅด๊ณ ์์ ์ ์ธ ์ ํ์ด์๋ค.
ํ์ง๋ง, ์ด๋ฒ ํ๋ก์ ํธ๋ ํฅํ ์ํ ํ์ฅ(๋ฉํฐ ์๋ฒ)์ ์ผ๋์ ๋๊ณ ์์๊ธฐ ๋๋ฌธ์, Redisson ๋ถ์ฐ ๋ฝ์ ์ต์ข
์ ํํ๋ค.
์ ํ ์ด์ ์์ฝ
๊ณ ๋ ค์ฌํญ | ์ค๋ช |
์ํ ํ์ฅ์ฑ ํ๋ณด | ๋ค์ค ์๋ฒ ํ๊ฒฝ์์๋ ๋ฝ ์ผ๊ด์ฑ ์ ์ง ๊ฐ๋ฅ |
์ค์๊ฐ์ฑ ๋ณด์ฅ | ๋ฉ์์ง ํ ๋ฐฉ์ ๋๋น ๋น ๋ฅธ ์๋ต ์๊ฐ |
์ ์ง๋ณด์์ฑ | Redis ์บ์ ์์คํ ๊ณผ ๋ฝ ๊ด๋ฆฌ ํตํฉ ๊ฐ๋ฅ |
์ค๊ณ ์ ์ฐ์ฑ | DB ํธ๋์ญ์ ๊ณผ ๋ ๋ฆฝ๋ ๋ฝ ๊ด๋ฆฌ → ์์คํ ํ์ฅ์ ์ ๋ฆฌ |
์ฐธ๊ณ : ๋น๊ด์ ๋ฝ์ ํ๊ณ
๋น๊ด์ ๋ฝ์ ๋จ์ผ ์๋ฒ์์๋ ์ข์ ์ฑ๋ฅ์ ๋ณด์ด์ง๋ง, ๋ค์๊ณผ ๊ฐ์ ์ ์ฝ์ด ์๋ค.
๐ DB ํธ๋์ญ์
๋ฒ์ ์์์๋ง ๋ฝ์ด ์ ํจํ๋ค.
๐ ์๋ฒ๊ฐ ์ฌ๋ฌ ๋์ผ ๊ฒฝ์ฐ, ํธ๋์ญ์
๊ฒฉ๋ฆฌ๋ฅผ ๋ณด์ฅํ๊ธฐ ์ด๋ ต๋ค.
๐ ๊ณ ๋ถํ ํ๊ฒฝ์์๋ DB ๋ฝ ๊ฒฝํฉ์ด ์ฌํด์ง ์ ์๋ค.
์ด๋ฐ ์ด์ ๋ก ๋ถ์ฐ ์์คํ ์ ๋๋นํ๋ ค๋ฉด DB ๋ฝ๋ง์ผ๋ก๋ ๋ถ์กฑํ๋ค.
์ด๋ฒ ๊ธฐ์ ์ ์์ฌ๊ฒฐ์ ์ ํตํด ์ป์ ๊ตํ์ ๋ช
ํํ๋ค.
๋จ๊ธฐ ์ฑ๋ฅ๋ง ๋ณด๋ ๊ฒ์ด ์๋๋ผ, ๋ฏธ๋ ํ์ฅ์ฑ๊ณผ ์์คํ
์์ ์ฑ๊น์ง ๊ณ ๋ คํ ์ ํ์ด ์ค์ํ๋ค.
Redisson ๋ถ์ฐ ๋ฝ์ ์ ํํจ์ผ๋ก์จ, ๋น์ฅ ๋น ๋ฅธ ์ฑ๋ฅ์ ์๋ณดํ์ง๋ง ์ฅ๊ธฐ์ ์ธ ์๋น์ค ํ์ฅ์ฑ๊ณผ ์ ์ง๋ณด์์ฑ์ ํ๋ณดํ ์ ์์๋ค.