Log

ContentCachingRequestWrapper 동작 원리

땍땍 2024. 8. 4. 16:30

ContentCachingRequestWrapper은 요청의 응답을 단 한 번 밖에 읽지 못 하기에 이를 여러번 사용할 수 있도록 해준다. 다만 여기에는 여러가지 조건과 제약이 있는데 이를 살펴보자.

ContentCachingRequestWrapper를 사용하기 위해 보통 아래와 같은 방식을 사용하는데, 처음 이를 사용할 때 ContentCachingRequestWrapper는 request 값을 캐싱하여 담아두는 , 복사해둔다는 개념만 알았기에 선언과 동시에 이 값이 저장이 되는 것으로 생각하고 있었다.

하지만 이를 자세히 살펴보면 , 선언과 동시에 저장되는 것은 request 값의 length뿐, 그 값은 저장이 되지 않은 것을 볼 수 있다.

실제로 데이터를 저장하는 것은 값을 read 할 때이며, 때문에 이러한 값을 저장하기 위해서는 요청을 getInputStream으로 읽어야만 한다.

즉, ContentCachingRequestWrapper에 값을 저장하기 위해서는

요청의 스트림을 읽기 전에, ContentCahingRequestWrapper를 선언하고 이후에 값을 읽어야만 한다.