Clockwork
itsgoingd/clockwork
브라우저에서 쓰는 PHP 개발 도구
Clockwork 소개
Clockwork는 브라우저에서 바로 사용할 수 있는 PHP 개발 도구입니다. HTTP 요청, 명령어, 큐 Job, 테스트를 대상으로 요청 데이터, 성능 지표, 로그, 데이터베이스 쿼리, 캐시 쿼리, Redis 명령, 디스패치된 이벤트, 큐에 등록된 Job, 렌더링된 뷰 등 애플리케이션 실행 과정을 한눈에 살펴볼 수 있습니다.
이 저장소에는 Clockwork의 서버 측 컴포넌트가 들어 있습니다.
자세한 내용은 Clockwork 웹사이트를 확인하세요.
설치
Composer로 Clockwork 라이브러리를 설치합니다.
composer require itsgoingd/clockwork
설치는 이것으로 끝입니다. 명령어나 큐 Job 프로파일링 같은 추가 기능을 사용하려면 vendor:publish Artisan 명령어로 설정 파일을 퍼블리시하세요.
참고: Laravel 라우트 캐시를 사용 중이라면 route:cache Artisan 명령어로 캐시를 갱신해야 합니다.
더 자세한 설치 방법은 Clockwork 웹사이트의 전체 설치 안내를 참고하세요.
기능
데이터 수집
Clockwork의 서버 측 컴포넌트는 애플리케이션에 대한 데이터를 수집하고 저장합니다.
기본적으로 Clockwork는 애플리케이션이 디버그 모드일 때만 활성화됩니다. Clockwork를 명시적으로 켜거나 끌 수도 있고, 데이터를 수집만 하고 분석용으로 노출하지 않도록 항상 수집 상태로 둘 수도 있습니다.
기본적으로 유용한 데이터를 폭넓게 수집하지만, 설정 파일에서 기능을 더 켜거나 필요 없는 기능을 끌 수 있습니다.
일부 기능에는 고급 옵션도 있습니다. 예를 들어 데이터베이스 쿼리에는 느린 쿼리 기준값을 지정하거나 중복(N+1) 쿼리 감지를 켤 수 있습니다. Clockwork가 할 수 있는 모든 것은 설정 파일에서 확인해 보세요.
Clockwork를 어떤 요청에 대해 활성화할지 고르는 옵션도 여러 가지 있습니다.
온디맨드(on-demand) 모드는 Clockwork 앱이 열려 있을 때만 데이터를 수집합니다. 앱 설정에 시크릿을 지정해 두면 그 값이 일치할 때만 요청을 수집하도록 할 수도 있습니다. 오류만(errors only) 모드는 4xx, 5xx 응답으로 끝난 요청만 기록합니다. 느린 요청만(slow only) 모드는 응답 시간이 설정한 기준값을 넘는 요청만 수집합니다. 커스텀 클로저로 수집·기록할 요청을 필터링할 수도 있으며, CORS 프리플라이트 요청은 기본적으로 수집하지 않습니다.
Clockwork 4.1부터는 Artisan 명령어, 큐 Job, 테스트도 수집할 수 있습니다. 설정 파일에서 이 기능을 활성화해야 합니다.
또한 Clockwork는 로그 메시지나 데이터베이스 쿼리 같은 데이터의 스택 트레이스도 수집합니다. 기본값은 마지막 10개 프레임이며, 설정 파일에서 프레임 수 제한을 바꾸거나 이 기능을 끌 수 있습니다.
데이터 확인
웹 인터페이스
/clockwork 라우트에 접속하면 수집된 데이터를 확인하고 상호작용할 수 있습니다.
이 앱은 실행된 모든 요청을 보여 주므로, 브라우저가 아닌 곳에서 보낸 요청(예: API를 개발 중인 모바일 앱의 요청)을 확인할 때도 유용합니다.
브라우저 확장 프로그램
Chrome과 Firefox용 브라우저 개발자 도구 확장 프로그램도 제공됩니다.
툴바
Clockwork는 기본적인 요청 정보를 앱 화면의 툴바 형태로 보여 주는 옵션도 제공합니다.
툴바는 전부 클라이언트 측에서 렌더링되며, 작은 JavaScript 라이브러리를 설치해야 합니다.
Clockwork 웹사이트에서 더 알아보기.
로깅
clock() 헬퍼로 단순한 문자열부터 배열, 객체까지 어떤 변수든 기록할 수 있고, 여러 값을 한꺼번에 넘길 수도 있습니다.
clock(User::first(), auth()->user(), $username)clock() 헬퍼 함수는 첫 번째 인자를 그대로 반환하므로, 코드 중간에 인라인 디버깅 구문을 쉽게 끼워 넣을 수 있습니다.
User::create(clock($request->all()))로그 레벨을 지정하려면 긴 형태의 호출을 사용합니다.
clock()->info("User {$username} logged in!")타임라인
타임라인은 애플리케이션 실행 과정을 시각적으로 보여 줍니다.
타임라인에 이벤트를 추가하려면 설명과 함께 이벤트를 시작하고, 측정할 코드를 실행한 뒤 이벤트를 종료합니다. 플루언트 API로 이벤트를 세부적으로 설정할 수도 있습니다.
// using timeline api with begin/end and fluent configuration
clock()->event('Importing tweets')->color('purple')->begin();
...
clock()->event('Importing tweets')->end();측정할 코드 블록을 클로저로 넘겨 실행할 수도 있습니다. 플루언트 API 대신 배열 기반 설정을 사용해도 됩니다.
// using timeline api with run and array-based configuration
clock()->event('Updating cache', [ 'color' => 'green' ])->run(function () {
...
});제공되는 기능에 대한 더 자세한 내용은 Clockwork 웹사이트에서 확인하세요.