오늘 학습한 내용
- 최종 프로젝트 (리프레시 토큰 수정, 마이페이지)
- CS 면접 준비
리프레시 토큰 수정
@Service
@RequiredArgsConstructor
@Slf4j
public class TokenServiceImpl implements TokenService{
private final UserRepository userRepository;
private final RefreshTokenRepository refreshTokenRepository;
private final JwtUtil jwtUtil;
/**
* 1. 전달받은 유저의 아이디로 유저가 존재하는지 확인
* 2. RefreshToken이 유효한지 체크
* 3. AccessToken을 발급한 뒤 쿠키에 추가
*/
@Override
@Transactional
public TokenResponseDto requestRefreshToken(HttpServletResponse res, HttpServletRequest req) {
/**
* accesstoken을 이용해서 refresh 토큰을 조회하는 건 뭔가 좋은 방법이 아닌 것 같음
* 토큰을 탈취당한 상태에서도 제 3자가 토큰을 재발급 받을 수 있을 것 같음,,
*/
String refreshTokenUUID = jwtUtil.getUUID(req);
RefreshToken refreshToken = refreshTokenRepository.findById(refreshTokenUUID).orElseThrow(() -> new IllegalArgumentException("Token not found"));
// 현재 쿠키 삭제
jwtUtil.deleteCookieWithAccessToken(jwtUtil.getTokenFromRequest(req), res);
//유저의 정보 가져오기 (엑세스 토큰을 새로 발급하기 위해서)
Long userId = refreshToken.getUserId();
User user = userRepository.findById(userId).orElseThrow(() -> new IllegalArgumentException("Not found user"));
// 새로운 엑세스 토큰을 만들고 쿠키에 추가
String token = jwtUtil.createAccessToken(user.getEmail(), user.getRole());
jwtUtil.addJwtToCookie(token, res);
return new TokenResponseDto(refreshToken.getRefreshToken(), token);
}
}
어제는 accesstoken을 이용해서 refreshtoken을 조회했는데 만약 이런 방법을 사용하면 accesstoken을 탈취 당했을 때 제3자도 똑같이 refreshtoken을 조회할 수 있고, 이를 통해서 재발급을 받을 수 있다고 생각하게 되었다.
그래서 accesstoken을 이용하지 않고 재발급 받을 수 있는 것으로 코드를 수정했다.
refreshtoken에 저장되는 값은 UUID를 이용해서 만든 임의의 문자열과 userId값이 들어갔다.
내일 해야할 것
- BlackList도 redis 적용하기
- 알림 기능 공부하기
CS 면접 준비
질문 : NoSQL과 RDBMS의 특징과 차이점에 대해서 장, 단점을 들어 설명해주세요.
답변 : NoSQL과 RDBMS모두 데이터를 저장하는 데이터베이스입니다. 가장 큰 차이점으로는 데이터를 확장하는데 있어서 NoSQL은 고정되어있지 않은 반면에 RDBMS는 고정되어 있습니다. 이 것들이 장점과 단점이 될 수 있는데, NoSQL은 데이터의 변화에 대응하기 쉽고, 높은 유연성을 가지고 있는 장점이 있습니다. 하지만 이것들이 일부 모델에서는 일관성을 보장하지 못한다는 단점이 될 수 있습니다. 반면에 RDBMS는 데이터의 일관성을 보장할 수 있다는 장점이 있지만 유연성이 떨어지는 단점을 갖고 있습니다.
'TIL&WIL' 카테고리의 다른 글
| 2023-08-25 TIL (0) | 2023.08.25 |
|---|---|
| 2023-08-23 TIL (0) | 2023.08.23 |
| 2023-08-21 TIL (0) | 2023.08.21 |
| 2023-08-17 TIL (0) | 2023.08.17 |
| 2023-08-14 TIL (심화 프로젝트 KPT 회고) (0) | 2023.08.14 |