질문/조언팁/리소스 공유

일부 스킨개발자 혹은 스킨을 다루는 웹운영진들을 위한 디버그 팁을 알려드립니다.

 

라이믹스이상에서만 사용할 수 있습니다.

 

라이믹스에는 디버그 기능이 들어가 있습니다. 예전에 XE도 마찬가지인데 이를 이용한 디버그를 사용할 수 있습니다.

 

그런데 이 디버그 기능을 사용할 경우 운영에 문제가 발생되는 결과가 초레할 수 있는데 운영진에게만 디버그 기능을 활성화한다면 성능에 영향을 주지 않고 스킨 개발이라던지 이런 부분이 편리합니다.

 

우선 라이믹스에서 제공하는 디버그 방식은 총 3가지 입니다.

 

1. 패널디버그 기능.

2. HTML 속 주석 기능.

3. 파일에 디버그 문구를 추가해주는 방식.

 

스킨개발자 한정으로 추천하는 방법은 1번을 활용하는 것입니다.

 

다만 패널 디버그 사용시 항상 워닝에러가 표시되는 문제가 있긴합니다. 그래도 우리가 보는 정보가 상단에 먼저 나타나니 무시하셔도 됩니다.

 

관리자페이지-> 시스템설정-> 디버그 설정 페이지에서

 

디버그 기능 사용 -> 사용

느린트리거~느린외부요청기록 -> 0.25 초

디버그 정보 표시 방법 -> 화면에 표시(패널)

디버그 정보 표시 내용 -> 응답/요청 정보, 디버그 메세지

디버그 정보 기록 파일 -> 기본값으로 두세요.

디버그 정보 표시 대상 -> 관리자에게만 혹은 아래 IP의 방문자에게만 표시

디버그 허용 아이피 -> 본인의 아이피 한줄만 입력 (내부 공유기 아이피 같이 192.168.0.xx 말고 네이버에 "내 아이피" 검색)

쿼리에 주석 추가 -> 아니요

에러 로그 기록 -> 기록하지 않음

 

이렇게 설정하시길 권장드립니다.

 

중요한 설정은 진하게 설정하였습니다.

 

해당 내용으로 설정하게 되면 해당 디버그 정보 표시 대상의 해당되는 경우 오른쪽 아래에 이미지처럼 보일거예요

 

localhost_-_localhost.png

 

해당 버튼을 누르게 되면

 

붙여넣은_이미지_2021_6_14_오후_5_00.png

이런식의 패널이 뜹니다.

 

그럼 이제 해당 코드에서 디버그 하는 방법 안내해드릴께요.

 

{@

$module = getModel('module')->getModuleInfoByModuleSrl($module_srl);

}

 

이런 코드가 있다고 가정하고 $module의 내용을 알고 싶으면 

{@

$module = getModel('module')->getModuleInfoByModuleSrl($module_srl);

debugPrint($module);

}

 

이렇게 하시면 $module의 내용을 알 수 있습니다.

$module의 내용이 없다고 나오는 경우 매개변수값을 잘못 지정했는지 확인해야하니 $module_srl 을 디버그 해봐야하는데요

{@

$module = getModel('module')->getModuleInfoByModuleSrl($module_srl);

debugPrint($module);

debugPrint($module_srl);

}

 

이렇게 하시면 되요.

 

그래서 새로고침한다음 스킨에서 확인해보면 됩니다.

 

그럼 스킨에서 html 안에 있는 변수들을 어떻게 확인할까요?

 

<[email protected]($module~~~)-->

<[email protected]>

 

이런경우라던가

<block cond="$module~~~"></block>

이 경우

{$module_info->module_srl}

이 경우 모두 포함하는 내용입니다.

그냥 아랫줄에 {@ debugPrint($module~~~) }

이렇게 하시면 됩니다.

 

아랫줄에 적었는데 아에 실행조차 안보인다면 if 의 의해 실행이 안되니 if안의 내용을 확인하기 위해 해당 if문 그 윗줄에 if문 갈호 안의 내용을 debugPrint찍으시면 됩니다.

 

이런 방법을 알고 있으시면 스킨제작에 필요한 기능을 쉽게 구현이 가능하실거라 생각합니다.

 

모듈 개발자는 각자 에디터와 XDEBUG연동하시거나 file 방식의 디버그 방식을 쓰세요.

 

