실제 프로젝트에 Redis를 적용해보자
1. 의존성 추가 및 환경 설정
//레디스
implementation 'org.springframework.boot:spring-boot-starter-data-redis'
implementation 'org.springframework.session:spring-session-core'
implementation 'org.springframework.session:spring-session-data-redis'
spring:
data:
redis:
host: 127.0.0.1
port: 6379
build.gradle에 의존성을 추가해주고 applicaiton.yml 파일에 redis 정보를 추가한다.
2. RedisConfig.java
@Configuration
@EnableRedisHttpSession
public class RedisConfig {
@Value("${spring.data.redis.host}")
private String redisHost;
@Value("${spring.data.redis.port}")
private int redisPort;
@Bean
public RedisConnectionFactory redisConnectionFactory() {
return new LettuceConnectionFactory(redisHost, redisPort);
}
}
@EnabledRedisHttpSession
을 사용해 세션저장소로 Redis를 사용하겠다고 명시해준다.
.yml 파일에서 session:store-type=redis
라고 명시해주는 것과 동일한 기능이다.
.yml 파일에서 설정한 host와 port 값들을 주입해주고 레디스 연결 팩토리(RedisConnectionFactory)를 생성하여 반환한다.
💡 Lettuce vs Jedis
Redis Client의 오픈 소스는 대표적으로 Lettuce, Jedis가 있는데, 현재 프로젝트에서는 Lettuce를 사용하고 있고 Spring에서도 Lettuce를 default로 지정하고 있다.
스레드 안정성이 대표적인 이유이다.
Jedis의 경우에는 멀티 스레드 환경에서 스레드 안정성을 보장하지 않지만, Lettuce는 netty 기반으로 멀테 스레드 환경에서 공유될 수 있다.
3. 확인
이후 터미널 redis-cli
에서 keys \*
명령어를 통해 레디스에 저장된 모든 키 값을 확인할 수 있다.
앱 실행 후 로그인하여 키 값을 확인해보면 세션이 레디스에 저장된 것을 확인할 수 있다.
로그아웃을 해도 레디스에 세션 정보는 그대로 남아있는데 세션의 생명주기가 남아있기 때무이다. 세션의 만료시간이 지나면 레디스에서 세션 정보가 삭제된다. 세션 설정을 통해 만료시간을 조정할 수 있다.
'트러블슈팅' 카테고리의 다른 글
[Spring] Redis 캐시 적용하기 (2/2) (0) | 2023.10.22 |
---|---|
[Spring] Redis 캐시 적용하기 (1/2) (1) | 2023.10.19 |
[Spring] Redis를 통한 세션 불일치 문제 해결 (1/2) (0) | 2023.10.12 |
[Spring] 재고처리 동시성 이슈 해결하기 (2/2) (0) | 2023.07.22 |
[Spring] 재고처리 동시성 이슈 해결하기 (1/2) (0) | 2023.07.22 |