https://xetown.com/topics/985527#comment_985532
참고한 댓글입니다.
라이믹스에서 개발하고 변수의 내용을 보는 관점에서 좀더 나은 디버깅 방법이 무엇일지 생각을 깊게 해보았어요.
그리고 최근에 개발하면서 error_log 를 사용하면서 불편햇던 점과 debugPrint와의 차이를 좀 생각해보았어요.
다른 분들이 어떤걸 많이 쓰는지 모르겟지만 저는 debugPrint에 좀 손을 들어주고 있습니다.
다만 다음과 같은 설정의 조건이 있습니다.
- 디버그를 파일에 저장할 것
- 디버그 실행조건을 특정 아이피 또는 관리자에게만 국한 할 것
- 치명적인 에러만 error_log에 저장할 수 있도록 할 것. (로그파일이 커지지 않습니다.)
1. XE에서부터 사용되던 방식
debugPrint 방식은 XE때부터 코드가 변화하지 않고 그대로 사용할 수 있었다는 장점이 있습니다.
2. 디버깅이 찍혀있는 위치의 줄수와 어디를 거쳐서 출력하고 있는지를 확인이 가능
debugPrint는 디버깅이 실행된 파일의 라인수를 정확하게 인식하고, 해당 함수가 어디에서 어떻게 호출되었는지까지 정확하게 캐치하여 출력해줍니다.
3. 한편으로 프로파일링이 편한 상황이 있다. (라이믹스 기준)
XE는 debugPrint가 찍혀 있을때에만 로그가 남지만 라이믹스의 경우 항상 해당 로그가 출력이 됩니다. 즉 debug항목이 지속적으로 계속 쌓입니다. 그래서 실행했던 순간에 debugPrint가 있으면 해당 내용을 출력해주면서 같이 기록이 되기 때문에 Xdebug를 굳이 쓰지 않더라도 순차적인 부분이라던지 코드실행 순서에 대한 이해를 어느정도 할 수 있다는 장점이 있지요.
4. 디버그 모드를 켜둔 상황에서만 사용이 가능
error_log는 서버의 로그에 항상 쌓이지만 debugPrint는 디버그기능을 사용하지 않으면 함수를 실행했더라도 실제로 기록이 안되고, 그로인한 에러또한 없습니다.
C#에서 제가 좋아하는 코드가 바로 Debug.Assert() 와 같은 함수인데 디버그 모드일 경우에만 해당 함수가 작동하고 나머지는 사용할때 1도 영향이 없습니다. 즉 사용자 입장에서는 숨겨진 코드와 비슷한 느낌인데 저는 이 코드를 지속적으로 많은 곳에 내포하여 사용하고 있습니다.
debugPrint는 이것과 비슷하게 사용할 수 있다는 장점이 있지요.
다만, 이것도 단점이 있습니다.
1. 서버 로그 파일이 계속 쌓이게 됨
위 장점의 3번항목에서 말씀드린 것 처럼 debugPrint를 쓰지 않더라도 위에 디버깅에 설정된 항목에 해당되는 상황이라면 지속해서 웹 파일 영역에 로그를 남기게 되므로 로그의 따른 용량이 부담이 될 수 있습니다.
2. 디버그를 켜둔 상황에서만 사용이 가능
장점 4번과 같이 error_log 를 사용하게되면 디버그를 키던 안키던 무조건 서버측 로그에 쌓이게 됩니다. 이는 서버세팅에 따라 자동으로 잘 삭제 해주기도 하고 쌓이기도 합니다.
하지만, debugPrint는 디버그를 켜둔 상황에서만 해당 내용을 확인할 수 있습니다. 깜빡하고 디버그 모드를 꺼두신 상황이거나 작동하지 않는 특정한 상황이라면 디버깅이 어려울 수 있다는 단점이 있지요.
또한 반대로 켜둔상황에서 모르고 있다가 나중에 로그파일이 초과되어서 사이트가 마비되고나서야 알게 되는 경우도 있습니다.
즉, 껏다켰다의 옵션관리가 아주 중요할 수 있다는 뜻이 되겠지요.
하지만.. 제가 그럼에도 불구하고 debugPrint를 애용 하는 이유는 아무리 error_log가 PHP를 사용하는 모든 라이브러리에서 편리하게 사용할 수 있다는 장점이 있어도.. 라이믹스 내에서 debugPrint만큼의 매력이 있을까 라는 생각이 있더군요.
그래서 저는 debugPrint를 애용하는데 또 다른 의견이 있다면 댓글 남겨주세요 XD