[Redis] Spring Boot + Docker-Compose + Redis + Session을 이용한 로그인
들어가기 전
글의 순서는 Docker-Compose로 Redis 세팅하고 Spring에서 세팅된 Redis에 대한 설정을 한 뒤 Session을 이용해서 로그인하는 순서대로 설명하겠습니다.
Docker-Compose로 Redis 세팅
docker-compse.yml 파일을 만들어서 아래와 같이 설정을 해줍니다.
version : "3"
services :
redis:
image: redis:latest
container_name: redis
hostname: test
ports:
- "6379:6379"
- image : redis 이미지를 내려받습니다. 여기서 latest는 최신버전을 뜻합니다. 즉 최신버전 redis를 이미지로 내려받습니다.
- container_name : 다운받은 redis image를 run 시키면 redis에 대한 container가 실행이 되는데 해당 container에 대한 이름을 설정하는 것입니다.
- ports : "6379:6379"에서 앞 6379는 사용자가 redis에 접근할 포트번호이고 뒤 6379는 redis 포트번호입니다.
설정을 다 했으면 docker-compose.yml파일이 있는 프로젝트 디렉터리로 들어가서 아래와 같이 명령어를 작성합니다.
docker-compose up <-- docker-compose.yml에 정의한 image를 실행시키는 명령어
docker-compose start <-- 컨테이너를 백그라운드에서실행시키는 명령어
- docker-compose up 또는 docker-compose start를 실행시키시면 docker-compose.yml에 작성한 image들을 실행시켜 줍니다.
아래와 같은 명령어를 작성을 하면 컨터이너가 실행 중인지 아닌지를 확인할 수 있습니다.
docker ps
Spring에 설정
application.yml에 아래와 같이 작성하고 build.gradle에 의존성을 추가하면 세팅은 끝이 납니다.
application.yml
spring :
redis:
host: test
port: 6379
build.gradle
implementation 'org.springframework.boot:spring-boot-starter-data-redis' // redis 의존성
implementation 'org.springframework.session:spring-session-data-redis' // 세션을 저장하기 위한 redis의존성
Redis + Session을 이용한 로그인
@SpringBootApplication
@EnableRedisHttpSession
public class ProjectApplication {
public static void main(String[] args) {
SpringApplication.run(ProjectApplication.class, args);
}
}
- @EnableRedisHttpSession를 이용해서 redis 세션을 이용할 수 있게 설정을 해줍니다.
@Configuration
public class RedisConfig {
@Value("${spring.redis.host}")
private String host;
@Value("${spring.redis.port}")
private int port;
@Bean
public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory connectionFactory) {
RedisTemplate<String, Object> redisTemplate = new RedisTemplate<>();
redisTemplate.setKeySerializer(new StringRedisSerializer());
redisTemplate.setValueSerializer(new GenericJackson2JsonRedisSerializer());
redisTemplate.setConnectionFactory(connectionFactory);
return redisTemplate;
}
@Bean
public RedisConnectionFactory redisConnectionFactory() {
RedisStandaloneConfiguration redisStandaloneConfiguration = new RedisStandaloneConfiguration();
redisStandaloneConfiguration.setHostName(host);
redisStandaloneConfiguration.setPort(port);
return new LettuceConnectionFactory(redisStandaloneConfiguration);
}
- host와 port는 application.yml에 설정해 놓은 redis 값을 @Value를 통해 가져옵니다.
- redisTemplate.setKeySerializer(new StringRedisSerializer()), redisTemplate.setValueSerializer(new GenericJackson2 JsonRedisSerializer()) : spring - redis 사이에서 키와 value값을 직렬화하여 읽을 수 있는 형태로 만들어 줍니다.
- redisConnectionFactory() : Lettuce에 application.yml에 설정해 놓은 port와 host정보를 담아서 redis와 연결을 해줍니다. 이미 존재하는 Connection이 있다면 이미 있는 것을 리턴하고 그렇지 않으면 새로 만든 것을 리턴해줍니다.
@RestController
@RequiredArgsConstructor
@Slf4j
public class RedisTestController {
private final HttpSession session;
@PostMapping("/save")
public void save() {
session.setAttribute("ID","redisTest");
session.setMaxInactiveInterval(30);
}
@GetMapping
public void showRedisValue() {
log.info("result = {}", session.getAttribute("ID"));
}
- 세션 키값 "ID"에 "redisTest"라는 값을 담아 담아두고 만료시간을 30초로 설정해 둡니다.
- 세션 키값을 이용해서 "redisTest"을 값을 가져옵니다.
세션에 저장된 값이 Redis에 잘 저장되었는지 확인방법
아래와 같은 명령어를 작성을 하면 Redis에 값이 저장되었는지 확인이 가능합니다.
1. 도커에서 실행 중인 redis컨테이너에 접속하기
docker exec -it redis bash
2. redis에 접속하기
redis-cli
3. 레디스에 저장된 값들 확인하기
keys *
만약 redis에 아무것도 저장이 안 되어있으면 아래 사진과 같은 메시지가 나옵니다.
redis에 저장이 잘 되었다면 아래와 같이 나옵니다.
아래와 같은 명령어를 작성하면 세션에 대한 정보를 보여줍니다.
hkeys "spring:session:sessions:998ad368-4986-4b06-b1f2-948f74095012"
'Redis' 카테고리의 다른 글
[Redis] 기본 명령어 (0) | 2023.07.31 |
---|---|
[Redis] Redis 개념 및 특징 (1) | 2023.01.27 |
댓글
이 글 공유하기
다른 글
-
[Redis] 기본 명령어
[Redis] 기본 명령어
2023.07.31 -
[Redis] Redis 개념 및 특징
[Redis] Redis 개념 및 특징
2023.01.27