RequestBodyLogging
📝 RequestBodyLogging
정의
RequestBodyLogging은 HTTP 요청 본문과 응답 본문을 읽어서 로그로 남기는 방식이다. Spring MVC에서는 요청 body를 한 번 읽으면 다시 읽기 어려워서, 보통 래퍼(wrapper)를 사용한다.
요청/응답 내용을 확인해야 하는 디버깅, 감사 로그, API 추적에 유용하다.
🧩 역할
- 요청 본문을 로그로 남긴다
- 응답 본문을 로그로 남긴다
- API 호출 내용을 추적한다
- 문제 발생 시 요청/응답을 분석한다
🛠 구현 방식
요청 본문 래핑
HttpServletRequestWrapper를 사용해 body를 캐시해두고 다시 읽을 수 있게 만든다.
응답 본문 래핑
HttpServletResponseWrapper를 사용해 응답 내용을 캡처한다.
multipart 처리
파일 업로드 요청은 일반 JSON 요청과 다르므로 별도 처리나 예외 처리가 필요할 수 있다.
🧩 사용 흐름
- 요청을 가로챈다.
- 요청 body를 캐시한다.
- 컨트롤러에 전달한다.
- 응답 body를 캡처한다.
- 로그를 남긴다.
🛠 예시 구성 요소
CachedBodyHttpServletRequestCustomResponseWrapperCachedBodyServletInputStreamCachedBodyMultipartHttpServletRequest
🧩 특징
- 요청 본문은 재사용이 어렵기 때문에 래핑이 필요하다
- 응답 본문도 직접 캡처해야 로그로 남길 수 있다
- Filter 계층에서 구현하는 경우가 많다
- multipart 요청은 일반 JSON 요청과 다르게 다뤄야 한다
⚠️ 주의사항
- body를 먼저 소비하면 이후 처리에서 읽지 못할 수 있다.
- 민감한 개인정보나 비밀값이 로그에 남지 않도록 주의해야 한다.
- multipart 요청은 별도 래퍼가 필요할 수 있다.
- 로그가 너무 많아지면 성능과 가독성에 영향을 줄 수 있다.
📌 정리
RequestBodyLogging은 요청/응답 body를 로그로 남기는 방식이다.- Spring MVC에서는 body 재사용 문제 때문에 래핑이 중요하다.
- 필터 기반으로 구현하는 경우가 많고, 디버깅과 추적에 유용하다.
댓글남기기