ํด๋น ๊ธ์ ์์ฑํ๊ฒ ๋ ๊ณ๊ธฐ๋ ๋ฐ๊ธํ ์ ์๋ ์ฟ ํฐ์ ๊ฐ์๊ฐ ํ์ ๋์ด ์๊ณ , ํ์ฌ๊น์ง ๋ฐ๊ธ๋ ์ฟ ํฐ์ ์์ ๋ฐ๋ผ ์ ์ฐฉ์์ผ๋ก ์ฟ ํฐ์ ๋ฐ๊ธํด์ผ ํ๋ ๊ฒฝ์ฐ ์ด๋ป๊ฒ ๋์์ฑ์ ์ฒ๋ฆฌํ ์ ์์๊น์ ๋ํ ํธ๊ธฐ์ฌ์ด์๋ค.
์ฐ์ ์ํฉ์ ์ด๋ฌํ๋ค.
- ์๋ฒ๊ฐ ์ฌ๋ฌ ๊ฐ๋ก ์ฑ๊ธ ์ค๋ ๋๋ก ํด๊ฒฐ ๋ถ๊ฐ๋ฅํ๋ค.
- ์๋ฒ๊ฐ 1๋์ธ ์ํฉ์ด๋๋ผ๋, ์ ์ฐฉ์ ์ฟ ํฐ ์์ฑ ์ ์ฒด ๋ก์ง์ ์ฑ๊ธ ์ค๋ ๋๋ก ์ฒ๋ฆฌํ๋ ๊ฒ์ ๋งค์ฐ ๋นํจ์จ์ ์ด๋ค.
- Redisson์ RLock๊ณผ ๊ฐ์ ๋ฐฉ๋ฒ์ ํ์ฌ ์ํฉ์ ๋นํจ์จ์ ์ด๋ค.
๋จผ์ 2๋ฒ, 3๋ฒ์ด ๋นํจ์จ์ ์ธ ์ด์ ๋ ์๋์ ๊ฐ๋ค. (RLock์ ๋ํด์๋ ๋ค์ ํฌ์คํ ์ ์ฐธ๊ณ ํด ์ฃผ์ธ์!)
์ฟ ํฐ์ ์ฌ๊ณ ๋ฅผ ํ์ ํ๊ณ ์ฌ๊ณ ๊ฐ ๋จ์์์ผ๋ฉด ์ ๊ท ์ฟ ํฐ์ ์์ฑํ๋ค๋ผ๋ ๊ด์ ์์ ๊ตณ์ด ์ฌ๊ณ ์กฐํ๋ถํฐ ์ ์ฅ๊น์ง์ ๋ก์ง์ Lock ๊ณผ์ ์ ํตํด ์ฒ๋ฆฌํ๋ค๋ฉด Lock์ด ๊ฑธ๋ฆฌ๋ ๊ตฌ๊ฐ์ด ๊ธธ์ด์ ธ ์ฑ๋ฅ์ ๋ฌธ์ ๊ฐ ๋ฐ์ํ ์ ์๋ค.
๋ฌผ๋ก , ์ค๋ฌด์์๋ ์ฌ๋ฌ ๊ฐ์ง ์ถ๊ฐ๋๋ ๋น์ฆ๋์ค๊ฐ ์๊ฒ ์ง๋ง ์ฐ์ ๊ฐ๋จํ๊ฒ ์๊ฐํด ๋ณด๋ฉด
Redis์ ๊ฐ์ด ์ฑ๊ธ ์ค๋ ๋๋ก ๋์ํ๋ ๊ณต์ ์์์์ ์ฟ ํฐ์ ๋ฐ๊ธํ๊ธฐ ์ ์ ํ์ฌ๊น์ง ๋ง๋ค์ด์ง ์ฟ ํฐ์ ๊ฐ์๋ฅผ ์ฆ๊ฐ์์ผ ์ค ์ ์๋ค.
๊ทธ๋ฆฌ๊ณ redis์์ ๋ฆฌํด๋๋ ๋ฐ๊ธ๋ ์ฟ ํฐ์ ๊ฐ์๊ฐ ์ ํ๋ ์ซ์๋ณด๋ค ํฌ๋ค๋ฉด ๋ฐ๊ธ์ ํ์ง ์๋ ๋ก์ง์ ์ ์ฉํ ์ ์๋ค.
redis-cli์์ ํน์ key์ value๋ฅผ ์ฆ๊ฐ์ํค๋ ๋ช ๋ น์ด๋ ์๋์ ๊ฐ๋ค.
incr key:value
์ฌ๊ธฐ์ key๋ ํ์ฌ๊น์ง ๋ฐ๊ธ๋ ์ฟ ํฐ์ ๊ฐ์์ด๊ณ , ์๋ฒ์ ์์ฒญ ๋๋ง๋ค value๋ 1์ฉ ์ฆ๊ฐ์ํฌ ์ ์๋ค.
Spring์์ ์ฝ๋๋ฅผ ์์ฑํ๋ค๋ฉด Redis์ ์ ์ฅ๋ ๋ฐ๊ธ๋ ์ฟ ํฐ์ ๊ฐ์๋ฅผ ์ถ์ ํ๋ Repository๋ฅผ ์์ฑํ๊ณ
์ค์ ์๋ ์ฝ๋๋ก ์ฆ๊ฐ์ํฌ ์ ์๋ค.
public Long increment() {
return redisTemplate
.opsForValue()
.increment("key_name")
}
์ถ๊ฐ์ ์ผ๋ก, 1์ธ๋น 1๊ฐ๋ผ๋ ์ ํ์ด ์๊ธด๋ค๋ฉด ์ด๋ป๊ฒ ๋์์ฑ์ ์ฒ๋ฆฌํด์ผ ํ ์ง ์๊ฐํด๋ด์ผ ํ๋ค.
์๊ฐํด ๋ณผ ์ ์๋ ๋ฐฉ๋ฒ์ ๋จ์ํ๊ฒ ์ฟ ํฐ ๋ฐ๊ธ ๋ก์ง์ Lock์ ์ด์ฉํ์ฌ ํด๊ฒฐํ ์ ์๊ฒ ์ง๋ง Kafka์ ๊ฐ์ ๋ฐ์ดํฐ ์คํธ๋ฆฌ๋ฐ ๋๊ตฌ๋ฅผ ์ฌ์ฉํ ๊ฒฝ์ฐ์๋ ์ค์ Consumer๊ฐ ์ฟ ํฐ์ DB์ insert ํ๋ ์๊ฐ๊น์ง ํ ์ด ๋ฐ์ํ๋ฏ๋ก ์ ์ฉํ์ง ๋ชปํ ์ ์๋ค.
๋ฐ๋ผ์, ๋ค๋ฅธ ๋ฐฉ๋ฒ์ผ๋ก Redis์์ Set ์๋ฃ๊ตฌ์กฐ๋ฅผ ์ด์ฉํ์ฌ ํด๊ฒฐํ ์ ์๋ค.
๊ด๋ จ redis-cli ๋ช
๋ น์ด๋ ์๋์ ๊ฐ๋ค.
sadd key value
ํด๋น ๋ช ๋ น์ด๋ ํด๋น key์ Set์ value๊ฐ ์์ผ๋ฉด ์ถ๊ฐ๋ value์ ๊ฐ์๋ฅผ ๋ฐํํ๊ณ , ์ด๋ฏธ value๊ฐ ์กด์ฌํ๋ฉด 0์ ๋ฐํํ๋ค.
Spring์์ Set์ ํ์ฉํ๊ธฐ ์ํ ์ฝ๋๋ฅผ ์์ฑํด ๋ณธ๋ค๋ฉด ์๋์ ๊ฐ๋ค.
public Long addCouponSet(Long userId) {
return redisTemplate
.opsForSet()
.add("key_name", userId.toString());
}
๋ฐ๋ผ์ ์ฟ ํฐ ๋ฐ๊ธ ๋ก์ง์์๋ redis์์ ๋ฐํ๋ Long๊ฐ์ด 1์ด ์๋ ๊ฒฝ์ฐ์๋ ์์ธ๊ฐ ๋ฐ์ํ๋๋ก ์ฒ๋ฆฌํ ์ ์๋ค.
'๐ Backend' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
Thread Pool์ ๋ํด์(with Tomcat, Spring Boot) (0) | 2023.09.12 |
---|---|
XSS์ CSRF์ ํน์ง (1) | 2023.09.11 |