Page tree

우리가 작성한 블레이드 템플릿은 라라벨의 BladeCompiler 에 의해 레거시 PHP 코드로 컴파일되고 최종적으로 PHP 엔진에 의해 해석되고 실행됩니다.

만약 PHP 엔진에서 해석 오류가 발생했을 경우 표시되는 에러 메시지와 라인은 우리가 작성한 블레이드 템플릿이 아니므로 디버깅에 어려움을 겪게 됩니다.

 

예로 바로 전에 작성했던 resources/views/task/list3.blade.php 의 내용중 $task['name'] 을 다음과 같이 프로퍼티 호출로 변경해 봅시다.

<tr>
    <td>{{ $task->name }}</td>
    <td>{{ $task['due_date'] }}</td>
</tr>

$task 는 클래스가 아니므로 최종 생성된 PHP 코드는 $task->name 구문에서 실행 에러가 나며 배열을 클래스의 프로퍼티처럼 호출하려고 했으므로 에러 메시지는 "Trying to get property of non-object" 가 됩니다.

블레이드 실행 에러

하지만 에러가 발생한 파일과 라인수는 전혀 엉뚱한 파일(d2b4cb81122d49752c93f7187cb7eeb42423c678.php:16)을 표시하고 있으므로 경험이 없다면 어떻게 고쳐야 할지 난감해 집니다.

위와 같은 상황에서 가장 좋은 방법은 컴파일된 에러 파일을 열어서 해당 라인을 확인하는 것입니다.

 

컴파일된 파일은 storage/framework/views 폴더에 위치하게 되며 사용하는 에디터에서 파일을 열어 봅시다.

컴파일된 PHP 파일 열기

 

파일을 열은 후에 첨부와 같이 에러가 발생한 라인의 코드를 보면 최종 코드를 확인할 수 있고 문제가 된 블레이드 템플릿을 어떻게 수정해야 할지 알수 있습니다.

컴파일된 PHP

블레이드 템플릿 디버깅은 실제 개발시에 자주 부딪히게 되는 문제이므로 위와 같이 최종 변환된 PHP 파일을 찾아서 해당 라인을 찾고 이를 기반으로 블레이드 파일을 수정하면 어렵지 않게 대응할 수 있습니다.

 

마치며

이 번 장에서는 라라벨의 설치 및 구성과 라우팅과 뷰, 템플릿 엔진인 블레이드의 개념과 사용 방법에 대하여 알아보았습니다.

 

라라벨 설치는 새로운 라라벨 프로젝트를 시작할 때마다 필요하며 컴포저 사용해 익숙해지면 빠른 시간안에 프로젝트를 생성하고 개발 업무를 시작할 수 있습니다.

라우트는 사용자의 요청을 애플리케이션과 연결해 주는 통로이며 RESTFul 기반의 웹 서비스를 제공하기 위해서는 꼭 알아야 하는 개념으로 전체 애플리케이션의 구조를 한 눈에 파악하고 손쉽게 관리할 수 있는 장점이 있습니다.

뷰와 템플릿은 최종적으로 사용자에게 표시하기 위한 결과물을 생성하는 레이어이며 프론트엔드와 바로 연계되므로 중요성이 커지고 있으며 블레이드는 가볍고 배우기 쉽은 장점이 있습니다.

기본 기능외에 커스텀 기능이 필요한 독자들은 블레이드 매뉴얼중 Extending Blade(http://goo.gl/ljZBnY)를 참고하면 도움이 될 것입니다.

 

다음 장에서는 라라벨의 다양한 유틸리티 기능을 사용하기 위한 artisan 명령어 사용법과 컨트롤러, 그리고 고급 라우팅 기법에 대해서 학습할 것입니다.