TL;DR
LWP::ConsoleLogger::Everywhere는 코드 변경 없이HTTP::Tiny기반 사용자 에이전트(UserAgent)의 네트워크 요청과 응답을 추적하는 Perl 디버깅 도구임.- 명령줄에서 Perl의
-M옵션에 모듈을 추가하면 호출이 발생하는 패키지를 몰라도 사용자 에이전트 동작을 확인할 수 있음. MetaCPAN::Client의 기본 사용자 에이전트인HTTP::Tiny로 MetaCPAN API를 호출하고, 요청·응답 헤더와 본문을 출력하는 사례임.Data::Printer설정에caller_info = 1을 추가하면 출력 위치가 함께 표시되어 내부 동작을 파악하는 데 맥락을 더함.- 기존
LWP::UserAgent,WWW::Mechanize,Mojo::UserAgent지원에HTTP::Tiny지원이 더해진 라이브러리임.
HTTP::Tiny 호출을 어디서든 디버깅하기
LWP::ConsoleLogger는libwww-perl기반 사용자 에이전트인LWP::UserAgent와WWW::Mechanize를 오랫동안 다루며 유용하게 사용해 온 라이브러리임.- 이후 사용자 에이전트 호출이 어디서 발생하는지 알 필요 없이 디버깅하는
LWP::ConsoleLogger::Everywhere가 소개됐으며, 지원 대상에Mojo::UserAgent가 추가된 데 이어HTTP::Tiny도 포함됨. - 이 도구는 코드에 직접 디버깅 기능을 넣거나, Perl의
-M옵션을 이용해 코드를 한 줄도 수정하지 않고 명령줄에서 실행하는 방식임.
명령줄에서 요청 내용 확인
- 예시에서는
MetaCPAN::Client로 MetaCPAN API를 호출하며, 이 클라이언트의 기본 사용자 에이전트는HTTP::Tiny임. MetaCPAN::Client를 사용해LWP-ConsoleLogger배포판 정보를 요청하면https://metacpan.org/release/LWP-ConsoleLogger가 출력됨.- 명령줄에
-MLWP::ConsoleLogger::Everywhere를 추가하면 실제 사용자 에이전트 호출이 어느 패키지에서 이뤄지는지 몰라도 디버깅 정보가 표시됨. - 출력에는
GET https://fastapi.metacpan.org/distribution/LWP-ConsoleLogger요청과 전송 전·후 요청 헤더, 응답 상태200 OK, 응답 헤더와 본문이 포함됨. - 응답 본문에는 배포판 이름과 저장소 정보, 이슈 수, 버그 추적 주소
https://github.com/oalders/lwp-consolelogger등이 JSON 형식으로 나타나며,Data::Printer가 이를 출력한 텍스트 형태도 확인 가능함.
호출 위치 정보 추가
- 출력에 나타나는
Printing in line 482 of …LWP/ConsoleLogger.pm:문구는Data::Printer설정의 부수 효과임. ~/.dataprinter파일에caller_info = 1을 설정하면 출력 위치 정보가 표시되며, 이는 내부에서 무슨 일이 일어나는지 파악하는 데 추가 맥락을 제공함.- 사용자 에이전트를 디버깅할 때 이런 도구가 다른 언어에도 얼마나 있는지는 알 수 없지만, Golang에서 사용자 에이전트를 디버깅할 때는 이런 기능이 그리워짐.
- Playwright에서도 더 복잡한 도구를 만들어 본 적이 있으며, 터미널에서 보기 편한 형식의 이미지까지 출력하는 기능을 포함함. 사용 사례는 좁고 다른 사람에게 설명하기 어려운 편이지만, 제작 과정은 즐거운 경험임.
관련 글
- Introducing LWP::ConsoleLogger::Everywhere
- Observing Network Traffic with LWP::ConsoleLogger::Everywhere
- UserAgent Debugging Made Easy
댓글 (0)
로그인하면 이 기사에 내 생각을 남길 수 있어요