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

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

[Backend] RedisConfig ์ž‘์„ฑ: Redis ์—ฐ๋™ํ•˜๊ธฐ

๋ฐ˜์‘ํ˜•

 

 

 

 

๐Ÿš€ Redis ์—ฐ๋™ํ•˜๊ธฐ

Spring Boot  ํ”„๋กœ์ ํŠธ์— Redis๋ฅผ ๋ถ™์ด๋ ค๋ฉด ๋จผ์ € ๋‘˜ ์‚ฌ์ด๋ฅผ ์—ฐ๊ฒฐํ•˜๋Š” ํ†ต๋กœ๋ฅผ ์—ด์–ด์ฃผ์–ด์•ผ ํ•œ๋‹ค.

์•„๋ž˜ ์ฝ”๋“œ๋Š” ์—ฐ๊ฒฐ ํ†ต๋กœ๋ฅผ ์—ด์–ด์ฃผ๊ธฐ ์œ„ํ•ด์„œ ๋‚ด๊ฐ€ ์‚ฌ์šฉํ•œ ์„ค์ • ํด๋ž˜์Šค์ธ๋ฐ, ์ด์™€ ๊ด€๋ จํ•œ ๊ฐœ๋…๋“ค์„ ์ •๋ฆฌํ•ด๋ณด๊ณ ์ž ํ•œ๋‹ค.

import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.cache.annotation.EnableCaching;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.redis.connection.RedisConnectionFactory;
import org.springframework.data.redis.connection.RedisStandaloneConfiguration;
import org.springframework.data.redis.connection.lettuce.LettuceConnectionFactory;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.serializer.StringRedisSerializer;

@Slf4j
@EnableCaching
@Configuration
public class RedisConfig {

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

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

    @Value("${spring.data.redis.password:}")
    private String redisPassword;

    @Bean
    public RedisConnectionFactory redisConnectionFactory() {
        return new LettuceConnectionFactory(new RedisStandaloneConfiguration(redisHost, redisPort));
    }

    @Bean
    public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory cf) {
        RedisTemplate<String, Object> template = new RedisTemplate<>();

        // โ‘  ์ปค๋„ฅ์…˜ ํŒฉํ† ๋ฆฌ ์ฃผ์ž…
        template.setConnectionFactory(cf);

        // โ‘ก ์ง๋ ฌํ™” ์ „๋žต(Serializer) ์„ค์ •
        StringRedisSerializer stringSer = new StringRedisSerializer();
        template.setKeySerializer(stringSer);       // ํ‚ค  : ์‚ฌ๋žŒ์ด ์ฝ์„ ์ˆ˜ ์žˆ๋Š” ๋ฌธ์ž์—ด
        template.setHashKeySerializer(stringSer);   // ํ•ด์‹œ ํ‚ค๋„ ๋ฌธ์ž์—ด๋กœ!

        // “๊ฐ’” ์ชฝ์€ ์ƒํ™ฉ์— ๋”ฐ๋ผ ์ „๋žต์ด ๊ฐˆ๋ฆฐ๋‹ค
        //  โ””โ”€ ๋‹จ์ˆœ ๋ฌธ์ž์—ด๋งŒ ์ €์žฅ โžœ StringRedisSerializer
        //  โ””โ”€ ์ž๋ฐ” ๊ฐ์ฒด(DTO, Map ๋“ฑ)๊นŒ์ง€ ์ €์žฅ โžœ GenericJackson2JsonRedisSerializer
        template.setValueSerializer(stringSer);     // ← ์˜ˆ์‹œ๋Š” ๋ฌธ์ž์—ด ์ „์šฉ
        template.setHashValueSerializer(stringSer);

        template.afterPropertiesSet(); // ๋‚ด๋ถ€ ์ดˆ๊ธฐํ™”
        return template;
    }

}

 


๐Ÿ  ํด๋ž˜์Šค ์„ ์–ธ๋ถ€

  • @Configuration ๐Ÿ‘‰๐Ÿป ์ด๊ฒƒ์„ ๋ช…์‹œํ•˜๋ฉด "๋‚˜๋Š” ์„ค์ • ํŒŒ์ผ์ด์•ผ!" ํ•˜๊ณ  Spring ์ปจํ…Œ์ด๋„ˆ์— ๋“ฑ๋ก๋œ๋‹ค.
  • @EnableCaching ๐Ÿ‘‰๐Ÿป ์ดํ›„์— @Cacheable ๋“ฑ์„ ์‚ฌ์šฉํ•˜๋ฉด, Redis๋ฅผ ์บ์‹œ ์ €์žฅ์†Œ๋กœ ํ™œ์šฉํ•  ์ค€๋น„๊ฐ€ ์™„๋ฃŒ๋œ๋‹ค.
  • @Slf4j ๐Ÿ‘‰๐Ÿป ๋กœ๊น…์„ ํŽธํ•˜๊ฒŒ ์ฐ๊ธฐ ์œ„ํ•œ Lombok ์–ด๋…ธํ…Œ์ด์…˜์ด๋‹ค.

 


