티스토리 뷰
서비스를 무중단으로 운영하려다 보니
서비스는 무중단으로 알게모르게 패치가 적용되었지만 로그인 한 사용자들은 세션정보가 이전 was에 남아있기 때문에
재로그인을 할 수 밖에 없는 상황에 빠지게 된다.
그래서 세션을 spring session + redis 를 이용하여 세션을 redis에 담아보려 한다.
먼저 redis를 도커를 이용해 설치해줍시다.
docker run -d --name redis -p 6379:6379 -v redis:/data redis:6.2.11-alpine
위와 같이 redis 도커 이미지를 컨테이너에 구동시켰습니다.
그리고 redis-cli를 이용하여 비밀번호를 설정해줍니다.
docker exec -it redis /bin/sh
/data # redis-cli
127.0.0.1:6379> auth 비밀번호
(error) ERR AUTH <password> called without any password configured for the default user. Are you sure your configuration is correct?
127.0.0.1:6379> config set requirepass 비밀번호
OK
127.0.0.1:6379> auth 비밀번호
OK
redis 쉘 들어가서 redis-cli 로 접근합니다.
아마 auth 비밀번호 입력하면 설정되지 않아서 error 메세지가 뜨실거고
config set requirepass 로 비밀번호를 설정해주면 됩니다.
그럼 이제 springboot 프로젝트로 돌아와서 redis 관련 설정을 진행합니다.
redis 및 springsession 관련 디펜던시 추가
implementation 'org.springframework.boot:spring-boot-starter-data-redis'
implementation 'org.springframework.session:spring-session-data-redis'
application.yml 에 redis 정보를 추가하면 스프링이
RedisConnectionFactory 인터페이스를 구현하여 알아서 접속시켜준다.
spring:
redis:
host: localhost
port: 6379
password: 비밀번호
redis-cli에서 세션에 담긴 정보들을 보기 위해 아래와 같이 직렬화 빈을 생성합니다.
@Configuration
@EnableRedisHttpSession
public class RedisConfig {
@Bean
public RedisSerializer<Object> springSessionDefaultRedisSerializer() {
return new GenericJackson2JsonRedisSerializer();
}
}
그럼 이제 컨트롤러 하나 작성해서 세션값을 넣어봅시다.
@RestController
public class RedisController {
@PostMapping("/session")
public String sessionTest(HttpSession httpSession) {
String id = "test321";
httpSession.setAttribute("sessionID", id);
return "session TEST";
}
}
그리고 호출해보고 세션정보를 확인해봅시다.
127.0.0.1:6379> keys *
1) "spring:session:sessions:expires:ec032871-2136-4bb4-b879-e1a3de76d6b4"
2) "spring:session:expirations:1680502020000"
3) "spring:session:sessions:ec032871-2136-4bb4-b879-e1a3de76d6b4"
127.0.0.1:6379> hgetall spring:session:sessions:ec032871-2136-4bb4-b879-e1a3de76d6b4
1) "lastAccessedTime"
2) "1680500169379"
3) "maxInactiveInterval"
4) "1800"
5) "creationTime"
6) "1680500169378"
7) "sessionAttr:sessionID"
8) "\"test321\""
keys * 명령어로 session 정보를 확인할 수 있고
hgetall 명령어로 session 값을 확인하면 내가 넣은 세션값이 보이는 것을 확인 할 수 있었다.
간단하게 redis를 연동해봤다.
이제 이것을 로그인 인증에 활용하면 될 듯하다.
'Java > SpringBoot&Spring' 카테고리의 다른 글
[Spring] IBsheet8 데이터처리 공통 제네릭 메소드 작성. (0) | 2023.06.07 |
---|---|
[SpringBoot] Security Login 적용하기. (0) | 2023.05.03 |
[SpringBoot] P6Spy query logging 사용하기 (0) | 2023.02.14 |
[SpringBoot] Security 적용시 swagger 샘플페이지로 나오는 현상 (petstore.swagger.io/v2/swagger.json) (0) | 2023.01.18 |
[SpringBoot] Springdoc을 이용한 swagger, API DOCS (0) | 2023.01.17 |