-
Notifications
You must be signed in to change notification settings - Fork 8
About Redis
RDBMS๋ ๋ณดํต โ๊ด๊ณํ ๋ฐ์ดํฐ๋ฒ ์ด์คโ๋ผ๊ณ ํ๋ฉฐ ๋ฐ๋ฉด NOSQL์ โ๋น๊ด๊ณํ ๋ฐ์ดํฐ๋ฒ ์ด์คโ์ด๋ค. ๋ณดํต NOSQL์ ํค-๋ฐธ๋ฅ๋ ์ปฌ๋ผ, ๋ฌธ์ ํ์์ ๋ฐ์ดํฐ ๋ชจ๋ธ์ ์ด์ฉํ๋ค.
(RDBMS๊ฐ ์๋ ๋ค๋ฅธ ํํ๋ก ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๋ ๊ธฐ์ ์ด๋ผ๊ณ ์๊ฐํ๋ฉด ๋๋ค.)
NOSQL: Not Only SQL, ๋น๊ด๊ณํ ๋ฐ์ดํฐ๋ฒ ์ด์ค
- ๊ทธ๋ ๋ค๋ฉด ์, ์ธ์ NOSQL์ ์ฐ๋ ๊ฑธ๊น? ์์ฃผ ๋ง์ ์์ ๋ฐ์ดํฐ๋ฅผ ํจ์จ์ ์ผ๋ก ์ฒ๋ฆฌ๊ฐ ํ์ํ ๋, ๋ฐ์ดํฐ์ ๋ถ์ฐ์ฒ๋ฆฌ, ๋น ๋ฅธ ์ฐ๊ธฐ ๋ฐ ๋ฐ์ดํฐ์ ์์ ์ฑ์ด ํ์ํ ๋ ์ฌ์ฉํ๋ค. ํน์ ์๋ฒ์ ์ฅ์ ๊ฐ ๋ฐ์ํ์ ๋์๋ ๋ฐ์ดํฐ ์ ์ค์ด๋ ์๋น์ค ์ค์ง๊ฐ ์๋ ํํ์ ๊ตฌ์กฐ์ด๊ธฐ ๋๋ฌธ์, NOSQL์ ์ฌ์ฉํ๋ค.
1)ํค-๋ฐธ๋ฅ ์คํ ๋ฆฌ์งํ ํค-๋ฐธ๋ฅํ: Redis, memcached, Coherence,
2)์ด ์งํฅ ์์ด๋ ์ปฌ๋ผ ์คํ ์ด: Cassandra, HBASE, Cloud Database
3) ๋ฌธ์ํ: MongoDB, Couchbase, MarkLogic, DynamicDB MS-DocumentDB
4) ๊ทธ๋ํํ: Neo4j
REDIS(REmote Dictionary Server)๋ ๋ฉ๋ชจ๋ฆฌ ๊ธฐ๋ฐ์ โํค-๊ฐโ ๊ตฌ์กฐ ๋ฐ์ดํฐ ๊ด๋ฆฌ ์์คํ
์ด๋ฉฐ, ๋ชจ๋ ๋ฐ์ดํฐ๋ฅผ ๋ฉ๋ชจ๋ฆฌ์ ์ ์ฅํ๊ณ ์กฐํํ๊ธฐ์ ๋น ๋ฅธ Read, Write ์๋๋ฅผ ๋ณด์ฅํ๋ ๋น ๊ด๊ณํ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ด๋ค.
๋ ๋์ค๋ ํฌ๊ฒ 5๊ฐ์ง< String, Set, Sorted Set, Hash, List >์ ๋ฐ์ดํฐ ํ์์ ์ง์ํ๋ค.
Redis๋ ๋น ๋ฅธ ์คํ ์์ค ์ธ ๋ฉ๋ชจ๋ฆฌ ํค-๊ฐ ๋ฐ์ดํฐ ๊ตฌ์กฐ ์คํ ์ด์ด๋ฉฐ, ๋ค์ํ ์ธ ๋ฉ๋ชจ๋ฆฌ ๋ฐ์ดํฐ ๊ตฌ์กฐ ์งํฉ์ ์ ๊ณตํ๋ฏ๋ก ์ฌ์ฉ์ ์ ์ ์ ํ๋ฆฌ์ผ์ด์
์ ์์ฝ๊ฒ ์์ฑํ ์ ์๋ค.
๊ทธ๋ ๋ค๋ฉด ๋ ๋์ค์ ํน์ง๊ณผ ์ ์ฌํ Memcahed์ ๋น๊ตํ๊ณ ์ถ๋ค.
- ์ฒ๋ฆฌ ์๋๊ฐ ๋น ๋ฅด๋ค.(๋ฐ์ดํฐ๊ฐ ๋ฉ๋ชจ๋ฆฌ์๋ง ์ ์ฅ๋๋ฏ๋ก ๋น ๋ฅด๋ค. ์ฆ, ์๋๊ฐ ๋๋ฆฐ Disk๋ฅผ ๊ฑฐ์น์ง ์๋๋ค.)
- ๋ฐ์ดํฐ๊ฐ ๋ฉ๋ชจ๋ฆฌ์๋ง ์ ์ฅ๋๋ค.(ํ๋ก์ธ์ค๊ฐ ์ฃฝ๊ฑฐ๋ ์ฅ๋น๊ฐ Shutdown๋๋ฉด ๋ฐ์ดํฐ๊ฐ ์ฌ๋ผ์ง๋ค.)
- ๋ง๋ฃ์ผ์ ์ง์ ํ์ฌ ๋ง๋ฃ๊ฐ ๋๋ฉด ์๋์ผ๋ก ๋ฐ์ดํฐ๊ฐ ์ฌ๋ผ์ง๋ค.(Cache์ด๊ธฐ์)
- ์ ์ฅ์ ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฌ์ฉ( ๋ง๋ฃ๊ฐ ๋์ง ์์๋๋ผ๋ ๋ ์ด์ ๋ฐ์ดํฐ๋ฅผ ๋ฃ์ ๋ฉ๋ชจ๋ฆฌ๊ฐ ์์ผ๋ฉด LRU(Least recently used) ์๊ณ ๋ฆฌ์ฆ์ ์ํด ๋ฐ์ดํฐ๊ฐ ์ฌ๋ผ์ง๋ค.)
๊ทธ๋์, ๋ณดํต ๋ํ ํฌํธ๋ค์์ Static page, ๋๋ ๊ฒ์ ๊ฒฐ๊ณผ ๋ฑ์ ์บ์ฌํ๋๋ฐ ๋ง์ด ์ฌ์ฉํ๋ค.
์๋๋ ๋ ๋์ค ๊ตฌ์กฐ๋ฅผ ์ด๋ฏธ์งํ ํ ์กฐ๋ํ ๋์ ๋ธ๋ก๊ทธ์์ ๊ฐ์ ธ์จ ๊ทธ๋ฆผ์ด๋ค.
์์์ฑ์ ์ง์ํ๋ ์ธ๋ฉ๋ชจ๋ฆฌ ๋ฐ์ดํฐ ์ ์ฅ์.
์ฝ๊ธฐ ์ฑ๋ฅ ์ฆ๋๋ฅผ ์ํ ์๋ฒ ์ธก ๋ณต์ ๋ฅผ ์ง์ํ๋ค.
(Redis๊ฐ ์คํ์ค์ธ ์๋ฒ๊ฐ ์ถฉ๋ํ๋ ๊ฒฝ์ฐ ์ฅ์ ์กฐ์น ์ฒ๋ฆฌ์ ํจ๊ป ๋ ๋์ ์ฝ๊ธฐ ์ฑ๋ฅ์ ์ง์ํ๊ธฐ ์ํด ์ฌ๋ ์ด๋ธ๊ฐ ๋ง์คํฐ์ ์ฐ๊ฒฐํ๊ณ ์ ์ฒด ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ด๊ธฐ ๋ณต์ฌ๋ณธ์ ๋ฐ๋ ๋ง์คํฐ / ์ฌ๋ ์ด๋ธ ๋ณต์ ๋ฅผ ์ง์ํ๋ค. ๋ง์คํฐ์์ ์ฐ๊ธฐ๊ฐ ์ํ๋๋ฉด ์ฌ๋ ์ด๋ธ ๋ฐ์ดํฐ ์ธํธ๋ฅผ ์ค์๊ฐ์ผ๋ก ์
๋ฐ์ดํธํ๊ธฐ ์ํด ์ฐ๊ฒฐ๋ ๋ชจ๋ ์ฌ๋ ์ด๋ธ๋ก ์ ์ก๋๋ค.)
๋ฌธ์์ด, ๋ฆฌ์คํธ, ํด์, ์
, ์ ๋ ฌ๋ ์
๊ณผ ๊ฐ์ ๋ค์ํ ๋ฐ์ดํฐํ์ ์ง์ํ๋ค.
์ฐ๊ธฐ ์ฑ๋ฅ ์ฆ๋๋ฅผ ์ํ ํด๋ผ์ด์ธํธ ์ธก ์ค๋ฉ(Sharding)์ ์ง์ํ๋ค.
- ์ค๋ฉ(Sharding) - ํํฐ์ ๋(Partitionong)๊ณผ ๋์ผํ๋ค. ๊ฐ์ ํ ์ด๋ธ ์คํค๋ง๋ฅผ ๊ฐ์ง ๋ฐ์ดํฐ๋ฅผ ๋ค์์ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๋ถ์ฐํ์ฌ ์ ์ฅํ๋ ๋ฐฉ๋ฒ์ ์๋ฏธํ๋ค.
๋ฆฌ์คํธ, ๋ฐฐ์ด๊ณผ ๊ฐ์ ๋ฐ์ดํฐ๋ฅผ ์ฒ๋ฆฌํ๋๋ฐ ์ ์ฉํ๋ค.
value ๊ฐ์ผ๋ก ๋ฌธ์์ด, ๋ฆฌ์คํธ, Set, Sorted set, Hash ๋ฑ ์ฌ๋ฌ ๋ฐ์ดํฐ ํ์์ ์ง์ํ๊ธฐ์, ๋ค์ํ ๋ฐฉ์์ผ๋ก ๋ฐ์ดํฐ๋ฅผ ํ์ฉํ ์ ์๋ค.
๋ฆฌ์คํธํ ๋ฐ์ดํฐ ์
๋ ฅ๊ณผ ์ญ์ ๊ฐ MySQL์ ๋นํด์ 10๋ฐฐ์ ๋ ๋น ๋ฅด๋ค๊ณ ํ๋ค.
์ฌ๋ฌ ํ๋ก์ธ์ค์์ ๋์์ ๊ฐ์ key์ ๋ํ ๊ฐฑ์ ์ ์์ฒญํ ๊ฒฝ์ฐ, Atomic ์ฒ๋ฆฌ๋ก ๋ฐ์ดํฐ ๋ถ์ ํฉ ๋ฐฉ์ง Atomic์ฒ๋ฆฌ ํจ์๋ฅผ ์ ๊ณตํ๋ค.(์์์ฑ์ ์ ์งํจ๋ค)
๋ฉ๋ชจ๋ฆฌ๋ฅผ ํ์ฉํ๋ฉด์ ์์์ ์ธ ๋ฐ์ดํฐ ๋ณด์กด
๋ช
๋ น์ด๋ก ๋ช
์์ ์ผ๋ก ์ญ์ , expires๋ฅผ ์ค์ ํ์ง ์์ผ๋ฉด ๋ฐ์ดํฐ๊ฐ ์ญ์ ๋์ง ์๋๋ค.
์ค๋
์ท(๊ธฐ์ต์ฅ์น) ๊ธฐ๋ฅ์ ์ ๊ณตํ์ฌ ๋ฉ๋ชจ๋ฆฌ์ ๋ด์ฉ์ *.rdb ํ์ผ๋ก ์ ์ฅํ์ฌ ํด๋น ์์ ์ผ๋ก ๋ณต๊ตฌํ ์ ์๋ค.
Redis Server๋ 1๊ฐ์ ์ฑ๊ธ ์ฐ๋ ๋๋ก ์ํ๋๋ฉฐ, ๋ฐ๋ผ์ ์๋ฒ ํ๋์ ์ฌ๋ฌ๊ฐ์ ์๋ฒ๋ฅผ ๋์ฐ๋ ๊ฒ์ด ๊ฐ๋ฅํ๋ค.
Master โ Slave ํ์์ผ๋ก ๊ตฌ์ฑ์ด ๊ฐ๋ฅํจ, ๋ฐ์ดํฐ ๋ถ์ค ์ํ์ ์์ ์ฃผ๋ ๊ฒ์ด ๋ฐ๋ก Master โ Slave ๋ฐฉ์์ด๋ค.
// ์ด๋ฏธ์ง ํ
docker pull redis:alpine
// ๋คํธ์ํฌ ์์ฑ
docker network create redis-net
// ๋ ๋์ค ์คํ (์์ ๋ง๋ ๋คํธ์ํฌ๋ก ์คํ)
docker run --name my-redis -p 6379:6379 --network redis-net -v my/folder:/data -d redis:alpine redis-server --appendonly yes
// ๋ ๋์ค CLI๋ก ๋ ๋์ค ์๋ฒ์ ์ ์
docker run -it --network redis-net --rm redis:alpine redis-cli -h my-redis
- build.gradle์ ์์กด์ฑ ์ถ๊ฐ
implementation 'org.springframework.boot:spring-boot-starter-data-redis'
RedisTemplate vs Repository
๋ฐ์ดํฐ๋ฅผ ๋ ๋์ค์์ CRUDํ ๋ ๋๊ฐ์ง ๋ฐฉ์์ด ์๋ค.
- RedisTemplate: ๋น๊ต์ Lowํ ๋ฐฉ์์ผ๋ก ์ง์ ํค๊ฐ์ผ๋ก ๋ฐธ๋ฅ๋ฅผ set, getํ๋ ๋ฐฉ์. ์์ ๋๊ฐ ๋์ง๋ง ์ฝ๋๊ฐ ์ง์ ๋ถํด์ง๊ณ ํต์ ๊ฐ ์๋ ์ ์์, Transaction ํ์ฉ ๊ฐ๋ฅ
- Repository: ๋น๊ต์ ์ถ์ํ๋ ๋ฐฉ์. JPA๋ฅผ ์ฐ๋ ๊ฒ๊ณผ ๋น์ทํ ๋ฐฉ์์ผ๋ก ํด๋์ค๋ฅผ ์ํฐํฐ๋ก ๋ง๋ค๊ณ ๊ฐ์ฒด๋ฅผ ์ ์ฅ, ๊ด๋ฆฌํ ์ ์์, Transaction ๊ธฐ๋ฅ ์์.
ํด๋์ค๋ฅผ ์ ์ธํ๊ณ @RedisHash๋ฅผ ๋ถ์ด๋ฉด ํด๋น ํด๋์ค๋ ์ธ์คํด์ค๋ฅผ ๋ ๋์ค์ ์ ์ฅํ ์ ์๊ฒ ๋จ. ํ๋กํผํฐ๋ value, timeToLive๊ฐ ์๋ค.
value(String): ์ํฐํฐ๊ฐ ๋ ๋์ค์ ์ ์ฅ๋ ๋์ ํค๊ฐ(KeySpace)๋ฅผ ์ง์ . ๋ณดํต ํด๋์ค์ด๋ฆ์ ์ด๋ค.
timeToLive(long): TTL(time to live: ๋ฐ์ดํฐ๊ฐ ๋ ๋์ค์ ์ผ๋งํผ์ ์๊ฐ๋์ ์ ์ฅ๋์ด ์์์ง)๋ฅผ ์ง์ . -1๋ก ์ง์ ํ๋ฉด ์ง์์ง์ง ์๋๋ค. default๋ -1. ๋จ์๋ ์ด. (10์ผ๋ก ์ค์ ํ๋ฉด ๊ฐ์ฒด๊ฐ ์ ์ฅ๋ ํ 10์ด ๋ค ์๋์ผ๋ก ์ญ์ ๋๋ค.)
@TimeToLive์ด๋ ธํ ์ด์ ๋ TTL์ ์ง์ ํ๋ ๊ธฐ๋ฅ์ธ๋ฐ, @TimeToLive์ timeToLive๋ฅผ ๋ ๋ค ์ง์ ํ๋ฉด @TimeToLive์ ๊ฐ์ผ๋ก ์ค์ TTL์ด ์ ์ฉ๋๋ค.
Id๋ก ์ง์ ํ ํ๋์ ๋ถ์ธ๋ค. ๋ณดํต String์ผ๋ก ์ ์ธํ์ง๋ง ๋ค๋ฅธ ํ์ ๋ ๊ฐ๋ฅ. Idํ์ ์ด Stringํ์ ์ผ๋ ์ํฐํฐ์ id๋ฅผ null๋ก ์ฃผ๋ฉด ๋ ๋์ค์์ UUID๊ฐ์ ๋ง๋ค์ด์ ๋ฃ์ด์ค. Long์ผ๋ก ์ ์ธํ๋ฉด ๋๋ค ์ ์๋ฅผ ๋ฃ์ด์ฃผ๋ ๋ฏ. ๋ง์ฝ id๋ผ๋ ํ๋๊ฐ ์์ผ๋ฉด @Id์ด๋ ธํ ์ด์ ์ ์๋ตํด๋ ํด๋น ํ๋๊ฐ Id๋ก ์ธ์์ด ๋จ.
๋ ๋์ค ๋ฐ์ดํฐ์ ํ๊ธฐ์๊ฐ์ ์ง์ ํ๋ TimeToLive(TTL์ด๋ผ๊ณ ํํ ๋ถ๋ฆ)์ ์ง์ ํ๋ ํ๋์ ๋ถ์ด๋ ์ด๋ ธํ ์ด์ . @RedisHash์ timeToLive ์ต์ ์ ํตํด์๋ TTL์ ์ง์ ํ ์ ์์ง๋ง ํด๋์ค์ ๋ถ์ด๊ธฐ ๋๋ฌธ์ ํด๋น ํด๋์ค์ ๋ชจ๋ ์ธ์คํด์ค๊ฐ ๋์ผํ TTL์ ๊ฐ์ง ์ ๋ฐ์ ์๋ ๋จ์ ์ด ์๋ค. @TimeToLive๋ ํ๋๋ก ์ค์ ํ๊ธฐ ๋๋ฌธ์ ์ธ์คํด์ค๋ง๋ค TTL๊ฐ์ ๋ค๋ฅด๊ฒ ์ค ์ ์๋ค.
- cachingConfigurerSupport
@Configuration
@EnableCaching
public class CacheConfig extends CachingConfigurerSupport {
RedisConnectionFactory redisConnectionFactory;
public CacheConfig(RedisConnectionFactory redisConnectionFactory) {
this.redisConnectionFactory = redisConnectionFactory;
}
โขโขโข
- https://www.baeldung.com/spring-multiple-cache-managers
- https://www.baeldung.com/spring-boot-redis-cache
์ด์ ๊ด๋ จ๋ ๋ฌธ์๋ ๊ฐ์ธ ๋ธ๋ก๊ทธ์ ์ ๋ฆฌํ์์ต๋๋ค.
์ฐธ๊ณ
Code Convention
- AWS ๋ฐฐํฌ ๋ฐ Jenkins CI/CD ๐ณ
- Nginx๋ก ๋ก๋ ๋ฐธ๋ฐ์ฑํ๊ธฐ
- How to Git Rebase?
- ์๋ชป๋ ๊น ๋ธ๋์น์์ ํ์ถํ๊ธฐ
- ์๋ธ๋ชจ๋ ๋์ ๊ธฐ
- ์๋ํ๋ธ ๋์ ๊ธฐ
- Flyway ๋์ ๊ธฐ
- DB Replication์ ์ํ ๋ฐ์ดํฐ๋ฒ ์ด์ค ํ๊ฒฝ ์ค์
- ๋ฌด์ค๋จ ๋ฐฐํฌ ๋์ ๊ธฐ
- nginx ์ค์ ํ์ผ ๋ณ๊ฒฝํ๋ ๋ฐฉ๋ฒ
- ๋ก๊ทธ์ธ, ๋ก๊ทธ์์ ํ๋ฆ์ ๋ฆฌ
- About Redis
- Criteria -> QueryDSL๋ก ๋ณ๊ฒฝ
- S3 ํ์ผ ์ ๋ก๋ ๊ตฌ์กฐ
- 1์ฐจ ์คํ๋ฆฐํธ 1์ฐจ ๋ฐ์ผ๋ฆฌ ๋ฏธํ
- 1์ฐจ ์คํ๋ฆฐํธ 2์ฐจ ๋ฐ์ผ๋ฆฌ ๋ฏธํ
- 1์ฐจ ์คํ๋ฆฐํธ 3์ฐจ ๋ฐ์ผ๋ฆฌ ๋ฏธํ
- 2์ฐจ ์คํ๋ฆฐํธ ๋ฐ์ผ๋ฆฌ ๋ฏธํ
2์ฐจ ~ 4์ฐจ ํ์ ๋ฐ ๋ฐ์ผ๋ฆฌ ๋ฏธํ ์ ๋์ค์ฝ๋์์ ์งํ๋์ด ์ด์๋ก ๋ฐ์๋์์ต๋๋ค.
- 5์ฐจ ์คํ๋ฆฐํธ ์๋ก์ด ๊ธฐ๋ฅ ๋์ ํ์
- Lv4. 1์ฐจ ์๋ก์ด ๊ธฐ๋ฅ ๋์ ํ์
- Lv4. 2์ฐจ ์๋ก์ด ๊ธฐ๋ฅ ๋์ ํ์
์ดํ ํ์ ๋ฐ ๋ฐ์ผ๋ฆฌ ๋ฏธํ ์ ๋์ค์ฝ๋์์ ์งํ๋์ด ์ด์๋ก ๋ฐ์๋์์ต๋๋ค.