Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[BE] RequestWrappingFilter를 개선한다. #798

Closed
seokjin8678 opened this issue Mar 19, 2024 · 0 comments · Fixed by #803
Closed

[BE] RequestWrappingFilter를 개선한다. #798

seokjin8678 opened this issue Mar 19, 2024 · 0 comments · Fixed by #803
Assignees
Labels
BE 백엔드에 관련된 작업 ⚙️ 리팩터링 리팩터링에 관련된 작업

Comments

@seokjin8678
Copy link
Collaborator

✨ 세부 내용

RequestWrappingFilter 클래스는 다음과 같이 OncePerRequestFilter를 구현하고 있는 필터입니다.

@Component
public class RequestWrappingFilter extends OncePerRequestFilter {

    @Override
    protected void doFilterInternal(HttpServletRequest request,
                                    HttpServletResponse response, FilterChain chain)
        throws ServletException, IOException {

        ContentCachingRequestWrapper wrappingRequest = new ContentCachingRequestWrapper(request);

        chain.doFilter(wrappingRequest, response);
    }
}

해당 필터는 요청의 payload를 로깅하기 위해 HttpServletRequestContentCachingRequestWrapper로 감싸 input stream을 재사용 할 수 있도록 하는 역할입니다.

하지만 현재 코드에서는 요청의 payload를 로깅하는 코드가 존재하지 않습니다.

따라서 해당 필터를 유지하는 것은 불필요한 성능 낭비를 유발합니다.

해당 필터를 유지하려고 한다면 특정 경로(@LogRequestBody 어노테이션이 붙은 핸들러 메서드의 경로)에 들어올 때만 ContentCachingRequestWrapperHttpServletRequest를 감싸면 성능 낭비를 줄일 수 있을 것 같습니다.

@Override
protected void doFilterInternal(
    HttpServletRequest request,
    HttpServletResponse response,
    FilterChain chain
) throws ServletException, IOException {
    if (fooMatcher.match(request.getMethod(), request.getRequestURI())) {
        ContentCachingRequestWrapper wrappingRequest = new ContentCachingRequestWrapper(request);
        chain.doFilter(wrappingRequest, response);
    } else {
        chain.doFilter(request, response);
    }
}

만약 개선을 하더라도 사용이 적거나 애매하다면, 삭제를 하는 방향으로 가도 좋을 것 같네요.

⏰ 예상 소요 시간

3시간

@seokjin8678 seokjin8678 added BE 백엔드에 관련된 작업 ⚙️ 리팩터링 리팩터링에 관련된 작업 labels Mar 19, 2024
@seokjin8678 seokjin8678 self-assigned this Mar 22, 2024
@seokjin8678 seokjin8678 linked a pull request Mar 22, 2024 that will close this issue
seokjin8678 added a commit that referenced this issue Mar 26, 2024
* feat: UriPatternMatcher 추가

* feat: UriPatternMatcher 사용하도록 변경

* refactor: HttpMethod RequestMethod Enum 사용하도록 변경

* refactor: 패키지 위치 이동

* refactor: WebConfig에 UriPatternRequestWrappingFilter 의존 제거

* chore: 의존성 관련 주석 추가

* refactor: 예외에 따른 로그 메세지 변경

* test: 쿼리 파라미터 테스트 추가

* refactor: 내부 Class 삭제 및 Javadoc 추가
@github-project-automation github-project-automation bot moved this from Todo to Done in 2023-festa-go Mar 26, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
BE 백엔드에 관련된 작업 ⚙️ 리팩터링 리팩터링에 관련된 작업
Projects
Status: Done
Development

Successfully merging a pull request may close this issue.

1 participant