๐Ÿ“• Spring Framework/Spring Project

2022.05.18 ใ€ŒRedis DB ์ ์šฉใ€

GroovyArea 2022. 5. 18. 19:51
์Šคํ”„๋ง ๋ถ€ํŠธ ํ”„๋กœ์ ํŠธ๋ฅผ ํ•˜๋ฉฐ ๋กœ๊ทธ์ธ API๊นŒ์ง€๋Š” jwt ํ† ํฐ์„ ์ „๋‹ฌํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ ๊ตฌํ˜„์„ ์ž˜ํ–ˆ๋‹ค.
ํ•˜์ง€๋งŒ ๋ฌธ์ œ๋Š” ๋กœ๊ทธ์•„์›ƒ์ด๋‹ค. jwt ํ† ํฐ ์ž์ฒด๋Š” ํด๋ผ์ด์–ธํŠธ์—์„œ ๋ณด๊ด€ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์„œ๋ฒ„๊ฐ€ ์ž์ฒด์ ์œผ๋กœ ์‚ญ์ œ์‹œํ‚ฌ ์ˆ˜ ์—†๋‹ค. ์„ธ์…˜์„ ์‚ฌ์šฉ ์‹œ ์„œ๋ฒ„๊ฐ€ ์„ธ์…˜ DB์— ์ €์žฅํ•˜๊ณ  ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์„ธ์…˜์„ ์‚ญ์ œํ•˜๋ฉด ๊ทธ๋งŒ์ด์ง€๋งŒ ํ† ํฐ์€ ๊ทธ๋ ‡๊ฒŒ ๋ชป ํ•œ๋‹ค. ๊ทธ๋ž˜์„œ Redis DB๋ผ๋Š” ์ธ๋ฉ”๋ชจ๋ฆฌ DB๋ฅผ ์ด์šฉํ•ด ๋ณด๊ธฐ๋กœ ํ–ˆ๋‹ค. 
์ฒ˜์Œ ๋“ค์–ด๋ณด๋Š”๋ฐ DB๋„ ์—ฌ๋Ÿฌ ๊ฐ€์ง€ ์ข…๋ฅ˜๊ฐ€ ์žˆ๋Š”๋ฐ ์ด ์ธ๋ฉ”๋ชจ๋ฆฌ DB๋Š” ๋‹ค๋ฅธ DBMS์™€ ๋น„๊ตํ•˜์—ฌ ์–ด๋–ค ์„ฑ๊ฒฉ์„ ๊ฐ€์ง€๋Š”์ง€ ๊ทธ๊ฑธ ์ •๋ฆฌํ•˜๊ณ  ์ ์šฉํ•ด๋ณด๋Š” ํ•˜๋ฃจ๋ฅผ ๋ณด๋‚ด๊ฒŒ ๋  ๊ฒƒ ๊ฐ™๋‹ค.

Redis DB

Key & Value ๊ตฌ์กฐ์˜ ๋น„์ •ํ˜• ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๊ณ  ๊ด€๋ฆฌํ•˜๊ธฐ ์œ„ํ•œ ์˜คํ”ˆ ์†Œ์Šค ๊ธฐ๋ฐ˜์˜ ๋น„ ๊ด€๊ณ„ํ˜• DBMS

์บ์‹œ, DB ๋“ฑ์œผ๋กœ ์‚ฌ์šฉํ•˜๋ฉฐ ์ธ๋ฉ”๋ชจ๋ฆฌ ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ๋ฅผ ๊ฐ€์ง„ ์ €์žฅ์†Œ์ด๋‹ค.

 

์ธ๋ฉ”๋ชจ๋ฆฌ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค

๋””์Šคํฌ๊ฐ€ ์•„๋‹Œ ์ฃผ ๋ฉ”๋ชจ๋ฆฌ์— ๋ชจ๋“  ๋ฐ์ดํ„ฐ๋ฅผ ๋ณด์œ ํ•˜๊ณ  ์žˆ๋Š” ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค

 

์žฅ์  : ๋””์Šคํฌ ๊ฒ€์ƒ‰๋ณด๋‹ค ์ž๋ฃŒ ์ ‘๊ทผ์ด ํ›จ์”ฌ ๋น ๋ฆ„

