회사 프로젝트 내 맡은 파트에서 개발을 진행하던 중 로그인 사용자(고객센터 또는 대리점 혹은 대리점 직원)의 정보를 바탕으로 권한을 체크하는 로직이 필요하게 되었다.
전체적인 아키텍쳐가 MSA로 구성되어 있다보니 각각의 서비스별로 데이터를 관리해야 했고 내가 맡은 서비스 내에서 매번 고객 데이터 조회시 로그인 유저의 권한을 바탕으로 필터링을 해야 했다.
유저의 데이터는 타 서비스의 API 호출을 통해 얻을 수 있었는데 매번 고객 데이터 조회 시 유저 데이터의 API 호출 하는 것은 그 호출 시간 또한 전체 고객 데이터 조회하는 시간에 추가 되어 아주 바람직하지 못한 방법이라 생각했다.
그래서 효과적인 방법을 고민하다가 유저 데이터값들을 session에 보관하고 필요할 때 꺼내쓰는 방법을 생각했다.
package com.springms.just.controller;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;
import java.time.LocalDateTime;
import java.util.Random;
@RestController
public class JustController {
@Autowired
HttpSession httpSession;
@GetMapping(path = "/setsession")
public void setsessionAPI(){
Random random = new Random();
int num = random.nextInt();
httpSession.setAttribute("KEY",num);
System.out.print(LocalDateTime.now());
System.out.println(" >> session set Key " + num);
}
@GetMapping(path = "/getsession")
public void getsessionAPI(){
Random random = new Random();
int num = (int) httpSession.getAttribute("KEY");
System.out.print(LocalDateTime.now());;
System.out.println(" >> session get id "+ httpSession.getId());
System.out.println(" >> session get Key "+ num);
}
}
내가 알고 있는 httpSession은 위의 코드와 같이
@Autowired로 httpsession을 주입받아 setAttriube, getAttribute를 하는 수준까지 생각했다.
혹시 Spring Boot 공식문서에는 Session처리에 대해 어떻게 나와 있나 궁금해서 살펴보니
https://docs.spring.io/spring-session/docs/current/reference/html5/guides/boot-redis.html
Redis를 이용하여 Session값들을 저장하고 이를 활용하는 예시가 있었다.
Redis라는 것이 단순히 Key-value로 이루어져있으며 메모리 데이터 형태로 사용한다고 알고만 있었고 내가 직접 Redis를 사용한다거나 깊게 이해하지는 못하고 있었는데 이번 Spring Session을 다루면서 Redis를 약간이나마 살펴보고 직접 Session에 set, get를 해보며 이를 실무에 적용하기 위한 공부를 해보려 한다.
'개발 지식 > Spring Framework' 카테고리의 다른 글
[thymeleaf] 기본 기능 정리 - 01 (0) | 2021.12.16 |
---|---|
[JWT] Spring Boot 환경에서 JWT(Json Web Token)생성 하기 (0) | 2021.10.26 |
[Redis Session] Spring Boot에서 Redis Session 활용하기 - 04 (0) | 2021.09.26 |
[Redis Session] Spring Boot에서 Redis Session 활용하기 - 03 (0) | 2021.09.24 |
[Redis Session] Spring Boot에서 Redis Session 활용하기 - 02 (0) | 2021.09.23 |
댓글