Hello Kitty Eyes Shut
๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

๐Ÿ’ป๊ณต๋ถ€ ๊ธฐ๋ก/๐Ÿ“Œ Backend

[Backend] RedisTemplate

๋ฐ˜์‘ํ˜•

 

 

 

 

๐ŸŽฏ Redis Template

Redis Template๋ž€ Spring Data Redis๊ฐ€ ์ œ๊ณตํ•˜๋Š” ๊ณ ์ˆ˜์ค€ ํด๋ผ์ด์–ธํŠธ ๊ฐ์ฒด์ด๋‹ค.

 

์ฆ‰, ์ž๋ฐ” ์ฝ”๋“œ์—์„œ Redis ๋ช…๋ น์„ ์‰ฝ๊ณ  ์•ˆ์ „ํ•˜๊ฒŒ ๋‹ค๋ฃฐ ์ˆ˜ ์žˆ๋„๋ก ๋ž˜ํ•‘ํ•ด๋†“์€ ๋ฐ”๊ตฌ๋‹ˆ๋ผ๊ณ  ๋ณด๋ฉด ๋œ๋‹ค.

 


๐Ÿง Redis Template์ด ํ•„์š”ํ•œ ์ด์œ 

์ „ํ†ต์  ์ ‘๊ทผ RedisTemplate ์ ‘๊ทผ
Lettuce/Jedis ํด๋ผ์ด์–ธํŠธ๋ฅผ ์ง์ ‘ ํ˜ธ์ถœ
→ SET key value, GET key ๋“ฑ ๋ฌธ์ž์—ด ๋ช…๋ น ์กฐํ•ฉ
์ž๋ฐ” ๋ฉ”์„œ๋“œ ํ˜ธ์ถœ → template.opsForValue().set(key, obj) ๊ฐ™์ด ํƒ€์ž…-์•ˆ์ „ํ•˜๊ณ , ํŠธ๋žœ์žญ์…˜·ํŒŒ์ดํ”„๋ผ์ธ ๋“ฑ ๊ณ ๊ธ‰ ๊ธฐ๋Šฅ ํฌํ•จ
์ง๋ ฌํ™”/์—ญ์ง๋ ฌํ™”๋Š” ๊ฐœ๋ฐœ์ž๊ฐ€ ์ง์ ‘ ์ฒ˜๋ฆฌํ•ด์•ผ ํ•จ Serializer ์ „๋žต์„ ํ•œ ๋ฒˆ๋งŒ ์ง€์ •ํ•˜๋ฉด ๋ชจ๋“  ํ˜ธ์ถœ์— ์ž๋™ ์ ์šฉ
๋ณด์ผ๋Ÿฌํ”Œ๋ ˆ์ดํŠธ(์—ฐ๊ฒฐ ์—ด๊ณ /๋‹ซ๊ณ , ์˜ˆ์™ธ ๋ณ€ํ™˜) ๋งŽ์Œ Spring์ด ์ปค๋„ฅ์…˜ ์ƒ๋ช…์ฃผ๊ธฐ·์˜ˆ์™ธ ๋ณ€ํ™˜์„ ์•Œ์•„์„œ ์ฒ˜๋ฆฌ

 


๐Ÿงฑ ํ•ต์‹ฌ ๊ตฌ์„ฑ ์š”์†Œ

1๏ธโƒฃ ์—ฐ๊ฒฐ ํŒฉํ† ๋ฆฌ (RedisConnectionFactory)

  • Lettuce / Jedis ๋“ฑ Raw ๋“œ๋ผ์ด๋ฒ„๋ฅผ ์ถ”์ƒํ™”ํ•จ
  • ํ…œํ”Œ๋ฆฟ์€ ์—ฌ๊ธฐ์—์„œ ์ปค๋„ฅ์…˜์„ ๊บผ๋‚ด์„œ ์‚ฌ์šฉํ•จ

2๏ธโƒฃ ์ง๋ ฌํ™” ์ „๋žต

  • ํ‚ค, ๊ฐ’, ํ•ด์‹œ ํ‚ค, ํ•ด์‹œ ๊ฐ’ ๋งˆ๋‹ค ๋”ฐ๋กœ ์ง€์ • ๊ฐ€๋Šฅํ•จ
  • ex. StringRedisSerializer, GenericJackson2JsonRedisSerializer ๋“ฑ

3๏ธโƒฃ Operation Helper

๋ฉ”์„œ๋“œ Redis ๊ตฌ์กฐ ๋Œ€์‘ ์˜ˆ์‹œ
opsForValue() String ๋ฌธ์ž์—ด/JSON ๊ฐ’
opsForHash() Hash Map ๊ตฌ์กฐ
opsForList() List ํ/์Šคํƒ
opsForSet() Set ์ค‘๋ณต ์—†๋Š” ์ง‘ํ•ฉ
opsForZSet() Sorted Set ์ ์ˆ˜ ๊ธฐ๋ฐ˜ ๋žญํ‚น

 


๐Ÿ“„ ์˜ˆ์‹œ

