Remote Debugging
리모트 디버깅이란 원격지의 서버를 로컬의 디버거를 이용해서 디버깅하는 것으로 한줄 한줄 실행하면서 로직의 흐름을 추적해 문제를 파악할 수 있도록 하는 것이다. 문제 파악 뿐 아니라, 코드 리뷰에도 큰 도움을 준다.
Remote Debugging의 메커니즘
Remote Debugging 설정
xdebug.ini 파일에 아래의 내용을 추가한다. 아래의 설정은 리모티 디버깅을 활성화 시키는 가장 기본적인 옵션이다.
xdebug.remote_enable=1
리모트 디버깅을 위한 주요 설정은 아래와 같다. 자세한 내용은 메뉴얼을 참조한다.
xdebug.remote_enabled
리모트 디버깅을 활성화한다. 이 값이 없거나 0이면 끄는 것이고, 1이면 켜는 것이다.
xdebug.remote_autostart
xdebug를 켜기 위해서는 GET/POST의 값으로 XDEBUG_SESSION_START나 XDEBUG_SESSION cookie를 전달해야 한다. 하지만 remote_autostart를 1로 지정하면 xdebug.remote_enable의 값이 설정된 서버는 항상 xdebug remote debugging이 구동된다.
xdebug.remote_host
xdebug의 리모트 디버깅이 시작 됐을 때 디버거가 위치하는 클라이언트의 IP를 지정한다. xdebug는 이 IP를 통해서 Xdebug 클라이언트와 통신하게 된다.
xdebug.remote_connect_back
만약 여러사람이 한대의 서버에서 리모트 디버깅을 하거나, 클라이언트의 IP가 계속 변경되는 상황이라면 remote_connecst_back 옵션을 사용할 수 있다. 이 옵션은 자동으로 접속자의 IP로 디버깅이 수립된다. 이 옵션은 모든 클라이언트에 접속하기 때문에 불특정 다수가 접속하는 서버 환경에서는 절대로 사용하면 안된다. 보안 홀이 생긴다.
Remote Debugging 클라이언트
xdebug 리모트 디버깅은 실제로 리모트 디버깅 클라이언트라는 카테고리의 에플리케이션들을 통해서 이루어진다. xdebug의 홈페이지에는 다양한 클라이언트가 소개되고 있는데 이것을 참조하자. http://xdebug.org/docs/remote#clients
리모트 디버깅은 이론적으로는 원격의 컴퓨터와 로컬의 컴퓨터가 서로 네트워크를 통해서 연결이 가능하다. 하지만 실제로 네트워크는 수 많은 문제 상황이 있을 수 있고, 다양한 설정이 존재하기 때문에 원격 머신에 대한 리모트 디버깅은 사실 쉽지 않다. 가급적 xdebug와 디버거를 한 컴퓨터 안에서 구동하는 것을 권장한다. 하위 수업에서는 필자가 검증한 리모트 디버거들에 대한 수업들이 준비되어 있다. 이 수업을 참조하자.