[Redis] Session Clustering

기훈·2024년 4월 9일

Redis

목록 보기
12/12

세션을 HashMap에 저장, 저장한 세션을 조회하는 두개의 api를 구현했다.

@RestController
public class LoginController {

    // /login?name= Jay
    // /myName => "Jay"

    HashMap<String, String> sessionMap = new HashMap<>();

    @GetMapping("/login")
    public  String Login(HttpSession session, @RequestParam String name) {
        sessionMap.put(session.getId(), name);
        return "saved";

    }

    @GetMapping("/myName")
    public  String Login(HttpSession session) {
        String myName = sessionMap.get((session.getId()));

        return myName;
    }
}

두 개의 터미널을 열어 각각 다른 포트로 자바 서버를 실행시킨다.

gradle의 build를 실행시키면 build파일에 SNAPSHOT.jar 파일이 생성된다.
해당 경로로 이동하여 각각의 터미널에서
java -Dserver.port=8080 -jar Dustin-0.0.1-SNAPSHOT.jar
java -Dserver.port=8081 -jar Dustin-0.0.1-SNAPSHOT.jar 실행한다.



8081로 실행된 서버 인스턴스는 8080에서 생성된 세션을 확인하지 못하고 새로운 세션을 생성하고 덮어쓰게 된다.


Session Clustering 구현하기

  1. params로 받아온 세션 데이터를 기존 로컬변수가 아닌 세션 저장소에 저장한다.

    	@RestController
    	public class LoginController {
    
      @GetMapping("/login")
      public  String Login(HttpSession session, @RequestParam String name) {
          // 세션에 파라미터로 들어온 name을 저장한다
          session.setAttribute("name",name);
          return "saved";
    
      }
    
      @GetMapping("/myName")
      public  String Login(HttpSession session) {
          String myName = (String)session.getAttribute("name");
    
          return myName;
      }
    }
  1. 의존성을 추가한다.

    dependencies {
        implementation 'org.springframework.boot:spring-boot-starter-data-redis' // redis를 사용하기 위한 추가
        implementation 'org.springframework.boot:spring-boot-starter-web'
        implementation 'org.springframework.session:spring-session-data-redis' // redis Session을 위한 추가
        testImplementation 'org.springframework.boot:spring-boot-starter-test'
    }
  2. yml 파일 수정: 세션이 redis에 저장될 수 있도록 수정

    spring:
      session:
        storage-type: redis
      redis:
        host: localhost
        port: 6379
    
  3. 8080에서 생성한 세션의 이름을 8081에서 조회할 수 있다. 헤더를 확인해 보면 같은 쿠키를 참조하고 있는 것을 볼 수 있다.

0개의 댓글