๐Ÿ”‘ ํ”„๋กœํผํ‹ฐ ์ฃผ์ž…

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

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

@Value("${spring.data.redis.password:}")
private String redisPassword;

 

application.yml์— ์ ์–ด ๋‘” host, port, password ๊ฐ’์„ ์ฃผ์ž…ํ•ด์ค€๋‹ค.

ํ™˜๊ฒฝ๋ณ„๋กœ ๊ฐ’๋งŒ ๋ฐ”๊พธ๋ฉด ์ฝ”๋“œ ์ˆ˜์ • ์—†์ด ๋‹ค๋ฅธ Redis ์ธ์Šคํ„ด์Šค์— ์—ฐ๊ฒฐํ•  ์ˆ˜ ์žˆ๋‹ค.

 


๐ŸŒ redisConnectionFactory

@Bean
    public RedisConnectionFactory redisConnectionFactory() {
        return new LettuceConnectionFactory(new RedisStandaloneConfiguration(redisHost, redisPort));
    }

 

Spring Data ๊ณ„์—ด์—์„œ๋Š” DB๋‚˜ ์บ์‹œ ์„œ๋ฒ„์— ์ง์ ‘ ์—ฐ๊ฒฐ์„ ๋งŒ๋“ค๊ณ  ๊ด€๋ฆฌํ•˜๋Š” ์ฑ…์ž„์„ ...ConnectionFactory๋ผ๋Š” ์ธํ„ฐํŽ˜์ด์Šค์— ์œ„์ž„ํ•œ๋‹ค.

์ด ๋•๋ถ„์— ์šฐ๋ฆฌ๋Š” JdbcTemplate · RedisTemplate ๊ฐ™์€ ๊ณ ์ˆ˜์ค€ API๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ,

์ปค๋„ฅ์…˜์„ ์–ด๋–ป๊ฒŒ ์–ป์„์ง€ ๊ณ ๋ฏผํ•  ํ•„์š” ์—†์ด ConnectionFactory๋ฅผ ์ฃผ์ž…๋ฐ›์•„์„œ ํ•„์š”ํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ์ฝ๊ณ  ์“ฐ๊ธฐ๋งŒ ํ•˜๋ฉด ๋˜๋Š” ๊ฒƒ์ด๋‹ค.

ํŠนํžˆ, ์ด๋ฒˆ์— ์•Œ์•„๋ณผ Redis์—์„œ๋Š” ์ด ConnectionFactory์˜ ๊ตฌ์ฒด ๊ตฌํ˜„์ฒด๋กœ LettuceConnectionFactory๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.

 

 

