Spring에서 redis를 이용하여 간단하게 login을 구현해보겠습니다.
build.grable 에 추가
implementation 'org.springframework.session:spring-session-data-redis'
implementation 'org.springframework.boot:spring-boot-starter-data-redis'
application.yaml 설정
spring:
session:
store-type: redis
redis:
repository-type: indexed
flush-mode: on_save
data:
redis:
host: 127.0.0.1
password: password123
port: 6379
- 세션 저장소로 Redis를 사용하기 위해 지정해줍니다.
리포지토리 유형은 인덱싱된 리포지토리를 사용하였습니다.
그리고 세션 변경 내용을 저장할 때마다 Redis에 즉시 flush(저장)합니다. - Redis 서버의 호스트 주소, 서버의 비밀번호, 서버의 포트 번호를 지정합니다.
RedisConfig
`@EnableRedisRepositories` 어노테이션을 선언하여 Redis 레포지토리를 활성화합니다.
이를 통해 Spring Data Redis를 사용하여 Redis 데이터베이스와 상호작용할 수 있습니다.
@Configuration
@EnableRedisRepositories
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 password;
//LettuceConnectionFactory를 사용하여 Redis 연결을 설정하고 반환
@Bean
public RedisConnectionFactory redisConnectionFactory() {
RedisStandaloneConfiguration redisConfiguration = new RedisStandaloneConfiguration();
redisConfiguration.setHostName(redisHost);
redisConfiguration.setPort(redisPort);
redisConfiguration.setPassword(password);
LettuceConnectionFactory lettuceConnectionFactory = new LettuceConnectionFactory(redisConfiguration);
return lettuceConnectionFactory;
}
// RedisTemplate 빈 정의
@Bean
public RedisTemplate<String, String> redisTemplate() {
RedisTemplate<String, String> redisTemplate = new RedisTemplate<>();
redisTemplate.setKeySerializer(new StringRedisSerializer());
redisTemplate.setValueSerializer(new StringRedisSerializer());
redisTemplate.setConnectionFactory(redisConnectionFactory());
return redisTemplate;
}
}
로그인 로직
"user"이라는 이름으로 속성값을 추가하여 세션을 저장합니다.
Session session = sessionRepository.createSession();
session.setAttribute("admin", adminInfo.getUserId());
sessionRepository.save(session);
return new LoginResponse(adminInfo.getUserId(), session.getId());
로그인을 시도하고 아래에서 저장된 정보를 확인해보겠습니다!!
Redis에 저장된 세션 정보
저는 docker에 Redis를 설치하여 확인하였습니다.
먼저 실행되고 있는 컨테이너 목록을 확인합니다.
docker ps -a
이때 목록에서 container Id를 확인하여 아래 명령어를 실행합니다.
Redis 컨테이너 내부의 Redis cli를 실행하기 위한 명령어입니다.
이를 통해 Redis 서버와 상호작용하여 데이터베이스에 대한 명령을 실행할 수 있습니다.
docker exec -it 'container id' redis-cli
Redis에서 사용 가능한 키를 반환하여 확인해보겠습니다.
keys *

- `spring:session:sessions:expires:556d2c1d-3806-4849-871c-195f095fb100`
이 키는 세션 데이터의 만료 정보를 저장합니다. 여기서 "556d2c1d-3806-4849-871c-195f095fb100"은 세션의 고유 식별자입니다. 만료 정보는 세션이 언제 만료되는지를 나타내는 타임스탬프로 표시됩니다. - `spring:session:expirations:1714556460000`
이 키는 세션의 만료 시간을 관리하는 데 사용됩니다. 여기서 "1714556460000"은 만료 시간을 나타내는 UNIX 타임스탬프입니다. 만료 시간이 지나면 세션 데이터가 삭제됩니다. - `spring:session:sessions:556d2c1d-3806-4849-871c-195f095fb100`
이 키는 실제 세션 데이터를 저장합니다. 여기서 "556d2c1d-3806-4849-871c-195f095fb100"은 세션의 고유 식별자입니다. 이 키에는 세션에 관련된 데이터가 저장되며, 클라이언트가 서버에 요청할 때마다 이 데이터가 사용됩니다.
'Data > Redis' 카테고리의 다른 글
| [Redis] redis에 대해 (0) | 2024.04.28 |
|---|