Spring Boot에서 Redis를 활용한 세션 관리

Do_It·2023년 11월 11일

Web 로그인 세션

  • Web 상에서 특정 유저가 로그인 했음을 나타내는 정보
  • 브라우저는 Cookie를 저장하고 , 서버는 해당 Cookie에 연과된 세션 정보를 저장

Spring Boot 세션 처리 과정

분산 환경에서의 세션 처리

  • Sever는 세션 정보를 저장해야 함
  • Sever가 여러대라면 최초 로그인한 Sever가 아닌 Server는 세션 정보를 알지 못함
  • 세션 정보를 Server간에 공유할 방법이 필요 -> Session Clustering

분산 환경에서의 세션 처리 - Redis 사용

  • 세션 데이터는 단순 key - value 구조 ( 유저 : 세션아이디)
  • 세션 데이터는 로그인 시간동안만 필요하므로 RDB 정도의 영속성이 필요 없음
  • 세션 데이터는 변경이 빈번하고 빠른 액세스 속도가 필요
    -> 따라서 RDB를 사용하는 것이 아닌 Redis는 사용하게는 효율적임

Spring에서 Redis 사용

implementation("org.springframework.session:spring-session-data-redis")

application.yml
spring:
redis:
session:
storage-type: redis

설정해주고

@RestController
public class SessionTest {



    @GetMapping("/login")
    public String login(HttpSession httpSession, @RequestParam String name){
        httpSession.setAttribute("name",name);

        return "세션아아디 저장 완료";
    }
    @GetMapping("/myName")
    public String myName(HttpSession httpSession) {

        return httpSession.getAttribute("name").toString();
    }

}

원리는 간단!
Redis에 이런 형태로 저장됨 !

Key: spring:session:sessions:세션ID
Value: 직렬화된 HttpSession 데이터

name을 John을 넣은다면
Key: spring:session:sessions:세션ID
Value: {name=John, ...} (직렬화된 형태)

profile
오늘의 노력이 내일의 성장으로 이어지고 있음을

0개의 댓글