Jedis์™€ ๋น„๊ตํ–ˆ์„ ๋•Œ Lettuce๊ฐ€ ๊ฐ–๋Š” ๊ฐ•์ ์„ ๋ช‡ ๊ฐ€์ง€ ์‚ดํŽด๋ณด๋ฉด, ์•„๋ž˜์™€ ๊ฐ™๋‹ค.

  • Netty ๊ธฐ๋ฐ˜ ๋…ผ๋ธ”๋กœํ‚น I/O
    • Lettuce๋Š” Netty ์œ„์—์„œ ๋™์ž‘ํ•˜๋Š” ๋“œ๋ผ์ด๋ฒ„๋กœ, ๋…ผ๋ธ”๋กœํ‚น I/O๋ฅผ ์ง€์›ํ•œ๋‹ค.
    • ์ด๋ฅผ ํ†ตํ•ด ํ•˜๋‚˜์˜ ์ปค๋„ฅ์…˜์„ ์—ฌ๋Ÿฌ ์Šค๋ ˆ๋“œ๊ฐ€ ๊ณต์œ ํ•  ์ˆ˜ ์žˆ๊ณ , I/O ์ด๋ฒคํŠธ๋Š” ๋ชจ๋‘ ์ด๋ฒคํŠธ ๋ฃจํ”„๋ผ๋Š” ์ค‘์•™ ์žฅ์น˜์—์„œ ์ฒ˜๋ฆฌ๋œ๋‹ค.
    • ๋”ฐ๋ผ์„œ ๊ฒฐ๊ณผ์ ์œผ๋กœ๋Š”, ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ๋Ÿ‰๊ณผ ์Šค๋ ˆ๋“œ ์ˆ˜๋ฅผ ๋Œ€ํญ ์ค„์ผ ์ˆ˜ ์žˆ๊ธฐ์— ๊ณ ์„ฑ๋Šฅ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์— ์ ํ•ฉํ•˜๋‹ค.
  • Reactive & Pub / Sub ์ง€์›
    • Lettuce๋Š” Mono, Flux๋ฅผ ํ†ตํ•ด ๋ฆฌ์•กํ‹ฐ๋ธŒ ๋ฐฉ์‹์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ๋‹ค๋ฃฐ ์ˆ˜ ์žˆ์–ด์„œ WebFlux ํ™˜๊ฒฝ๊ณผ ์ž˜ ๋งž๋Š”๋‹ค.
    • ๋˜ํ•œ, Pub / Sub ๋ฉ”์‹œ์ง• ๊ธฐ๋Šฅ๋„ ๊ธฐ๋ณธ์ ์œผ๋กœ ์ง€์›ํ•œ๋‹ค.
  • ์ž๋™ ๋ณต๊ตฌ (Auto-Reconnect & Backoff)
    • ๋„คํŠธ์›Œํฌ ์˜ค๋ฅ˜๋‚˜ Redis ๋‹ค์šด์œผ๋กœ ์ปค๋„ฅ์…˜์ด ๋ˆํ˜๋„, ์ž๋™ ์žฌ์‹œ๋„ ๋ฐ ์ง€์ˆ˜ ๋ฐฑ์˜คํ”„ ์ „๋žต์ด ๋‚ด์žฅ๋˜์–ด ์žˆ์–ด์„œ ์šด์˜ ์ค‘ ์•ˆ์ •์„ฑ์ด ๋›ฐ์–ด๋‚˜๋‹ค.
  • Topology Refresh ์ง€์›
    • Sentinel ๋˜๋Š” Cluster ํ™˜๊ฒฝ์—์„œ ๋งˆ์Šคํ„ฐ ๋…ธ๋“œ๊ฐ€ ๋ณ€๊ฒฝ๋˜๋ฉด, ์ž๋™์œผ๋กœ ๊ฐ์ง€ํ•ด์„œ ์—ฐ๊ฒฐ์„ ๊ฐฑ์‹ ํ•  ์ˆ˜ ์žˆ๋‹ค.

 

LettuceConnectionFactory๋Š” ๋‹จ์ˆœํžˆ ์ปค๋„ฅ์…˜ ํ•˜๋‚˜๋ฅผ ์—ด๊ณ  ๋งˆ๋Š” ๊ฐ์ฒด๊ฐ€ ์•„๋‹ˆ๋ผ, ๋‚ด๋ถ€์ ์œผ๋กœ ๊ฝค ๋ณต์žกํ•œ ์ดˆ๊ธฐํ™” ๊ณผ์ •์„ ๊ฑฐ์นœ๋‹ค.

