프로젝트 기록

    JWT 토큰 만료 에러 분석

    🔍 문제 상황 어제까지만 해도 잘 되던 my-page 기능이 제대로 동작하지 않는 문제가 있었다. my-page의 프로세스는 다음과 같다. my-page에 접속한다. 토큰이 있는지 확인한다. 만약 토큰이 없으면 로그인 페이지로 리다이렉트 한다. 토큰이 있으면 백엔드 서버로 이를 전송한다. 백엔드 서버에서 응답을 받는다. 만약 토큰이 유효하지 않으면 로그인 페이지로 리다이렉트 한다. (문제 상황) 토큰이 유효하면 사용자 정보를 JSON 형태로 리턴 받는다. 위와 같이 현재 진행하고 있는 프로젝트 'VOCA'는 JWT토큰을 베이스로 구성되어 있다. 현재 문제는 3-1로 토큰이 만료되거나 유효하지 않았을 때 리다이렉트 기능이 제대로 동작하지 않는다는 것이다. 🔍 Debug 서버의 에러 로그를 확인해보니 예상과..

    OSIV 필터와 지연로딩 에러

    OSIV 필터와 지연로딩 에러

    🔍 관련 포스팅 OSIV와 필터 🔍 OSIV란? (Open Session In View) 스프링의 트랜잭션 범위는 Service, Repository 레이어에서만 유지된다. 보통 JPA의 영속성 컨텍스트는 트랜잭션의 생명주기를 따라가는데, OSIV를 이용하면 영속성 컨텍스 brightmango.tistory.com 🔍 @AuthenticationPrincipal과 지연 로딩 @AuthenticationPrincipal 어노테이션을 이용하면 간편하게 session에 저장한 객체를 쉽게 받을 수 있다. 그런데 파라미터로 받은 객체를 가지고 지연 로딩을 하면 프록시 객체를 가지고 있기 때문에 에러가 발생한다. 현재 SecurityContextHolder에 session을 저장하는 코드는 인터셉터에 다음과 같이..

    커스텀 예외 처리와 NestedServletExceeption

    🔍 문제 상황 컨트롤러 테스트를 하던 중 RestControllerAdvice를 이용하여 커스텀 예외 처리가 되어야 하는 부분에서 UnverifiedException이 아닌 NestedServletException이 발생하는 문제가 발생하였다. 예외 처리를 하고 있는 Service 코드는 다음과 같다. @Override public User login(UserDTO.loginForm form) { User user = userRepository.findByEmail(form.getEmail()).orElseThrow(() -> new NotFoundException(ErrorCode.NOT_FOUND_USER)); if(!user.getPassword().equals(form.getPassword()))..

    [Debug] JWT토큰 디버그

    [문제 상황] 어제까지만 해도 잘 되던 my-page 기능이 제대로 동작하지 않는 문제가 있었다. my-page의 프로세스는 다음과 같다. my-page에 접속한다. 토큰이 있는지 확인한다. 만약 토큰이 없으면 로그인 페이지로 리다이렉트 한다. 토큰이 있으면 백엔드 서버로 이를 전송한다. 백엔드 서버에서 응답을 받는다. 만약 토큰이 유효하지 않으면 로그인 페이지로 리다이렉트 한다. (문제 상황) 토큰이 유효하면 사용자 정보를 JSON 형태로 리턴 받는다. 위와 같이 현재 진행하고 있는 프로젝트 'VOCA'는 JWT토큰을 베이스로 구성되어 있다. 현재 문제는 3-1로 토큰이 만료되거나 유효하지 않았을 때 리다이렉트 기능이 제대로 동작하지 않는다는 것이다. [Debug] 서버의 에러 로그를 확인해보니 예상과..

    [리팩토링] Pageable을 이용한 페이징

    [리팩토링] Pageable을 이용한 페이징

    [문제] 마녀재판 프로젝트의 페이징 처리를 리팩토링해볼려고 합니다. 현재 페이징 처리는 다음과 같이 PagingDto를 상속받는 형식으로 정의가 되어 있습니다. 처음에는 Vue.js로 프론트로 구성할려고 생각하다 보니 Pageable을 파라미터로 받기 보다 PagingDto를 이용하여 page, size를 받을려고 했었는데, 중간에 타임리프를 사용하기로 결정하여 구성이 조금 꼬인 상황입니다. 현재 마녀재판의 페이징 처리에는 다음과 같은 문제가 있습니다. model로 페이징 처리에 필요한 많은 데이터를 넘겨주어야 한다. 페이징 처리를 위한 계산 로직과 검증 로직을 추가적으로 작성해주어야 한다. 객체를 이용하여 이를 한 줄로 바꿀 수 있지만, 이를 이미 제공하는 Pageable을 이용하여 리팩토링할려고 합니..