blues_log
Published 2023. 8. 22. 11:05
2023-08-22 TIL TIL&WIL

오늘 학습한 내용

  • 최종 프로젝트 (리프레시 토큰 수정, 마이페이지)
  • 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