๊ทธ ๊ณผ์ •์€ ์•„๋ž˜์™€ ๊ฐ™๋‹ค.

  1. ํด๋ผ์ด์–ธํŠธ ์ž์› ์ƒ์„ฑ
    • ๋จผ์ € ClientResources ๋ผ๋Š” ๊ฐ์ฒด๋ฅผ ํ†ตํ•ด Netty ์ด๋ฒคํŠธ๋ฃจํ”„, DNS ๋ฆฌ์กธ๋ฒ„, ํƒ€์ด๋จธ ๋“ฑ์˜ ์ž์›์„ ์ค€๋น„ํ•œ๋‹ค.
    • ์ด ์ž์›์€ ์—ฌ๋Ÿฌ Redis ์ธ์Šคํ„ด์Šค ๊ฐ„์—๋„ ์žฌ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์–ด ํšจ์œจ์ ์ด๋‹ค.
  2. LettuceClient ์ธ์Šคํ„ด์Šค ์ค€๋น„
    • Redis ํด๋ผ์ด์–ธํŠธ๋ฅผ ์ดˆ๊ธฐํ™”ํ•œ๋‹ค.
    • ์ด๋•Œ Standalone, Sentinel, ๋˜๋Š” Cluster ๊ฐ๊ฐ์— ๋งž๋Š” ํด๋ผ์ด์–ธํŠธ ๊ฐ์ฒด๊ฐ€ ์‚ฌ์šฉ๋œ๋‹ค.
    • ๋‚ด๊ฐ€ ์œ„์—์„œ ์„ค์ •ํ•œ ์ฝ”๋“œ๋Š” RedisStandaloneConfiguration์ด๋ฏ€๋กœ ๋‹จ์ผ ๋…ธ๋“œ์šฉ RedisClient๊ฐ€ ๋งŒ๋“ค์–ด์งˆ ๊ฒƒ์ด๋‹ค.
  3. Connection Pool ์ดˆ๊ธฐํ™” (์„ ํƒ ์‚ฌํ•ญ)
    • commons-pool2๋ฅผ ํ†ตํ•ด ์ปค๋„ฅ์…˜ ํ’€์„ ํ™œ์„ฑํ™”ํ•  ์ˆ˜ ์žˆ๋‹ค.
    • ํ’€์„ ์„ค์ •ํ•˜๋ฉด ์ตœ๋Œ€ ์—ฐ๊ฒฐ ์ˆ˜, idle ์œ ์ง€ ์‹œ๊ฐ„, ์ตœ์†Œ ์œ ํœด ์ปค๋„ฅ์…˜ ์ˆ˜ ๋“ฑ์„ ์ง€์ •ํ•  ์ˆ˜ ์žˆ์–ด์„œ ์‹ค์„œ๋น„์Šค์— ์•ˆ์ •์ ์œผ๋กœ ๋Œ€์‘ํ•  ์ˆ˜ ์žˆ๋‹ค.
  4. Lazy Connect
    • ํŒฉํ† ๋ฆฌ๋ฅผ ์ƒ์„ฑํ•  ๋•Œ Redis์™€ ๋ฐ”๋กœ ์—ฐ๊ฒฐํ•˜์ง€ ์•Š๊ณ , ์ฒ˜์Œ์œผ๋กœ getConnection()์„ ํ˜ธ์ถœํ•˜๋Š” ์‹œ์ ์— ์‹ค์ œ ์—ฐ๊ฒฐ์ด ์ด๋ฃจ์–ด์ง„๋‹ค.
    • ๋•๋ถ„์— ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ๋ถ€ํŒ… ์†๋„๊ฐ€ ๋นจ๋ผ์ง€๊ณ , ๋ถˆํ•„์š”ํ•œ ์ดˆ๊ธฐ ์ปค๋„ฅ์…˜๋„ ์ค„์ผ ์ˆ˜ ์žˆ๋‹ค.
  5. Exception Translation
    • Redis ๋ช…๋ น ์ค‘ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉด Lettuce๋Š” ์ž์ฒด ์˜ˆ์™ธ๋ฅผ ๋˜์ง„๋‹ค.
    • ์Šคํ”„๋ง์€ ์ด ์˜ˆ์™ธ๋ฅผ DataAccessException ๊ฐ™์€ ๊ณตํ†ต ์˜ˆ์™ธ๋กœ ๊ฐ์‹ธ์„œ ๋ฐ˜ํ™˜ํ•œ๋‹ค.
    • ์ด ๋•๋ถ„์— DB, Redis ๋“ฑ ๋‹ค์–‘ํ•œ ์ €์žฅ์†Œ์˜ ์˜ˆ์™ธ๋ฅผ ํ•˜๋‚˜์˜ ๋ฐฉ์‹์œผ๋กœ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๊ณ , ๊ตญ์ œํ™” ๋ฉ”์‹œ์ง€ ์ฒ˜๋ฆฌ์—๋„ ์œ ๋ฆฌํ•˜๋‹ค.

 


โœ‰๏ธ redisTemplate

