📝 RequestBodyLogging

정의

RequestBodyLoggingHTTP 요청 본문과 응답 본문을 읽어서 로그로 남기는 방식이다. Spring MVC에서는 요청 body를 한 번 읽으면 다시 읽기 어려워서, 보통 래퍼(wrapper)를 사용한다.

요청/응답 내용을 확인해야 하는 디버깅, 감사 로그, API 추적에 유용하다.

🧩 역할

  • 요청 본문을 로그로 남긴다
  • 응답 본문을 로그로 남긴다
  • API 호출 내용을 추적한다
  • 문제 발생 시 요청/응답을 분석한다

🛠 구현 방식

요청 본문 래핑

HttpServletRequestWrapper를 사용해 body를 캐시해두고 다시 읽을 수 있게 만든다.

응답 본문 래핑

HttpServletResponseWrapper를 사용해 응답 내용을 캡처한다.

multipart 처리

파일 업로드 요청은 일반 JSON 요청과 다르므로 별도 처리나 예외 처리가 필요할 수 있다.

🧩 사용 흐름

  1. 요청을 가로챈다.
  2. 요청 body를 캐시한다.
  3. 컨트롤러에 전달한다.
  4. 응답 body를 캡처한다.
  5. 로그를 남긴다.

🛠 예시 구성 요소

  • CachedBodyHttpServletRequest
  • CustomResponseWrapper
  • CachedBodyServletInputStream
  • CachedBodyMultipartHttpServletRequest

🧩 특징

  • 요청 본문은 재사용이 어렵기 때문에 래핑이 필요하다
  • 응답 본문도 직접 캡처해야 로그로 남길 수 있다
  • Filter 계층에서 구현하는 경우가 많다
  • multipart 요청은 일반 JSON 요청과 다르게 다뤄야 한다

⚠️ 주의사항

  • body를 먼저 소비하면 이후 처리에서 읽지 못할 수 있다.
  • 민감한 개인정보나 비밀값이 로그에 남지 않도록 주의해야 한다.
  • multipart 요청은 별도 래퍼가 필요할 수 있다.
  • 로그가 너무 많아지면 성능과 가독성에 영향을 줄 수 있다.

📌 정리

  • RequestBodyLogging은 요청/응답 body를 로그로 남기는 방식이다.
  • Spring MVC에서는 body 재사용 문제 때문에 래핑이 중요하다.
  • 필터 기반으로 구현하는 경우가 많고, 디버깅과 추적에 유용하다.

연결문서

댓글남기기