[1일 1식 라라벨 샘플] route:list를 JSON으로 출력하는 기능이 추가되었다

라라벨 5.8.25가 나왔다. (같은 날 긴급 패치가 나와서 현재 최신 버전은 5.8.26이다.) 5.8.25에서는 route:list를 JSON으로 출력하는 기능이 추가되었다.

route:list

route:list는 터미널에서 전체 라우트를 테이블 형태로 출력하는 아티즌 명령어이다. 아래와 같이 실행할 수 있다.

php artisan route:list

아래는 모던 PHP 유저 그룹 홈페이지 의 라우트를 출력한 예시이다.

route:list를 JSON으로 출력하기

라우트 목록을 JSON으로 출력하고 싶으면 --json 옵션을 붙이면 된다.

php artisan route:list --json

그러면 아래와 같이 JSON 형식으로 출력된다.

왜 만들었을까?

이 기능을 추가한 제이슨 맥크레리“프로그램으로 쉽게 파싱될 수 있어서 다른 도구나 서비스에 의해 쓰이기 좋다”고 이유를 밝혔다. 그런데 다른 도구나 서비스가 아티즌 커맨드를 쓰는 일이 있나 싶다.

기존에도 원한다면 라우트 파사드를 통해 이용해서 전체 라우트를 조회할 수 있었다.

$routes = \Illuminate\Support\Facades\Route::getRoutes()->get();

// get() 메소드에 조회하고자 하는 HTTP 메소드를 지정할 수도 있다.
$getRoutes = \Illuminate\Support\Facades\Route::getRoutes()->get('GET');

굳이 추가로 만든 이유를 찾자면 몇가지 항목으로 미리 정리해서 뽑아주기 때문에 살짝 더 편리할 수 있다 정도 아닐까? 아티즌 커맨드로 라우트 목록을 받으려면 아래와 같이 하면 된다.

Artisan::call('route:list --json');
$routes = Artisan::output();

어디에 쓰지?

전 직장에 입사했을 때, 이미 라라벨로 만든 애플리케이션이 잘 돌아가고 있었다. 다만, 테스트가 하나도 없었다. 사장님이 우선은 접속 안되는 페이지가 없는지 확인하는 테스트만 있어도 좀 안심이 될 것 같다고 이야기했고 나도 동의했다. 그때는 라우트 목록을 JSON으로 뽑는 기능도 없었고, 라우트 파사드로 조회할 수 있는지도 몰라서 아래와 같이 단순 무식하게 짰다.

$this->get("/")->assertSuccessful();

$this->get("/user/login")->assertSuccessful();
$this->get("/user/add")->assertSuccessful();
$this->get("/user/forget")->assertSuccessful();
... //이렇게 수십 줄이 이어진다.

// 로그인이 필요한 페이지는 이런 식으로
$this->actingAs($user)->get('/user/changePassword')->assertSuccessful();

지금 다시 짠다면 요번에 추가된 기능이나 라우트 파사드를 이용해서 좀 더 프로그램 답게(programmatically) 작성할 수 있지 않을까 싶다. GET 메소드만 쌱 조회해서 미들웨어에 auth 있나 없나 보고 그에 따라 샤샥.

이 글은 하루에 한 편씩 라라벨 관련 글을 메일로 보내드리는 [1일 1식 라라벨] 의 샘플 원고입니다. 조금 더 길어질 수도 짧아질 수도 있습니다만, 어느 정도 공들여 쓴 블로그 포스트 정도라고 생각해주시면 될 것 같습니다. 7월호 유료구독자를 모집하고 있습니다.

One comment

Leave a Reply

This site uses Akismet to reduce spam. Learn how your comment data is processed.