@Bean
public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory cf) {
    RedisTemplate<String, Object> template = new RedisTemplate<>();

    // โ‘  ์ปค๋„ฅ์…˜ ํŒฉํ† ๋ฆฌ ์ฃผ์ž…
    template.setConnectionFactory(cf);

    // โ‘ก ์ง๋ ฌํ™” ์ „๋žต(Serializer) ์„ค์ •
    StringRedisSerializer stringSer = new StringRedisSerializer();
    template.setKeySerializer(stringSer);       // ํ‚ค  : ์‚ฌ๋žŒ์ด ์ฝ์„ ์ˆ˜ ์žˆ๋Š” ๋ฌธ์ž์—ด
    template.setHashKeySerializer(stringSer);   // ํ•ด์‹œ ํ‚ค๋„ ๋ฌธ์ž์—ด๋กœ!

    // “๊ฐ’” ์ชฝ์€ ์ƒํ™ฉ์— ๋”ฐ๋ผ ์ „๋žต์ด ๊ฐˆ๋ฆฐ๋‹ค
    //  โ””โ”€ ๋‹จ์ˆœ ๋ฌธ์ž์—ด๋งŒ ์ €์žฅ โžœ StringRedisSerializer
    //  โ””โ”€ ์ž๋ฐ” ๊ฐ์ฒด(DTO, Map ๋“ฑ)๊นŒ์ง€ ์ €์žฅ โžœ GenericJackson2JsonRedisSerializer
    template.setValueSerializer(stringSer);     // ← ์˜ˆ์‹œ๋Š” ๋ฌธ์ž์—ด ์ „์šฉ
    template.setHashValueSerializer(stringSer);

    template.afterPropertiesSet(); // ๋‚ด๋ถ€ ์ดˆ๊ธฐํ™”
    return template;
}

 

RedisTemplate์ด ํ•„์š”ํ•œ ์ด์œ ๋Š” ์•„๋ž˜์™€ ๊ฐ™๋‹ค.

  • ๊ณ ์ˆ˜์ค€ API ์ œ๊ณต
    • template.opsForValue().set("foo", "bar") ๊ฐ™์€ ๋ฉ”์„œ๋“œ ํ•œ ์ค„๋กœ SET foo bar ๋ช…๋ น์„ ๋‚ ๋ฆด ์ˆ˜ ์žˆ๋‹ค.
    • ๋”ฐ๋ผ์„œ ์†Œ์ผ“, ๋ฐ”์ดํŠธ ๋ฐฐ์—ด, ์˜ˆ์™ธ ์ฒ˜๋ฆฌ ๋“ฑ ์ €์ˆ˜์ค€ ์ฝ”๋“œ๋ฅผ ์ง์ ‘ ๋‹ค๋ฃฐ ํ•„์š”๊ฐ€ ์—†๋‹ค.
  • ํƒ€์ž… ์•ˆ์ „ & ์ง๋ ฌํ™” ์ž๋™ํ™”
    • ํ‚ค-๊ฐ’ ํƒ€์ž…์„ ์ œ๋„ค๋ฆญ์œผ๋กœ ๋ช…์‹œํ•˜๊ณ , Serializer๋ฅผ ํ•œ ๋ฒˆ๋งŒ ์ง€์ •ํ•˜๋ฉด ์ดํ›„ ํ˜ธ์ถœ๋ถ€ํ„ฐ๋Š” ์ž๋™ ๋ณ€ํ™˜๋œ๋‹ค.
    • ๋”ฐ๋ผ์„œ JSON → ๋ฐ”์ดํŠธ → Redis ๊ณผ์ •์„ ์†์œผ๋กœ ๋ฐ˜๋ณตํ•  ํ•„์š”๊ฐ€ ์—†๋‹ค.
  • ํŠธ๋žœ์žญ์…˜, ํŒŒ์ดํ”„๋ผ์ธ, Pub / Sub ๋“ฑ ๊ณ ๊ธ‰ ๊ธฐ๋Šฅ๋„ ๋™์ผ ๊ฐ์ฒด๋กœ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•˜๋‹ค.

 

๋˜ํ•œ, Serializer๋ฅผ ์ง€์ •ํ•ด์ฃผ๋Š” ์ด์œ ๋Š” Redis ๋‚ด๋ถ€๋Š” ๋ฐ”์ดํŠธ ๋ฐฐ์—ด๋งŒ ๋‹ค๋ฃจ๊ธฐ ๋•Œ๋ฌธ์—

์ž๋ฐ” ๊ฐ์ฒด ↔ ๋ฐ”์ดํŠธ ๋ณ€ํ™˜ ๊ทœ์น™ (Serializer)์„ ๋ช…ํ™•ํžˆ ์ •ํ•ด์ฃผ์–ด์•ผ ๋ฐ์ดํ„ฐ๊ฐ€ ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ์ฝ๊ณ  ์จ์ง€๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

 

