티스토리 뷰

반응형

 

 

SpringbootRedis

 

 

서비스를 무중단으로 운영하려다 보니 

서비스는 무중단으로 알게모르게 패치가 적용되었지만 로그인 한 사용자들은 세션정보가 이전 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";
    }
}

 

 

 

그리고 호출해보고 세션정보를 확인해봅시다.

 

 

세션을 설정한 post url 요청 성공!

 

 

 

 

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를 연동해봤다.

이제 이것을 로그인 인증에 활용하면 될 듯하다.

 

 

 

반응형
댓글
반응형
최근에 올라온 글
«   2024/09   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30
Total
Today
Yesterday