78호. 컨트롤러 단순화하기 free

2019-10-23

안녕하세요 구독자 여러분~ TMI이긴 한데, 어제부터 발리에 한달살기 비슷하게 와있습니다. 어제는 숙소인 호텔의 비즈니스 센터에서 1일 1식 라라벨을 작성했는데요.



비즈니스 센터라고 안내받고 가서 깜짝 놀랐습니다. ㅎㅎㅎ 냉방도 되지 않아서 무척 더워서 고생했네요.


오늘은 찾아보니 숙소 근처에 코워킹 스페이스가 있어서 너그러운 아내의 허락하에 작업하러 왔습니다. 만, 여기도 무척 덥네요! 에어컨이 없어요!!



오늘 전해드릴 내용은 프릭이 알려주는 라라벨 컨트롤러를 훨씬 가볍게 만들어 줄 두 가지 팁입니다. (원문 Simplifying controllers)



  1. 아무것도 상속받지 않기

  2. 라우트에 디폴트 네임스페이스를 사용하지 않기


이 중 두 번째 내용은 66호 라라벨에 라우트를 등록하는 더 나은 방법의 내용과 겹치므로 생략하고 첫 번째 내용만 소개하겠습니다.


컨트롤러는 어떤 것도 상속받을 필요가 없다


php artisan make:controller SomeController로 컨트롤러를 만들면 App\Http\Controllers\Controller를 상속받는 컨트롤러가 만들어집니다.


App\Http\Controllers\ControllerIlluminate\Routing\Controller를 상속받고, 세 개의 트레이트(AuthorizesRequests, DispatchesJobs, ValidatesRequests)를 사용할 뿐 아무 내용이 없습니다.


namespace App\Http\Controllers;

use Illuminate\Foundation\Bus\DispatchesJobs;
use Illuminate\Routing\Controller as BaseController;
use Illuminate\Foundation\Validation\ValidatesRequests;
use Illuminate\Foundation\Auth\Access\AuthorizesRequests;

class Controller extends BaseController
{
use AuthorizesRequests, DispatchesJobs, ValidatesRequests;
}

Illuminate\Routing\Controller에는 미들웨어를 등록하고, 다른 매서드를 호출하는 기능이 있긴 합니다. 일반적으로 Illuminate의 컨트롤러를 상속받아야 한다고 믿는 것과 달리 다음과 같이 아무것도 상속받지 않아도 동작한다고 합니다.


namespace App\Http\Controllers;

class MyController
{

}

스파티에서는 기본적으로 아무것도 상속받지 않은 컨트롤러를 사용하고, 필요에 따라 앞서 언급된 트레이트를 불러서 이용한다고 하네요.


댓글에는 '설정보다 관례'라는 프레임워크의 특성에 맞지 않는다. 신참이 왔을 때 해맬 수 있다. 등등 부정적인 의견도 있습니다. 저도 굳이 이렇게해서 성능이나 코드 품질이 얼마나 좋아질까 싶긴했는데요. 프릭은 이런 말로 이 글을 마쳤습니다.



Laravel tries to make it easy for newcomers by providing some traits to scaffolded controllers by default and by setting up a default namespace. But if you have a bit of experience, I highly recommend not letting your controller extend anything by default and not using a default namespace.

라라벨은 새로 온 사람들이 쉽게 쓸 수 있게 컨트롤러에 트레이트를 스캐폴드하고, 네임스페이스를 설정해두었다. 하지만 여러분이 어느 정도 경험이 있다면, 기본으로 주어진대로 쓰는 대신 아무 것도 상속받지 않은 컨트롤러를 사용하고, 기본 네임스페이스를 쓰지 않기를 권장한다.



힌트는 줬으니 선택은 우리의 몫이겠죠. 여러분은 어떤 선택을 하시겠습니까? :) (저는 결심한 바가 있지만 안알랴줌)


1일 1식 라라벨 78호

2019년 10월 23일


이현석

메쉬 코리아 개발자. 바쁜 팀장님 대신 알려주는 신입 PHP 개발자 안내서를 쓰고, 클린 아키텍처 인 PHP를 번역했습니다. 2020년에 출간될 Laravel Up & Running 2nd Edition을 번역하고 있습니다.