๋Œ€ํ‘œ์ ์ธ Serializer ์ข…๋ฅ˜๋Š” ์•„๋ž˜์™€ ๊ฐ™๋‹ค.

  1. StringRedisSerializer
    • UTF-8 ๋ฌธ์ž์—ด์„ ๊ทธ๋Œ€๋กœ ์ €์žฅํ•˜๊ณ  ์‹ถ์„ ๋•Œ ์‚ฌ์šฉํ•œ๋‹ค.
    • ํ‚ค-๊ฐ’์ด ๋ชจ๋‘ ์งง์€ ๋ฌธ์ž์—ด์ด๋ฉด ๊ฐ€์žฅ ๋‹จ์ˆœํ•˜๊ณ  ๋น ๋ฅด๋‹ค.
  2. GenericJackson2JsonRedisSerializer
    • ์ž๋ฐ” ๊ฐ์ฒด๋ฅผ JSON ๋ฌธ์ž์—ด๋กœ ๋ณ€ํ™˜ํ•ด์„œ ์ €์žฅํ•œ๋‹ค.
    • ์ด๋Š” ํด๋ž˜์Šค ์ •๋ณด๊นŒ์ง€ ํ•จ๊ป˜ ๋ณด๊ด€ํ•˜๊ธฐ์— ์—ญ์ง๋ ฌํ™”์— ์•ˆ์ „ํ•˜๋‹ค.
    • ํŠนํžˆ, DTO, Map, ๋ณต์žก ๊ฐ์ฒด๋ฅผ ์บ์‹œ์— ๊ทธ๋Œ€๋กœ ๋„ฃ๊ณ  ์‹ถ์„ ๋•Œ ์œ ์šฉํ•˜๋‹ค.
  3. ์ปค์Šคํ…€ Serializer
    • ์„ฑ๋Šฅ ๊ทน๋Œ€ํ™”๋ฅผ ์›ํ•˜๋ฉด Kryo, ProtoBuf ๊ฐ™์€ ๋ฐ”์ด๋„ˆ๋ฆฌ ํฌ๋งท์œผ๋กœ ์ปค์Šคํ…€ ๊ตฌํ˜„์ด ๊ฐ€๋Šฅํ•˜๋‹ค.
    • ๋‹จ, ์–‘์ชฝ ๋ชจ๋‘ ๊ฐ™์€ Serializer๋ฅผ ์จ์•ผ ์—ญ์ง๋ ฌํ™” ์˜ค๋ฅ˜๊ฐ€ ์—†๋‹ค.

 


๐Ÿ“š ๊ฒฐ๋ก 

Spring Boot์—์„œ Redis๋ฅผ ์•ˆ์ •์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๋ ค๋ฉด

RedisConnectionFactory๋กœ ์—ฐ๊ฒฐ์„ ์—ด๊ณ ,

RedisTemplate์„ ํ†ตํ•ด ์ง๋ ฌํ™” ์„ค์ •๊ณผ ๋ฐ์ดํ„ฐ ๋ช…๋ น์„ ๊ณ ์ˆ˜์ค€ API๋กœ ๋‹ค๋ฃจ๋Š” ๊ฒƒ์ด ํ•ต์‹ฌ์ด๋‹ค.

 

๊ทธ ๋™์•ˆ์€ ์ฝ”๋“œ ํ•œ ์ค„ ํ•œ ์ค„์ด ์–ด๋–ค ์—ญํ• ์„ ํ•˜๋Š”์ง€๋„ ๋ชจ๋ฅด๊ณ ,

์˜ˆ์ „์— ์ผ๋˜ ์ฝ”๋“œ๋ฅผ ๋ณต์‚ฌํ•ด์™€์„œ ์“ฐ๊ธฐ๋งŒ ํ–ˆ๋Š”๋ฐ,

์ด์ œ๋Š” ๊ทธ ์˜๋ฏธ๋ฅผ ๋ช…ํ™•ํžˆ ์ดํ•ดํ•˜๊ณ  ๋” ๋‚˜์€ ๊ตฌ์กฐ๋ฅผ ์œ„ํ•ด ๊ณ ๋ฏผํ•˜๋Š” ์Šต๊ด€์„ ๊ธธ๋Ÿฌ์•ผ๊ฒ ๋‹ค.

๋ฐ˜์‘ํ˜•

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

[Backend] @Transactional  (3) 2025.07.07
[Backend] RedisTemplate  (1) 2025.06.28
[Backend] Redis TTL + JWT  (0) 2025.06.22
[Backend] JWT  (0) 2025.06.21
[Backend] Java 17 VS Java 21  (2) 2025.06.17