버그? 디버그! 디버거!!
소프트웨어 버그(bug)란 프로그램이 예상된 동작을 하지 않고 잘못된 결과를 내거나 작동이 실패하는 문제를 뜻한다. 이러한 버그는 프로그램의 소스 코드(source code) 설계 과정에서 발생한 실수나 계산 오류에 의해 발생된다.
이렇게 발생된 버그를 찾아서 수정하는 과정을 디버그(debug) 혹은 디버깅(debugging)이라고 하며, 디버깅 과정을 도와주는 프로그램을 디버거(debugger)라고 부른다.
프로그램 오류를 버그라고 부르는 이유는 살아있는 진짜 벌레 때문에 컴퓨터가 오작동하는 사건이 과거에 발생된 사례가 있었기 때문이다. 1947년, 하버드(Harvard) 대학교에서 제작된 마크(Mark) II 컴퓨터의 계전기 회로에 나방이 들어가 합선을 일으켜 비정상적으로 동작되는 사건이 발생되었다.
이로 인하여 컴퓨터를 비롯한 각종 전자기기, 소프트웨어 등에서 발생되는 오류를 버그라고 부르게되는 계기가 되었고, 인류 최초의 프로그램 버그인 나방은 미국 해군에서 여러 해 동안 전시하다가 현재는 스미소니언 박물관에서 보관중이다.
사실, 버그라는 단어는 컴퓨터나 컴퓨터 소프트웨어 개발 이전부터 ‘설명하기 어려운 문제점’을 가르키는 뜻으로 엔지니어 사이에서 사용되어 왔으며, 하드웨어의 기계적인 오동작을 설명하는 용도로 자주 사용되었다고 한다.
엑스디버그(xDebug)란?
엑스디버그는 PHP 전용 디버거로 PHP로 작성된 프로그램을 디버깅하거나 프로파일링(profiling) 데이터를 추출하기 위한 PHP 확장 프로그램이다. 약 13년 전(2002년 5월 2일) 영국 출신 개발자인 데릭 렛한스(Derick Rethans)에 의해 개발/배포되었다.
아직까지도 많은 개발자들이 PHP 언어로 작성된 프로그램은 디버깅이 안된다고 생각하는 경우가 많은데, 엑스디버그 확장을 웹 서버에 설치하면 xdebug_call_fire(), xdebug_call_line(), xdebug_call_function() 등의 디버그 관련 함수 사용이 가능해지며, IDE(Integrated Development Environment)내에 포함된 PHP 디버그 클라이언트를 통해 리모트 디버깅(Remote Debugging)도 가능하다.
또한, 프로파일링 기능을 사용하면 PHP 언어로 작성된 프로그램이나 웹사이트의 전반적인 성능 확인 작업이 매우 간편해진다. 그 이외에도 프로그램 오류 발생시 출력되는 스택 트레이스(Stack Traces)를 비롯하여 펑션 트레이스(Function Traces), var_dump() 함수 기능 강화 등의 다양한 편의성을 제공한다.
엑스디버그 설치 파일 다운로드
본 글은 리눅스 서버 – 혹은 PC – 에 엑스디버그 설치 방법을 설명하는 글이므로 PHP 설치 과정에 대한 설명은 포함되지 않는다.
엑스디버그는 서버의 운영체제 비트와 PHP 버전에 맞춰 설치해야 하므로, 서버의 환경 정보를 반드시 확인해야 한다. 그러므로 다음과 같은 명령을 실행하여 PHP 환경 정보를 텍스트 파일로 저장한다.
PHP 환경 정보가 저장된 파일은 설치과정에서 사용되므로 지우지 않고 보관한다.
엑스디버그 설치 파일을 다운로드 받기 위해 웹 브라우저를 실행하여 [설치 파일 마법사 웹페이지]에 방문한다.
엑스디버그 설치가 익숙한 사용자는 [설치 파일 다운로드 웹페이지]에 방문하여 운영체제 비트와 PHP 버전에 맞는 소스 혹은 DLL(윈도우즈 환경에서 PHP 확장 파일은 DLL 확장자다) 파일을 다운로드 받으면 된다.
엑스디버그 설치가 익숙하지 않거나 혹은 [설치 파일 다운로드 웹페이지]에서 제공되는 수 많은 파일 중에서 어떠한 것을 다운로드 받아야 하는지 고민되는 경우에는 [설치 파일 마법사 웹페이지]를 방문하여 안내에 따라 설치 파일을 다운로드 받도록 한다.
구분 | URL |
홈페이지 | http://xdebug.org |
설치 파일 다운로드 웹페이지 | http://xdebug.org/download.php |
설치 파일 마법사 웹페이지 | http://xdebug.org/wizard.php |
[설치 파일 마법사 웹페이지]에 접근하면 PHP 환경 정보 추출 방법에 대한 안내와 추출된 정보를 기입하는 입력폼을 제공하고 있다.
본 글의 설치 과정 초기에 미리 준비해 두었던 PHP 환경 정보 텍스트 파일의 내용을 복사하여 입력폼에 기입하고, [Analyse my phpinfo() output] 버튼을 클릭한다.
엑스디버그 설치 대상 서버의 PHP 환경 정보 분석이 완료되면 다음과 같은 안내 메시지와 함께 설치 파일을 다운로드 링크를 제공한다. [Instructions] 항목의 다운로드 링크를 클릭하여 엑스디버그 설치 파일을 다운로드 받는다.
엑스디버그 설치 방법
운영체제가 윈도우즈인 경우에는 [설치 파일 다운로드 웹페이지]에서 DLL 파일을 제공하고 있으므로 별도의 소스 컴파일이 필요하지 않으나, 리눅스 기반 운영체제인 경우에는 PHP 확장(so 확장자를 가진 파일)으로 설치해야 하므로 소스 컴파일이 필요하다.
소스 컴파일 과정에는 php5-dev 라이브러리에 포함된 phpize 파일이 사용되므로 php5-dev 라이브러리 설치가 반드시 필요하다. 리눅스민트(Linuxmint)와 우분투(Ubuntu) 배포판은 apt-get 명령을 통해 설치가 가능하며, 센트OS(CentOS)는 yum 명령을 통해 설치가 가능하다.
; 리눅스민트/우분투 설치 방법 $ sudo apt-get install php5-dev
; 센트OS 설치 방법 $ yum install php5-dev
다운로드 받은 엑스디버그 설치 파일(압축 파일)을 압축 해제하고, 콘솔을 실행하여 압축 해제된 폴더로 이동한다. 만약, 압축해제된 폴더 안에 package.xml 파일이 존재하거나 xdebug 이름을 가진 폴더가 존재하면 한번 더 폴더 안으로 이동해야 한다.
엑스디버그 소스 컴파일 순서는 다음과 같으며 다음 순서에 따라 명령을 실행한다.
phpize ./configure make
소스 컴파일이 완료되면 modules 폴더에 xdebug.so 파일이 생성된다. 생성된 xdebug.so 파일을 PHP 확장 폴더(/usr/lib/php5/20121212)로 복사한다.
필자는 본 글을 작성하기 위해 패키지 관리 명령(apt-get)을 사용하여 PHP를 설치했으므로 PHP 확장 폴더의 경로가 위와 같으나, PHP 설치 방법 및 운영/관리 방안에 따라 PHP 확장 경로는 서버마다 다를수 있으므로 php.ini 파일의 extention_dir 설정값을 확인하여 복사해야 한다.
PHP 설치 방식과 상황에 따라 다르나 보편적으로 소스 컴파일로 설치된 경우에는 php.ini 파일의 [Dynamic Extensions] 항목에 다음과 같이 xdebug.so 파일이 로드(load)되도록 설정해야 한다.
필자는 앞서 설명한 바와 같이 패키지 관리 명령으로 PHP를 설치했기 때문에 PHP 확장 폴더에 존재하는 모든 PHP 확장 파일이 자동으로 로드되므로 별도의 설정이 필요하지 않는다.
마지막으로 다음과 같은 설정을 php.ini 파일에 추가함으로써 엑스디버그 설치가 완료된다.
엑스디버그 설치가 완료되면 phpinfo() 함수 실행 결과에 다음과 같은 내용을 확인 할 수 있다.