SpringBoot에서 Redis로 Session 공유하기

개발자·2022년 8월 25일
1

MSA

목록 보기
3/7
post-thumbnail
post-custom-banner

MSA 프로젝트를 진행하며 모든 서비스에 세션을 공유해줘야해 Redis를 사용했다. 어떻게 사용했는지 정리해보자 😣

환경 설정

Session을 사용할 모든 프로젝트에 설정해줘야 한다.

pom.xml

redis dependency를 추가해준다.

<dependency>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter-data-redis</artifactId>
  <version>2.7.1</version>
</dependency>

<dependency>
  <groupId>org.springframework.session</groupId>
  <artifactId>spring-session-data-redis</artifactId>
  <version>2.7.0</version>
</dependency>

application.yml

아래 설정 정보를 추가해준다.

spring:
  redis:
    host: localhost
    password:
    port: 6379

SpringBoot Main Class

@EnableRedisHttpSession 어노테이션을 추가해준다.

@SpringBootApplication
@EnableRedisHttpSession
public class SessionApplication
{
  public static void main(String[] args)
  {
    SpringApplication.run(TaskMngSessionAuthServerApplication.class, args);
  }
}

😲
정말 간단하게 설정이 끝났다.
이제 사용해보자~~!

Session 테스트

로그인 API (Session Setting)

사용자가 로그인하면 로그인 서비스에서 Session을 생성해 setting 해준다.

@PostMapping(value = "/login")
public String login(LoginRequest request, HttpSession session) {
  ...(생략)
  SessionInfoDTO sessionInfo = authService.login(request);
  session.setAttribute("sessionInfo", sessionInfo);

  return returnUrl;
}

Session 사용

로그인 서비스에서 set해준 session을 업무 서비스에서 사용 가능한 것을 확인할 수 있다.

@GetMapping(value = "/tasks")
public ResponseEntity<?> getTasks(@Valid GetTaskListRequest request, HttpSession session)  {
    SessionInfoDTO sessionInfo = (SessionInfoDTO)session.getAttribute("sessionInfo");
    
    ...(생략)
    return ResponseEntity.ok(response);
  }

번외) Session Time out 설정

SpringBoot의 경우엔 application.yml에 간단하게 설정해줄 수 있다.

server:
  servlet:
    session:
	timeout: 7200

하지만, 배포시 내장 톰캣을 사용하지 않고 별도의 was를 사용하면 위 방법이 동작하지 않는다. 이런 경우에는 별도의 SessionListner를 만들어 설정해줘야한다.

SessionListner.java

public class SessionListener implements HttpSessionListener {
  @Override
  public void sessionCreated (HttpSessionEvent se)
  {
    se.getSession().setMaxInactiveInterval(60*120); //120분
  }
  
  @Override
  public void sessionDestroyed (HttpSessionEvent se) {}
}

WebConfig.java

SessionListener를 Bean으로 등록해줘야한다.

@Bean
public HttpSessionListener httpSessionListener() {
	return new SessionListener();
}


Ref.

https://oingdaddy.tistory.com/407

profile
log.info("공부 기록 블로9")
post-custom-banner

0개의 댓글