๋‹จ์  : ํœ˜๋ฐœ์„ฑ์„ ๋” 

=> ์ง€์†์„ฑ์„ ๋ณด์žฅํ•˜๊ธฐ ์œ„ํ•ด ๋กœ๊ทธ ํŒŒ์ผ๋กœ DBMS ๊ตฌ์กฐ๋ฅผ ๋ชจ๋‘ ์žฌ๊ตฌ์ถ•ํ•˜๊ธฐ๋„ ํ•จ

 

์ฐธ์กฐ : https://velog.io/@rudwnd33/TIL-10%EC%9B%94-27%EC%9D%BC

 

[TIL] 10์›” 27์ผ: ์ธ๋ฉ”๋ชจ๋ฆฌ DB(In-memory DB)

์ธ๋ฉ”๋ชจ๋ฆฌ DB

velog.io

 

๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๊ฐ€ ์žˆ๋Š”๋ฐ Redis ๊ฐ™์€ ์ธ๋ฉ”๋ชจ๋ฆฌ ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ ์ €์žฅ์†Œ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์ด์œ ?

DataBase ์ž์ฒด๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ๋ฌผ๋ฆฌ์ ์ธ ๊ณต๊ฐ„์ธ ๋””์Šคํฌ์— ์ง์ ‘ ์“ฐ๋ฏ€๋กœ ๋ฐ์ดํ„ฐ์˜ ์†์‹ค์ด ์—†๋‹ค. ํ•˜์ง€๋งŒ ๋งค๋ฒˆ ๋””์Šคํฌ์— ์ ‘๊ทผํ•˜๋ฏ€๋กœ ์œ ์ €๊ฐ€ ๋งŽ์•„์งˆ์ˆ˜๋ก ๋ถ€ํ•˜๊ฐ€ ๋ฐœ์ƒํ•ด ๋Š๋ ค์ง.

์„œ๋น„์Šค ์šด์˜ ์ดˆ๋ฐ˜์ด๊ฑฐ๋‚˜, ์œ ์ €๊ฐ€ ์ ๊ณ , ๊ทœ๋ชจ๊ฐ€ ์ž‘์€ ์„œ๋น„์Šค ๊ฐ™์€ ๊ฒฝ์šฐ๋Š” DB๋กœ๋„ ๋ฌด๋ฆฌ๊ฐ€ ๊ฐ€์ง€ ์•Š์ง€๋งŒ, ์‚ฌ์šฉ์ž๊ฐ€ ๋งŽ์•„์งˆ ๊ฒฝ์šฐ ๊ณผ๋ถ€ํ•˜์˜ ๊ฐ€๋Šฅ์„ฑ์ด ์ปค์ง€๋ฏ€๋กœ ์บ์‹œ ์„œ๋ฒ„๋ฅผ ๋„์ž…ํ•œ๋‹ค. ์ด ์บ์‹œ ์„œ๋ฒ„๋กœ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ๊ฒƒ์ด Redis DB!

 

Redis ํŠน์ง•

  • Key, Value ๊ตฌ์กฐ๋กœ ์ฟผ๋ฆฌ๊ฐ€ ํ•„์š” ์—†๋‹ค.
  • ๋ฉ”๋ชจ๋ฆฌ์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ์ฒ˜๋ฆฌํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์†๋„๊ฐ€ ๋น ๋ฆ„
  • ์ž๋ฃŒ๊ตฌ์กฐ ์ง€์›
    • String : ket - value ๊ตฌ์กฐ
    • Sets : String์˜ ์ง‘ํ•ฉ, ์—ฌ๋Ÿฌ ๊ฐœ์˜ ๊ฐ’์„ ํ•˜๋‚˜์˜ value์— ์ €์žฅ ๊ฐ€๋Šฅ
    • Sorted Sets : ์ค‘๋ณต ๊ฐ’์ด ๋“ค์–ด๊ฐ€์ง€ ์•Š๋Š” Set์— ์ •๋ ฌ์„ ์ ์šฉํ•œ ๊ตฌ์กฐ
    • Lists : Array ํ˜•์‹์˜ ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ List์™€ ๋งˆ์ฐฌ๊ฐ€์ง€์ž„
  • ์‹ฑ๊ธ€ ์Šค๋ ˆ๋“œ ํ˜•์‹ : ํ•œ ๋ฒˆ์— ํ•˜๋‚˜์˜ ๋ช…๋ น๋งŒ ์ฒ˜๋ฆฌ ๊ฐ€๋Šฅ, ํ•˜์ง€๋งŒ ์†๋„๊ฐ€ ์—„์ฒญ ๋น ๋ฅด๋‹ค.

 

