Blog

  • VSCode에서 PHP Remote Debugging 설정

    VSCode에서 PHP Remote Debugging 설정

    나는 주력으로 PhpStorm IDE를 꽤 오랫동안 사용해 오고 있다. IDE로서 매우 편리한 기능들이 많기 때문에 버릴 수가 없다.

    하지만 요즘은 VSCode가 엄청나게 많은 개발자들의 지지를 얻고 있다. 무료로 사용 가능하고 많은 확장 기능들이 있어 그 나름대로 많이 편리한 것 같다. 가볍기도 하고.

    나는 그동안 PhpStorm에서 최고로 유용한 기능으로 꼽았던 것이 PHP 원격 디버깅 기능이었다. 다만, 이건 PhpStorm에서만 가능한 사항은 아니고 IDE 별로 적절히 지원만 해 주면 가능한 기능이다.

    앞으로 PhpStorm을 애용할 생각이지만, VSCode를 활용한 개발 환경은 대안으로 늘 만들어 두고 싶었다. 그 중 넘어야 할 산(?) 중 하나인 원격 디버깅 기능을 VSCode에서 셋업해 봤다.

    PHP Debug

    Extensions 메뉴를 선택하고, ‘PHP Debug’를 입력해 확장을 설치한다.

    그다음 디버깅을 하려는 소스 코드가 있는 디렉토리를 연다. 만약 워드프레스 테마나 플러그인을 작업하려면 워드프레스 루트 디렉토리를 여는 것을 더 권장한다.

    VSCode의 설정을 저장하는 .vscode 디렉토리가 생성된다 (만약 없으면 만들면 된다). 이 디렉토리에 launch.json 파일을 생성한다 (마찬가지로 없으면 만들면 된다). 이 파일에 다음처럼 셋팅을 준비한다.

    이미지에 표시된 순서대로 클릭.
    드롭다운 목록 상자가 나오는데 여기서 ‘PHP’ 선택.
    {
        "version": "0.2.0",
        "configurations": [
            {
                "name": "Remote Debugging",
                "type": "php",
                "request": "launch",
                "port": 9003,
                "pathMappings": {
                    "/path/to/wp": "${workspaceFolder}/"
                }
            }
        ]
    }Code language: JSON / JSON with Comments (json)
    • 기본 템플릿 코드는 적당히 무시하고 위 코드로 갈음한다.
    • XDebug 3가 나오면서 기본 포트가 9000번에서 9003번으로 변경되었다. 해당 사항을 명시한다.
    • 호스트는 로컬 개발을 가정하므로 기본인 localhost로 생략하였다.
    • type으로 php를 설정한다.
    • request는 launch로 고정된다.
    • pathMappings 부분의 /path/to/wp 부분은 현재 VSCode에서 열어둔 디렉토리 절대경로 설정한다.
    • name은 임의의 이름이다. 마음대로 정하면 된다.

    이렇게 하면 ‘Run and Debug’ 메뉴에서 ‘Remote Debugging’ 실행 항목이 생성된다. ‘Start Debugging’ 아이콘을 눌러 디버깅을 실행하면 된다.

    그림과 같은 항목이 생긴다. 버튼을 눌러 디버깅 시작.

    PHP XDebug 설정

    xdebug 설정 부분은 대략 아래와 같다.

    zend_extension=xdebug.so
    
    xdebug.mode=develop,debug
    xdebug.remote_enable=on
    xdebug.start_with_request=trigger
    xdebug.idekey=phpstorm-xdebug
    • 이 설정은 XDebug 3의 설정이다. 2와 다르다. 버전을 확인하여 3.X인지 확인하자.
    • mode가 develop도 같이 넣어 에러 출력도 같이 더했다. 원하지 않으면 debug만 넣으면 된다.
    • start_with_requst=yes로 하는 방법도 있다. 그런데 이렇게 하면 언제나 디버깅이 실행된다. 브라우저에서 적절히 ON/OFF를 결정할 수 있으려면 trigger를 설정하면 된다.
    • 브라우저에서 ON/OFF를 결정하는 방법은 세션 쿠키를 보내는 방법이다. 이때 사용하는 설정이 idekey. 이 값을 phpstorm-xdebug로 정했다. 디버깅은 VSCode 뿐만 아니라 PhpStorm에서도 번갈항 쓰는 데다, PhpStorm이 더 주력이기 때문이다.

    브라우저 설정

    start_with_requst=trigger로 설정했으면 이 과정이 필요하다. 브라우저에 절절히 세션 쿠키를 넣을 방법이 필요하기 때문이다. 어지간한 브라우저마다 PHP 디버깅을 위한 확장 프로그램을 제공할 것이다. 나는 주로 파이어폭스와 XDebug Session Cookie를 사용한다. 설치한 다음 쿠키 값으로 phpstorm-xdebug를 설정한다.

    IDE Key는 xdebug 설정과 동일하게.
    플러그인을 통해 세션 쿠키 값을 셋팅할 수 있다.

    디버깅 시작

    워드프레스의 프론트 메인 파일인 index.php에 적당히 브레이크 포인트를 넣고 디버깅을 시작해 봤다. 아래처럼 PHP 처리가 중간에 멈추면서, 해당 과정 중의 콜스택, 변수 정보를 모두 속속들이 볼 수 있다. 여기에서 함수 안으로 들어갈지, 다음 코드 라인으로 진행할지 결정할 수 있다.

    브레이크 포인트에 딱 걸림!
    1. 현재 브레이크 포인트에 걸려서 중지된 라인이 하이라이트되었다.
    2. 디버깅 툴이다. 코드 진행을 제어할 수 있다.
    3. 현재 상태의 변수 이름과 값을 확인할 수 있다. 매우 유용하다.
    4. 콜스택이 나타난다.

    배열의 활용이 두드러진 PHP 코드는 런타임 때 대체 연관 배열 변수 값이 어떤 구조인지 알아보기 어려운 경우가 많다. 이 때 사용할 수 있는 가장 강력한 툴이 바로 XDebug를 활용한 원격 디버깅인 것 같다. 이렇게 XDebug의 원격 디버깅 기능을 활용하면 프로그램의 상황을 자세히 파악하면서 개발할 수가 있다. 보다 품질 좋은 코드를 작성하려면 반드시 필요하다.

  • FakerPress: 테스트용 포스트 일괄 생성 플러그인

    지난번 WP CLI를 소개하는 포스팅 때 개발 테스트를 위해 일괄적으로 임의의 포스팅을 대량으로 생성하는 명령어인 wp post generate에 대해 소개하였다.

    그런데 이 명령어는 포스트의 내용까지는 대량 작성하기가 어려운 점이 있어 단순히 포스트 수만 채우는 정도까지만 유용하다. 그러므로 포스트의 내용이 제대로 출력되는지, 스타일이 제대로 반영되는지 등의 디테일한 사항까지 체크할 수 있으려면 조금 역부족이다.

    그럴 때 정말 유용한 플러그인이 바로 FakerPress 이다. 개발 초기 테스트를 위한 포스트를 원하는대로 생성이 가능하다. 오늘은 이 플러그인을 간단히 소개할까 한다.

    FakerPress는 오픈 소스 플러그인이다. WordPress 플러그인 목록에서 간단히 다운로드 받아 설치할 수 있으며 활성화 즉시 사용 가능하다.

    포스트 생성시 갯수는 물론이고 해당 포스트에 카테고리, 태그, 본문 작성시 삽입할 구조까지 얼추 지정 가능하다. 특히 랜덤한 이미지까지 삽입할 수 있어 매우 유용하다.

    포스트, 코멘트, 텀, 유저 생성이 가능하다.
    포스트의 필드를 적절히 조절 가능
    포스트 콘텐츠 구조까지 적당히 조절 가능
    택소노미나 메타 필드까지 조절 가능

    이렇게 랜덤 생성된 포스트는 모두 FakerPress가 작성한 가짜 포스트라는 태깅이 되어 있어 모두 손쉽게 삭제 가능하다. 설정 페이지로 가서 Let It Go!만 입력하면 차후 언제나 깔끔하고 간단하게 생성한 포스트를 제거 가능하다.

    가버려!

    가짜 포스트를 나름 의미 있게 일일이 생성하는 것은 꽤 귀찮은 일인데, 이 플러그인을 쓰면 꽤 유용하다. 테마 개발자라믄 사용을 강력히 추천한다.

  • 워드프레스 자동 설치 스크립트 샘플

    이번 포스팅은 특정 디렉토리를 기준으로 DB 생성, 소스 다운로드, 설치 및 초기 셋팅을 정해진대로 수행하는 스크립트의 예제를 올린다.

    그동안 간단히 만들어 사용한 거고 WP-CLI를 사용하는 좋은 예시인 것 같다. 코드는 gist 에서 확인할 수 있다.

    이 코드에서 처음에 지정해 줘야 할 변수값들이 있다. 확인해 보자.

    WP_ROOT="/path/to/wp/root"
    DB_ROOT_PASS='0000'
    
    ADMIN_USER=user
    ADMIN_EMAIL=user@email.com
    ADMIN_PASS=pass
    
    SMTP_USER=user@gmail.com
    SMTP_PASS=passCode language: JavaScript (javascript)

    WP_ROOT은 워드프레스 설치들을 모아놓은 상위 디렉토리이다. 여기가 만약 /home/changwoo/develop/wordpress였다면 이 디렉토리의 서브디렉토리별로 워드프레스 설치본이 하나씩 생성된다.

    ADMIN_USER, ADMIN_EMAIL, ADMIN_PASS는 워드프레스 최초설치시 생성하는 관리자의 로그인, 이메일, 패스워드가 된다. 적절히 셋팅해두자.

    SMTP_USER, SMTP_PASS는 기본으로 지메일 SMTP 세팅을 정해두고, 사용자와 패스워드를 입력한다. 지메일 계정의 낮은 보안 앱 접근을 허용해 두어야 하는 것을 잊지 말자.

    중간에 내가 사용하는 naran 프로젝트 플러그인 몇가지도 추가되어 있다. 이것을 정상적으로 실행하려면 git이 설치되어 있어야 한다. 또한 WP CLI를 기본적으로 사용하므로 반드시 설치되어 있어야 하고.

    wp_install 스크립트는 다음과 같이 실행될 것이다.

    $ wp_install foo
    ... (설치 메시지)
    Successfully installed. DB USER/PASS: foo / IDLcKVrGJ4Ju

    예를 들어 WP_ROOT/home/changwoo/develop/wordpres였다면 이 아래 foo라는 디렉토리 아래 워드프레스가 설치된 것이 보일 것이다. 그리고 이 워드프레스의 도메인은 http://foo.dev.site로 설정되어 있다. 나머지 서버 설정은 따로 진행하면 된다.

    스크립트는 예시일 뿐이다. 각자의 환경에 따라 적절히 변경해서 사용하도록 하자.

    wp_install gist

  • wp-cli 사용하기 #3

    어제의 포스팅에 이어 wp-cli에 대해 소개하는 포스팅을 작성한다. 오늘은 아마도 마무리하는 글에 걸맞게 실무적으로 유용한 명령들이 될 것이다.

    (더 보기…)
  • wp-cli 사용하기 #2

    지난 포스트에 이어 wp cli 사용에 대해 계속 포스팅한다. 이 멋진 툴을 소개하려니 신난다. 한번에 좌르륵 풀어내기보다는 아껴서 조금씩조금씩 이야기하고 싶다. 자, 우선 무엇부터 시작할까?

    (더 보기…)
  • wp-cli 사용하기 #1

    의식의 흐름대로 흘러가는 1일 1워프 중이다. 적당히, 진짜 적당껏 분량 조절해서 하루에 하나씩 원하는 내용을 적는 중이다.

    오늘은 드디어 wp-cli의 이야기를 하게 된다. 워드프레스 개발자로서 반드시 숙지해야 할 녀석, 그리고 할 이야기가 무지무지 많은 녀석이다.

    (더 보기…)