이 방법은 스킨에서만 사용이 가능합니다. (위에 언급한것과 같이 모듈개발시에도 사용은 할 수 있으나 POST요청의 경우 브라우저에 Display액션이 실행이 되지않고 넘어가기 때문에 debugPrint에 내용을 확인할 수 없습니다. 따라서 스킨 또는 view.php 파일의 액션에서만 확인이 가능하다고 생각하시면 됩니다.)

글쓴이 람보

profile
람보입니다.

Email : [email protected]

포트폴리오 : https://bjrambo.com/portfolio
작업의뢰 신청 : https://bjrambo.com/request
  • ?

    http://phpdebugbar.com/
    phpdebugbar를 내장하면 좋겠네요.
    어느 템플릿 파일이 사용되었는지 쿼리 목록 전체 등 이미 갖추어진 스펙에 넣어주기만하면 일목요연하게 정리되어 출력시킬 수 있죠.
    물론 현재의 디버그 패널도 이를 약간 흉내내긴 했으나 오류 결과나 debugPrint()를 이용하는 것 외엔 아쉬운 부분이 있습니다.

    phpdebugbar 기반으로 좀 더 정리된 데이터로 상태를 나타내주면 좋을 것 같습니다.

    request/response 등 기본 정보와 더불어
    - 동작한 애드온과 모듈, 위젯과 이들의 설정 값
    - 사용된 템플릿 파일

    - 로드된 scss/less 파일(import 포함)
    - 사이트, 모듈 정보
    - 사용된 db 쿼리와 수행 시간

    - route

    등등 phpdebugbar를 기반으로 손쉽게 데이터를 출력해줄 수 있는 것들입니다. 하지만 코어에서 이를 위한 연동이 필요하겠죠. 서드파티로 만들어보려했으나 데이터 수집이 불가하여 코어 지원 없이는 불가능하겠더군요.

    변수의 값을 확인하는 방법 이전에 익숙하지 않은 사람들에겐 어떤 템플릿 파일을 확인해야하는지 조차 알 수 없는 경우가 많은데 이런 부분이 개선되면 좋겠네요.

    스켄이 복잡해지면서 파일이 쪼개지고 이를 찾기가 쉽지는 않을 수 있습니다. 목록이라도 제공된다면 좀 더 수월해질 것 같네요.

    phpdebugbar는 phph 7.1 이상 환경을 지원하며 이는 라이믹스의 php 지원 정책 범위에도 포함됩니다.
    https://github.com/rhymix/rhymix/issues/1562

  • ? profile

    디버그 출력에 특정 라이브러리를 사용하여 UI를 개선하는 것과, 출력하는 정보량을 늘리는 것은 전혀 다른 문제입니다. 라이브러리만 교체한다고 정보량이 자동으로 늘어나는 것도 아니고, 정보량을 늘리기 위해 반드시 라이브러리를 교체해야 하는 것도 아닙니다. 깃허브, 커뮤니티 등 어디에서 제안을 하시더라도 분리할 만한 이슈는 분리해서 다루어 주시면 감사하겠습니다.

    또한 디버그 정보량을 마구 늘리다가는 페이지 뒤에 주석이나 스크립트의 형태로 붙는 디버그 데이터의 분량이 어마어마하게 늘어날 수 있으므로 신중하게 접근해야 하겠습니다. 지금도 디버그 패널에 들어가는 정보량이 페이지 자체의 분량을 아득히 초과하곤 해서, 이용자분들이 무심코 켜놓으면 로딩속도와 트래픽 등에서 상당한 손해가 발생할 수 있습니다. 필요할 때만 ajax로 불러오도록 하는 등, 구조적인 개선이 선행되어야 하겠습니다.

  • profile ?

    HTML 주석이나 파일 로깅과 디버그 패널에 보여지는 항목이 일치해야 하나요?
    "디버그 패널을 사용하면 좀 더 많은 정보를 정리해서 볼 수 있다" 만으로도 충분한 사용성과 선택적으로 활용할 수 있을 것 같습니다.

    "라이브러리를 교체하자"가 목적이 아니며 정보를 추가 제공하려할 때의 수단이며 디버그 패널의 UI 개선이 필요하다는 얘기도 전혀 아닙니다;;; 디버그 패널이 이쁘지 않다거나 불편하다는 등의 생각은 전혀 없습니다.
    지금있는 패널에 구현해서 넣어도 상관은 없을 것 같으나, 이미 잘 만들어진 것이 있으니 활용하면 좋을 것 같아서 입니다.

    아무튼 이건 스킨 수정 시 디버그 얘기가 나와서 값을 찍어보는 행위보다 여러 조각으로 분리된 템플릿을 수정할 때 파일을 특정하기 어려울 수 있으므로 로드된 템플릿 파일의 목록이라도 알 수 있으면 더 좋을 것 같아서 첨부한 내용입니다.

  • ? profile

    네, 그러니까 라이브러리 교체와 디버그 정보량 추가는 각각 별도로 논의하면 좋겠다고요. phpdebugbar는 저도 꽤 쓸만하다고 생각합니다. 그러나 위의 댓글을 읽어보면 "phpdebugbar를 사용해서 디버그 정보를 보여주는 서드파티 자료를 만들려고 했는데 코어에서 지원을 안 해서 데이터 수집이 불가능하다"라는 내용으로 읽힙니다.

    우선 제공되는 정보 기반으로 phpdebugbar를 활용하여 서드파티 구현을 해보시다가, 추가로 활용하고 싶으신 정보가 있으면 그 부분만 트리거 추가나 데이터 제공을 요청하시면 되는데 말이지요. 그러다가 잘 되면 코어에 정식으로 포함될 수도 있고, 뭐 그런 거 아니겠어요? ㅎㅎ

    여기도 그렇고 깃허브에 남기신 이슈도 그렇고, 오늘따라 뭔가 앞뒤 구분 없이 wishlist에 올려두셨던 항목들을 마구 쏟아내시는 느낌이라 참견을 해보았습니다. 디버그에 템플릿 정보도 포함되면 좋겠다, route 정보도 나오면 좋겠다, 등등 하나씩 개선해 나갈 수 있는 구체적인 단위로 쪼개지 않고 이렇게 큰 덩어리로 feature request를 던지시면 "그래서 어쩌라고요?"라는 생각이 먼저 드는 것이 사실입니다.

  • profile ?
    첫 댓글에 적은 것처럼 이미 시도는 했었습니다.

    마구 쏟아 내서 불편을 느끼셨다면 이슈는 모두 닫겠습니다.
  • profile

    소중한 정보 감사합니다.

  • profile
    관리자로 접속 후 위에 설정으로 했는데 디버그 버튼이 안 보여서 모두에게 표시로 하니까 보이네요 ㅎㅎ 그런데 오류가 엄청 많이 뜨는데 치명적인 오류인지 아닌지는 어떻게 알 수 있을까요?
    아래에 에러로그에 기록(치명적인 에러만 기록)으로 체크하는 것과 연관되어 있는건가요?
    (포인트 히스토리 문제없이 쓰고 있다고 생각했는데 에러들이 좀 있네요 ㅎㅎ)
  • profile profile
    치명적인 오류는 fatal이상급의 에러로 이미 사이트가 백지부터 납니다.

    사이트는 잘 돌아가는데 warning! 이라는 메세지와함께 뜨는 에러는 일반 사용자는 무시하고 넘어가셔도 되는 사안입니다. (가끔 비 개발자에 이해도가 없으신데도 이거 목숨걸고 고칠려는 일반 사용자분 계시던데.. 그냥 모르는 상태에서 고치다가 버그 만드시지 마시고 냅두세요..)

    에러로그에 에러를 기록하신다면 일반 사용자 입장이나 웹호스팅에 지장을 줄정도록 에러로그가 왕창 생기기에 HDD 용량 꽉차 먹통되기 쉽상입니다. (본인이 뭐햇는지 모릅니다. 이때는 내가 아무것도 안했는데 진짜로 뻗었으니 엉뚱한데에서 원인찾거든요)
  • profile profile
    아하 그렇군요 ㅎㅎ 버그 잡을 능력도 못되기에..
    좋은 정보 감사합니다.
  • profile

    라이믹스 디버그 창 만드신 분, 칭찬합니다. 대단한 겁니다. Ranking #1 워드프레스와 비교해보면 되죠. 워드프레스는 플러그인 설치 안하면 에러/경고 내용이 본문하고 뒤섞여 짬뽕 출력됩니다 ㅠㅠ. 안쓰러워요ㅎㅎ.....