์ด์ œ ์ง์ ‘ ์ ์šฉ์‹œ์ผœ ๋ณด์ž

์ผ๋‹จ Redis ์„ค์น˜!

https://github.com/microsoftarchive/redis/releases

 

Releases · microsoftarchive/redis

Redis is an in-memory database that persists on disk. The data model is key-value, but many different kind of values are supported: Strings, Lists, Sets, Sorted Sets, Hashes - microsoftarchive/redis

github.com

=> Redis ์‹คํ–‰ ํ™•์ธ

=> ๊ธฐ๋ณธ ์‹คํ–‰ ํ…Œ์ŠคํŠธ ์‘๋‹ต์ด ์•„์ฃผ ์ž˜๋œ๋‹ค

 

=> set, get์„ ์ด์šฉํ•ด ์•„์ด์Šคํฌ๋ฆผ์ด๋ผ๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๊ณ  ๊ฐ€์ ธ์™”๋‹ค. ์‹ ๊ธฐํ•˜๊ตฌ๋จผ.

 

์ด์ œ Redis๊ฐ€ ์ž˜ ์‹คํ–‰๋˜๋‹ˆ Springboot์™€ ์—ฐ๋™ํ•ด๋ณด์ž.

 

=> ์˜์กด์„ฑ ์ถ”๊ฐ€

=> ํ”„๋กœํผํ‹ฐ ์ถ”๊ฐ€

 

@Configuration
public class RedisConfig {

    @Value("{spring.redis.host}")
    private String host;

    @Value("{spring.redis.port}")
    private int port;

    @Bean
    public RedisConnectionFactory redisConnectionFactory() {
        RedisStandaloneConfiguration redisStandaloneConfiguration =
                new RedisStandaloneConfiguration();
        redisStandaloneConfiguration.setHostName(host);
        redisStandaloneConfiguration.setPort(port);

        return new LettuceConnectionFactory(redisStandaloneConfiguration);
    }

    @Bean
    public RedisTemplate<String, Object> redisTemplate() {
        RedisTemplate<String, Object> redisTemplate =
                new RedisTemplate<>();
        redisTemplate.setConnectionFactory(redisConnectionFactory());
        redisTemplate.setKeySerializer(new StringRedisSerializer());
        redisTemplate.setValueSerializer(new StringRedisSerializer());
        return redisTemplate;
    }
}

Configuration ์ถ”๊ฐ€

 

๋กœ๊ทธ์ธ ์ฒ˜๋ฆฌ ์‹œ

๋จผ์ € ํ† ํฐ์„ ๋ฐœ๊ธ‰ํ•˜๊ณ ,

ํ† ํฐ์„ RedisDB์— ์•„์ด๋”” ์ด๋ฆ„์œผ๋กœ ์ €์žฅํ•œ๋‹ค.

๋กœ๊ทธ์•„์›ƒ ์ฒ˜๋ฆฌ ์‹œ

=> ํ‚ค๋ฅผ ์‚ญ์ œํ•˜๋ฉด ๋œ๋‹ค.

 

๊ถŒํ•œ ์„ค์ •์€ ๋น ๋ฅธ ์‹œ์ผ ๋‚ด์— ํ•„ํ„ฐ ์ธํ„ฐ์…‰ํ„ฐ๋กœ ๊ตฌํ˜„ํ•ด๋ด์•ผ๊ฒ ๋‹ค.

๋ฐ˜์‘ํ˜•