애플리케이션 디버깅
로그 확인
CodeIgniter 오류 로그
CodeIgniter는 app/Config/Logger.php의 설정에 따라 오류 메시지를 기록합니다.
기본 설정에서는 일별 로그 파일이 writable/logs에 저장됩니다. 예상대로 동작하지 않는 경우 확인해 보는 것이 좋습니다!
더 많거나 더 적은 메시지를 보기 위해 오류 임계값을 조정할 수 있습니다. 자세한 내용은 로깅을 참조하십시오.
모든 SQL 쿼리 로깅
CodeIgniter가 발행하는 모든 SQL 쿼리를 기록할 수 있습니다. 자세한 내용은 데이터베이스 이벤트를 참조하십시오.
var_dump() 대체
Xdebug와 좋은 IDE를 사용하는 것이 애플리케이션 디버깅에 필수적일 수 있지만, 때로는 빠른 var_dump()만으로도 충분합니다. CodeIgniter는 PHP용 탁월한 Kint 디버깅 도구를 번들로 제공하여 더욱 편리하게 만들었습니다.
이는 일반적인 도구를 훨씬 뛰어넘어, 타임스탬프를 인식 가능한 날짜로 포맷하거나, 16진수 코드를 색상으로 표시하거나, 배열 데이터를 테이블 형태로 표시하는 등 다양한 추가 데이터를 제공합니다.
Kint 활성화
기본적으로 Kint는 development와 testing 환경에서만 활성화됩니다. 상수 CI_DEBUG가 정의되고 그 값이 참일 때마다 활성화됩니다. 이는 부트 파일(예: app/Config/Boot/development.php)에 정의되어 있습니다.
Kint 사용
d()
d() 메서드는 유일한 매개변수로 전달된 내용에 대해 알고 있는 모든 데이터를 화면에 덤프하고, 스크립트가 계속 실행되도록 합니다:
d($_SERVER);
dd()
이 메서드는 d()와 동일하지만, die()도 호출하여 해당 요청에서 더 이상의 코드가 실행되지 않습니다.
trace()
현재 실행 지점까지의 백트레이스를 Kint 고유의 방식으로 제공합니다:
trace();
자세한 내용은 Kint 페이지를 참조하십시오.
디버그 툴바
디버그 툴바는 벤치마크 결과, 실행한 쿼리, 요청 및 응답 데이터 등 현재 페이지 요청에 대한 정보를 한눈에 제공합니다. 이 모든 것이 디버그 및 최적화에 매우 유용합니다.
참고
디버그 툴바는 아직 개발 중이며 계획된 여러 기능이 아직 구현되지 않았습니다.
툴바 활성화
툴바는 production을 제외한 모든 환경에서 기본적으로 활성화됩니다. 상수 CI_DEBUG가 정의되고 그 값이 참일 때마다 표시됩니다. 이는 부트 파일(예: app/Config/Boot/development.php)에 정의되어 있으며, 표시할 환경을 결정하기 위해 그곳에서 수정할 수 있습니다.
참고
baseURL 설정(app/Config/App.php의 값 또는 .env의 app.baseURL)이 실제 URL과 일치하지 않으면 디버그 툴바가 표시되지 않습니다.
툴바 자체는 After 필터로 표시됩니다. app/Config/Filters.php의 $required (또는 $globals) 속성에서 'toolbar'를 제거하면 실행을 중단할 수 있습니다.
참고
v4.5.0 이전에는 툴바가 기본적으로 $globals로 설정되었습니다.
표시할 내용 선택
CodeIgniter에는 이름에서 알 수 있듯이 툴바에 표시할 데이터를 수집하는 여러 Collector가 포함되어 있습니다. 툴바를 커스터마이즈하기 위해 직접 만들 수도 있습니다. 어떤 collector가 표시될지 결정하려면 app/Config/Toolbar.php 설정 파일로 이동하십시오:
<?php
namespace Config;
use CodeIgniter\Config\BaseConfig;
class Toolbar extends BaseConfig
{
public $collectors = [
\CodeIgniter\Debug\Toolbar\Collectors\Timers::class,
\CodeIgniter\Debug\Toolbar\Collectors\Database::class,
\CodeIgniter\Debug\Toolbar\Collectors\Logs::class,
\CodeIgniter\Debug\Toolbar\Collectors\Views::class,
\CodeIgniter\Debug\Toolbar\Collectors\Cache::class,
\CodeIgniter\Debug\Toolbar\Collectors\Files::class,
\CodeIgniter\Debug\Toolbar\Collectors\Routes::class,
\CodeIgniter\Debug\Toolbar\Collectors\Events::class,
];
// ...
}
표시하지 않으려는 collector는 주석 처리하십시오. 완전한 정규화 클래스명을 제공하여 여기에 커스텀 Collector를 추가하십시오. 여기에 나타나는 정확한 collector는 어떤 탭이 표시될지와 타임라인에 어떤 정보가 표시될지에 영향을 미칩니다.
참고
데이터베이스나 로그와 같은 일부 탭은 표시할 내용이 있을 때만 표시됩니다. 그렇지 않으면 작은 화면에서의 공간을 위해 제거됩니다.
CodeIgniter에 포함된 Collector는 다음과 같습니다:
Timers는 시스템과 애플리케이션 모두의 벤치마크 데이터를 수집합니다.
Database는 모든 데이터베이스 연결이 수행한 쿼리 목록과 그 실행 시간을 표시합니다.
Logs는 기록된 모든 정보가 여기에 표시됩니다. 오래 실행되는 시스템이나 많은 항목이 기록되는 시스템에서는 메모리 문제를 일으킬 수 있으므로 비활성화해야 합니다.
Views는 타임라인에 뷰의 렌더링 시간을 표시하고, 뷰에 전달된 데이터를 별도의 탭에 표시합니다.
Cache는 캐시 적중 및 미적중에 대한 정보와 실행 시간을 표시합니다.
Files는 이 요청 중에 로드된 모든 파일의 목록을 표시합니다.
Routes는 현재 라우트와 시스템에 정의된 모든 라우트에 대한 정보를 표시합니다.
Events는 이 요청 중에 로드된 모든 이벤트의 목록을 표시합니다.
벤치마크 지점 설정
프로파일러가 벤치마크 데이터를 컴파일하고 표시하려면 특정 구문을 사용하여 마크 지점에 이름을 지정해야 합니다.
벤치마크 라이브러리 페이지에서 벤치마크 지점 설정에 대한 정보를 읽어보십시오.
커스텀 Collector 생성
커스텀 collector 생성은 간단한 작업입니다. 오토로더가 찾을 수 있도록 완전한 네임스페이스를 포함하여 CodeIgniter\Debug\Toolbar\Collectors\BaseCollector를 확장하는 새 클래스를 만듭니다. 이는 오버라이드할 수 있는 여러 메서드를 제공하며, Collector가 동작하는 방식에 따라 올바르게 설정해야 하는 네 가지 필수 클래스 속성이 있습니다:
<?php
namespace MyNamespace;
use CodeIgniter\Debug\Toolbar\Collectors\BaseCollector;
class MyCollector extends BaseCollector
{
protected $hasTimeline = false;
protected $hasTabContent = false;
protected $hasVarData = false;
protected $title = '';
}
$hasTimeline은 툴바의 타임라인에 정보를 표시하려는 Collector에 대해 true로 설정해야 합니다. 이 값이 true이면 표시를 위한 데이터를 포맷하고 반환하는 formatTimelineData() 메서드를 구현해야 합니다.
$hasTabContent은 Collector가 커스텀 내용이 있는 자체 탭을 표시하려는 경우 true여야 합니다. 이 값이 true이면 $title을 제공하고, 탭 내용을 렌더링하는 display() 메서드를 구현해야 하며, 탭 내용 제목 바로 오른쪽에 추가 정보를 표시하려면 getTitleDetails() 메서드도 구현해야 할 수 있습니다.
$hasVarData는 이 Collector가 Vars 탭에 추가 데이터를 추가하려는 경우 true여야 합니다. 이 값이 true이면 getVarData() 메서드를 구현해야 합니다.
$title은 열린 탭에 표시됩니다.
툴바 탭 표시
툴바 탭을 표시하려면 다음을 수행해야 합니다:
툴바 제목과 탭 헤더 모두에 표시되는 텍스트로
$title을 채우십시오.$hasTabContent를true로 설정하십시오.display()메서드를 구현하십시오.선택적으로
getTitleDetails()메서드를 구현하십시오.
display()는 탭 자체 내에 표시되는 HTML을 생성합니다. 탭의 제목은 툴바에 의해 자동으로 처리되므로 걱정할 필요가 없습니다. HTML 문자열을 반환해야 합니다.
getTitleDetails() 메서드는 탭 제목 바로 오른쪽에 표시되는 문자열을 반환해야 합니다. 추가적인 개요 정보를 제공하는 데 사용할 수 있습니다. 예를 들어, 데이터베이스 탭은 모든 연결에 걸친 총 쿼리 수를 표시하고, 파일 탭은 총 파일 수를 표시합니다.
타임라인 데이터 제공
타임라인에 표시될 정보를 제공하려면 다음을 수행해야 합니다:
$hasTimeline을true로 설정하십시오.formatTimelineData()메서드를 구현하십시오.
formatTimelineData() 메서드는 타임라인이 올바르게 정렬하고 정보를 표시하는 데 사용할 수 있는 방식으로 포맷된 배열의 배열을 반환해야 합니다. 내부 배열에는 다음 정보가 포함되어야 합니다:
<?php
$data[] = [
'name' => '', // Name displayed on the left of the timeline
'component' => '', // Name of the Component listed in the middle of timeline
'start' => 0.00, // start time, like microtime(true)
'duration' => 0.00, // duration, like mircrotime(true) - microtime(true)
];
Vars 제공
Vars 탭에 데이터를 추가하려면 다음을 수행해야 합니다:
$hasVarData를true로 설정하십시오getVarData()메서드를 구현하십시오.
getVarData() 메서드는 표시할 키/값 쌍의 배열을 포함하는 배열을 반환해야 합니다. 외부 배열의 키 이름이 Vars 탭의 섹션 이름이 됩니다:
<?php
$data = [
'section 1' => [
'foo' => 'bar',
'bar' => 'baz',
],
'section 2' => [
'foo' => 'bar',
'bar' => 'baz',
],
];
핫 리로딩
Added in version 4.4.0.
디버그 툴바에는 핫 리로딩(Hot Reloading)이라는 기능이 포함되어 있습니다. 이 기능을 사용하면 애플리케이션 코드를 변경하면 페이지를 새로 고침하지 않고도 브라우저에서 자동으로 다시 로드됩니다. 개발 중에 시간을 크게 절약해 줍니다.
개발 중에 핫 리로딩을 활성화하려면 툴바 왼쪽에 있는 새로 고침 아이콘처럼 생긴 버튼을 클릭하면 됩니다. 비활성화할 때까지 모든 페이지에 대해 핫 리로딩이 활성화됩니다.
핫 리로딩은 app 디렉터리 내의 파일을 매초 스캔하여 변경 사항을 찾습니다. 변경 사항이 발견되면 브라우저에 페이지를 다시 로드하라는 메시지를 보냅니다. 다른 디렉터리는 스캔하지 않으므로, app 디렉터리 외부의 파일을 변경하는 경우 수동으로 페이지를 새로 고침해야 합니다.
app 디렉터리 외부의 파일을 감시해야 하거나 프로젝트 크기로 인해 느리다고 느끼는 경우, app/Config/Toolbar.php 설정 파일의 $watchedDirectories와 $watchedExtensions 속성에서 스캔할 디렉터리와 파일 확장자를 지정할 수 있습니다.