@Autowired
private RedisTemplate<String, Object> redisTemplate;

public void sample() {
    // 1) ๋‹จ์ˆœ String (๋˜๋Š” JSON) ์ €์žฅ
    redisTemplate.opsForValue().set("accessaToken:123", "abc123", Duraton.ofMinutes(30
));

    // 2) Hash ์˜ˆ์‹œ: ์„ธ์…˜ ์ €์žฅ
    Map<String, Object> sessionDate = Map.of(
        "userId", 42,
        "role", "ADMIN"
    );
    redisTemplate.opsForHash().putAll("session:42", sessionData);
    
    // 3) Sorted Set ์˜ˆ์‹œ: ์ ์ˆ˜ํŒ
    redisTemplate.opsForZSet().add("ranking:game01", "soyeon", 9800);
}

 


๐Ÿค” StringRedisTemplate๊ณผ์˜ ์ฐจ์ด

  • StringRedisTemplate
    • ์ œ๋„ค๋ฆญ์ด <String, String> ๊ณ ์ •์ž„
    • ๊ธฐ๋ณธ Serializer๊ฐ€ ๋ชจ๋‘ StringRedisSerializer์ž„
    • ์ •๋ง ๋ฌธ์ž์—ด๋งŒ ๋„ฃ๊ณ  ๋นผ๋ฉด ๋œ๋‹ค๋Š” ๋‹จ์ˆœํ•œ ์ƒํ™ฉ์—์„œ ์‚ฌ์šฉํ•˜๊ธฐ ํŽธํ•จ
  • RedisTemplate<K, V>
    • ํƒ€์ž…์„ ์ž์œ ๋กญ๊ฒŒ ์ง€์ •ํ•˜๊ณ , ์ง๋ ฌํ™” ์ „๋žต์„ ์›ํ•˜๋Š” ๋Œ€๋กœ ์กฐํ•ฉ ๊ฐ€๋Šฅํ•จ
    • JSON, ProtoBuf, Kryo ๋“ฑ ์ปค์Šคํ…€ Serializer๋„ ์—ฐ๊ฒฐ ๊ฐ€๋Šฅํ•จ
    • ํ•ด์‹œ, ๋ฆฌ์ŠคํŠธ ๋“ฑ ๋ณต์žกํ•œ ๊ตฌ์กฐ๋ฅผ ๋‹ค๋ฃฐ ๋• ๋Œ€๋ถ€๋ถ„ ์ด๊ฑธ ์”€

 


๐Ÿ“š ๊ฒฐ๋ก 

  • RedisTemplate๋ž€ ์Šคํ”„๋ง์ด ํฌ์žฅํ•œ Redis Helper ๊ฐ์ฒด์ด๋‹ค.
  • ์ด๋Š” ์ง๋ ฌํ™” ๋ฐ ์—ฐ๊ฒฐ ๊ด€๋ฆฌ, ์˜ˆ์™ธ ์ฒ˜๋ฆฌ ๋“ฑ์„ ์•Œ์•„์„œ ์ฒ˜๋ฆฌํ•ด์ค€๋‹ค.
  • ๋˜ํ•œ, ์ž๋ฐ” ์นœํ™”์  ๋ฉ”์„œ๋“œ ๋•๋ถ„์— ์ฝ”๋“œ ๊ฐ€๋…์„ฑ์ด ๋†’๊ณ , ๋ฒ„๊ทธ ๊ฐ€๋Šฅ์„ฑ๋„ ์ค„์–ด๋“ ๋‹ค.
  • ๋ฌธ์ž์—ด ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ JSON ๊ฐ์ฒด, ์„ธ์…˜, ๋žญํ‚น ๋“ฑ ๋‹ค์–‘ํ•œ ํƒ€์ž… ๋ฐ ๊ตฌ์กฐ๋ฅผ ๋‹ค๋ฃฐ ๋•Œ ์‚ฌ์šฉํ•˜๊ธฐ ์ข‹๋‹ค.

์ถ”ํ›„ ํŒŒ์ดํ”„๋ผ์ธ, ํŠธ๋žœ์žญ์…˜, Bound Operations, ์‹คํ–‰ ์ฝœ๋ฐฑ ๋“ฑ์— ๊ด€ํ•œ ๊ฒƒ๋„ ๊ณต๋ถ€ํ•ด์„œ ์ ์šฉํ•  ์˜ˆ์ •์ด๋‹ค.

๋ฐ˜์‘ํ˜•

'๐Ÿ’ป๊ณต๋ถ€ ๊ธฐ๋ก > ๐Ÿ“Œ Backend' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

[Backend] @Transactional  (3) 2025.07.07
[Backend] RedisConfig ์ž‘์„ฑ: Redis ์—ฐ๋™ํ•˜๊ธฐ  (1) 2025.06.29
[Backend] Redis TTL + JWT  (0) 2025.06.22
[Backend] JWT  (0) 2025.06.21
[Backend] Java 17 VS Java 21  (2) 2025.06.17