라라벨 라우트 그룹 사용시 유의사항

라라벨 코리아 페이스북 그룹에 질문이 하나 올라왔습니다.

https://www.facebook.com/groups/laravelkorea/permalink/1862353923927678

처음부터 제대로 배우는 라라벨의 예제 코드 처럼 라우트 그룹을 작성하면 에러가 나는데, 책에 나온 코드 처럼 사용하는 방법은 없느냐 하는 것 입니다.

질문해주신 분이 언급한 예제는 79 페이지의 예제 3-10 이며 내용은 아래와 같습니다.

Route::group(function () {
    Route::get('hello', function () {
        return 'Hello';
    });
    Route::get('world', function () {
        return 'World';
    });
});

위의 코드를 실행하면 질문자분께서 말씀하신 것 처럼 에러가 납니다.

“Illuminate\Routing\Router::group(): Argument #1 ($attributes) must be of type array, Closure given, called in …”

group() 메서드의 첫번째 인자로 배열이 들어와야하는데 클로저가 들어왔다는 내용입니다.

결론부터 말씀드리면 책의 예제 코드가 잘못된 게 맞습니다. ㅠ

Illuminate\Routing\Router::group() 메서드의 시그너처가 아래와 같기 때문에 첫번째 인자로 반드시 배열을 넘겨줘야 합니다.

public function group(array $attributes, $routes)

따라서 예제 코드는 아래와 같이 바뀌어야 정상 동작합니다.

Route::group([], function () {
    Route::get('hello', function () {
        return 'Hello';
    });
    Route::get('world', function () {
        return 'World';
    });
});

클로저만 넘기는 경우도 있던데요?

Route::middleware(['throttle:uploads'])->group(function () {
    Route::post('/photos', function() {
        //
    });
});

위 코드는 81 페이지의 예제 3-12 입니다.

group() 메서드에 클로저 하나만 넘겨주고 있습니다. 어떻게 된거죠?

group(), 동명이인

이유는 Route::group() 과 Route::middleware()->group() 에 쓰인 group()이 서로 다른 클래스의 메서드이기 때문입니다.

Route::middleware()는 Illuminate\Routing\Router가 아닌 Illuminate\Routing\RouteRegistrar를 반환합니다. 따라서 middleware() 메서드에 체이닝된 group() 메서드는 Illuminate\Routing\Router의 group() 메서드가 아닌 Illuminate\Routing\RouteRegistrar의 group() 메서드인 것이죠.

public function group($callback)

Illuminate\Routing\RouteRegistrar의 group() 메서드 시그너처가 위와 같기 때문에 클로저만 넘겨주면 됩니다.

권장사항

위의 내용을 종합해보면 라우트 그룹을 사용하는 방법이 두 가지인 셈입니다.

  1. Route 퍼사드에서 group() 메서드를 바로 호출하는 방법
  2. Route 퍼사드에서 middleware(), domain(), prefix(), name() 등의 메서드에 체이닝하여 group() 메서드를 호출하는 방법

저는 2번 방식을 권장합니다. 첫째, 1번은 메뉴얼에 안내되지 않는 사용법입니다. 둘째, 그룹을 묶는다는 것은 언제나 목적이 있을 것입니다. 따라서 위에 수정된 예제 3-10의 코드 처럼 빈 배열을 이용해서 그룹을 만드는 건 의미가 없습니다. 그룹을 묶는 목적에 따른 메서드를 모두 제공하고 있으니, 각 메서드를 활용해서 그룹을 만드는게 보기에도, 관리하기에도 더 나을 겁니다.

처음부터 제대로 배우는 라라벨을 번역 출간했습니다

2020년 12월 초에 출간됐는데 블로그에 이제껏 출간 소식 조차 공유를 안했었네요. ㄷㄷ

이제 얼추 한 달이 다 되어 가는데, 걱정했던 것보다는 좋은 평이 남고 있어서 다행스러워요.

혼자 뚝딱뚝딱 전자책을 만들 때는 몰랐는데, 출판사와 일해보니 책을 책 답게 만들기 위해 정말 많은 분들의 노력이 들어가더군요. 초고는 원료 수준이랄까요?

원래는 출간하고나서 스터디파이를 통해 스터디를 운영할까 했는데, 이제 더이상 스터디파이에서는 스터디를 운영하지 않는듯 하더군요. 좀 아쉽긴한데 뭔갈 또 준비하고 계시다고 하니 기대해봐야죠.

여튼 1년간 끙끙대던 일이 끝나서 후련하네요. 🙂

팩트풀니스

사내 독서 동아리 활동으로 읽은 첫 번째 책이다.

이 책에 왜 흥미가 생겼었는지는 기억이 잘 나지 않는다. SNS에서 지인이 추천을 했었고 오랜만에 인문 서적을 읽고 싶었다. 세상 사는데 도움이 1도 안되는 그런 책을 읽고 싶었는데, 결과는 그 반대였다. 위로를 받기도 하고 세상을 대하는 더 나은 방법을 얻기도 했다.

저자는 우리가 다양한 이유로 세상을 오해하고 있다고 한다. 책 서두에 간단한 퀴즈를 내는데, 나 역시 세상을 제대로 이해하지 못하고 있었다. 저자는 세상은 생각보다 더 나아지고 있는데 우리가 가진 세상에 대한 지식은 오래되어 업데이트가 필요하다고 한다.

책에는 미처 몰랐던 놀라운 사실들이 많이 담겨있다. 당연하다고 여겼던 것들을 보기좋게 부정당할 때마다 독서의 즐거움을 느낀다.

이 책은 대부분의 장을 저자의 경험담으로 시작한다. 주로 실수담이다. 덕분에 자칫 딱딱해질 수 있었던 책이 푸근해진 느낌이다. 수십년간의 경험이 한 권의 책에 한 가지 주제로 녹아들 수 있다니. 정말 멋있고 부러운 삶이다.

앞으로 1일 1식 라라벨은 xLY를 통해 발행합니다

1일 1식 라라벨의 지난 글을 보고 싶어하시는 신규 구독자분들이 계셔서 과거의 글들도 읽을 수 있도록 웹사이트를 하나 열었습니다.

웹사이트 이름은 xLY 입니다. 엑슬리라고 읽으시면 됩니다. URL은 https://xly.kr 입니다.

현재는 1일 1식 라라벨 전용 웹사이트이지만 장차 주기성있는(daiLY, weekLY, monthLY 등등) 유료 컨텐트 발행 플랫폼으로 확장할 포부를 가지고 있습니다.

간간히 이 블로그에 전체 공개로 발행하던 1일 1식 라라벨 컨텐트는 앞으로 xLY에서 읽으실 수 있습니다. 기존에는 무료 구독 옵션은 없었는데, xLY에서 무료 구독을 하시면 전체 공개 컨텐트를 메일로 보내드립니다. 많은 구독 부탁드려요~

[1일 1식 라라벨 47호] 라라벨 6.0 릴리즈!

1일 1식 라라벨 2019년 9월 구독자를 모집 중입니다. 여기에서 신청하실 수 있습니다.

라라벨 6.0이 릴리즈되었습니다! 이번 버전은 LTS 입니다. 직전 LTS는 5.5 였습니다. 버그 수정은 2021년 9월 3일까지, 보안 수정은 2022년 9월 3일까지 지원합니다.

시맨틱 버저닝

이번 버전에 들어서면서 가장 큰 변화라고 할 수 있는 건 역시 시맨틱 버저닝을 채택한 것이라고 할 수 있습니다. 이전까지 라라벨은 독자적인 버전 체계를 가지고 있었습니다. (참고, 라라벨은 시맨틱 버저닝을 사용하지 않는다 – 이현석의 우체통) 버전 넘버 x.y.z 중 x를 패러다임 변화, y를 메이저(하위호환성이 지켜지지 않을 수 있음), z를 마이너 변화로 관리해왔는데요, 6.0 버전부터는 x-메이저, y-마이너, z-버그패치가 됩니다. 전과달리 y까지는 하위호환성이 유지되니 안심하고 업데이트하시면 됩니다.

라라벨 Vapor 호환

6.0 Vapor와 호환이 됩니다. 오늘 모던 PHP 유저 그룹에서 Vapor 관련 발표를 하기로 되어있었어요. 6.0으로 업데이트해야 Vapor를 쓸 수 있는 줄 알고 부랴부랴 업데이트를 했는데, 해보니 5 버전에서도 사용 가능하더군요.

Ignition

어제 소개해드렸던 에러/예외 페이지 패키지 Ignition이 내장되어있습니다. composer.json 파일을 보면 이전 에러 페이지 패키지인 Whoops가 제거된걸 볼 수 있는데, 완전히 대체된건 아닙니다. Ignition이 Whoops에 의존한다는 것 같네요.

향상된 인가 리스폰스

지금까지는 권한 확인 결과를 확인하고 그 결과에 따라 다른 메시지를 보여주기가 어려웠습니다. 6 버전 부터는 Gate::inspect() 매서드로 쉽게 결과를 확인할 수 있고, 컨트롤러에서 인가 헬퍼 매서드를 써도 결과에 따라 메시지가 다르게 나타난다고 합니다.

잡 미들웨어

HTTP 리퀘스트는 미들웨어가 있었지만, 잡에는 미들웨어가 없었습니다. 특정 시간 동안 너무 많이 실행되는지 검사하는 등의 로직을 미들웨어로 빼서 잡의 handle() 매서드를 더욱 명료하게 유지할 수 있게 되었습니다.

레이지 컬렉션

제너레이터를 이용해서 더 적은 리소스를 사용하는 컬렉션인 레이지 컬렉션이 추가되었습니다. 며칠전 대량의 엘로퀀트 모델을 다루는 방법에서 소개했던 cursor() 매서드가 레이지 컬렉션을 반환하도록 변경되었습니다.

향상된 엘로퀀트 서브쿼리

조나단 리인잉크가 라라콘 US 2019에서 발표했던 내용이 6.0에 정식으로 포함되었습니다. 리인잉크가 관련하여 글을 쓴 것 같더군요. 조만간 공부해서 소개하도록 하겠습니다.

라라벨 UI

라라벨 기본 프론트 엔드 스캐폴드가 laravel/ui 라는 별도 패키지로 분리되었습니다. 이제 라라벨의 기본 스케폴딩은 부트스트랩도 Vue도 적용되지 않는다고 하네요. 패키지를 설치하고 간단한 아티즌 커맨드로 기존 스타일의 UI를 적용할 수 있다고 합니다.

마치며

뭐랄까 새로 추가된 기능들을 통해 더 강력하고 더 깔끔해진 느낌이네요. 앞으로 기회 되는대로 새로 추가된 기능을 하나씩 자세히 소개해보도록 하겠습니다.

1일 1식 라라벨 47호

2019년 9월 4일

1일 1식 라라벨 9월호 구독자 모집!

어쩌다 보니 벌써 8월이 하루 밖에 안남았네요. 늦게나마 9월호 구독자 모집을 시작합니다.

7,8월과 마찬가지로 9월 한 달간 매일 한 편씩 라라벨 관련 글을 메일로 보내드립니다. 주말과 휴일엔 쉽니다.

다행히 아직까지는 한 번도 펑크를 내지 않았어요. 날짜를 넘겨서 보내드린 날은 며칠 됩니다 ㅠ 8월호에는 아래와 같은 글들을 보내드렸습니다.

  • 클래스에 final을 선언해야할 때는 언제인가?
  • 라라벨 5.8.30 새기능
  • 라라벨 서비스 컨테이너 언제, 왜 쓰는가?
  • 라라벨 Vapor 비용 & 성능 최적화
  • 액션으로 리팩토링하기
  • 패키지스트 한국 미러
  • 라라벨 백업 패키지 spatie/laravel-backup
  • PHPUnit 실행 결과를 예쁘게, PHPUnit Pretty Result Printer
  • 라라벨 제너레이터로 프로젝트 시작하기
  • 라라벨 제너레이터 사용기 1
  • TailwindCSS용 온라인 코드 에디터 Tailwind.run()
  • 라라벨 시프트와 테스트 제너레이터 사용기 1편
  • 라라벨 시프트와 테스트 제너레이터 사용기 2편
  • 라라벨로 만든 애플리케이션을 자가진단 해보자
  • 라라벨 웹 팅커
  • 테스트 속도를 향상시키는 비법
  • 엘로퀀트 모델로 대량의 데이터 처리하기 chunk(), cursor(), each()
  • 여러분의 코드 품질은 어떤가요?
  • Policy 자동 적용
  • 파사드는 어떻게 동작하는가?

위와 같은 글들에 관심있으신 분들은 아래 링크로 이동해서 구독 신청해주세요.

지나간 글들을 읽을 수 있도록 준비중입니다. 아마 9월부터는 7~8월 글도 읽으실 수 있을 겁니다.

그럼 많은 구독과 공유 부탁드립니다~

[1일 1식 라라벨] 라라벨 Vapor

이 글은 2019년 7월 29일에 1일 1식 라라벨에 발행된 글입니다. 일부 시점이나 버전 정보가 블로그 발행시점과 다를 수 있습니다.

지난 주 라라콘에서 라라벨이 새로운 서비스를 소개했습니다. 바로 Vapor 입니다. “서버는 우리가 다 알아서 해줄게요, 여러분은 라라벨 애플리케이션에만 신경쓰세요”라고 이야기하는 것 같습니다. 매트 스타우퍼가 라이브 블로깅으로 정리한 라라벨 Vapor 소개(Introducing Laravel Vapor)와 모하메드 새드의 AWS 람다란 무엇이고, 라라벨 Vapor가 이를 어떻게 사용하는가(What is AWS Lambda, and how Laravel Vapor uses it)를 요약해서 소개하겠습니다.

동기

라라벨은 포지(Forge)라는 배포 서비스를 가지고 있습니다. 포지를 사용하면 AWS, DigitalOcean, Linode 같은 클라우드 서버에 애플리케이션을 쉽게 배포할 수 있습니다. 편리한 서비스이지만 사람들이 오토 스케일링 같은건 어떻게 해야하는지 문의했나봅니다. 이에 대해 라라벨팀은 포지에 오토스케일링 기능을 추가하는 대신 새로운 접근 방법을 택했습니다. 바로 서버리스입니다.

서버리스 (Serverless)

서버리스는 말그대로 서버가 없다는 뜻입니다. 하지만 정말로 서버가 없는건 아니죠. 실제로 어딘가에 서버가 존재는 하지만 나는 그 존재를 알 필요가 없다는 것입니다.

라라벨의 index.php 파일을 열어보면 아래 내용을 볼 수 있습니다. (전에 리퀘스트 라이프 사이클에서도 다뤘던 내용이죠! ^^)

$response = $kernel->handle(
  $request = Illuminate\Http\Request::capture()
);

$response->send();

애플리케이션에 리퀘스트를 보내면 Kernel::handle 메소드가 처리하고 브라우저에게 리스폰스를 되돌려줍니다. 그동안은 이를 위해 서버를 마련하고 어떤 요청이 들어오던 index.php를 실행하도록 준비하고 기다리고 있었습니다.

Kernel::hanle 메서드만 똑 떼어내서 어떤 서비스에 올려놓고, 메서드가 실행되는 횟수만큼만 비용을 낸다면 어떨까요? 서버에 배포하거나, 라이브러리를 업그레이드하거나, 저장공간을 관리하는데 전혀 신경안써도 됩니다. 단지 기능을 업로드하고 기능이 동작하는만큼만 돈을 내는 것이죠.

이게 기본적인 서버리스입니다.

AWS 람다(Lambda)

람다는 AWS의 FaaS(Function as a Service)입니다. 람다는 주로 마이크로서비스 아키텍처의 일부로 사용되며, 한 번에 한 가지 일을 처리합니다.

  • 이미지를 S3에 올리면 섬네일을 만든다.
  • 큐에 잡을 전송하면, 람다가 실행되고 잡을 처리한다.
  • HTTP 리퀘스트를 엔드포인트로 전송하면, 람다가 실행되고 응답을 생성한다.

이런 식입니다. 이는 일반적으로 애플리케이션을 애플리케이션을 여러개의 서로 다른 서비스로 쪼개고, 각 서비스는 개별 코드 베이스를 갖는 것을 의미합니다.

마이크로서비스는 장점이 많지만 여러 서비스를 엮는게 어렵습니다.

Vapor는 여러분의 라라벨 애플리케이션을 AWS 람다로 변환합니다. 람다를 실행한 이벤트에 따라 Vapor가 애플리케이션의 특정 기능을 수행해줍니다. 사용자가 엔드포인트를 방문하면 라우터로 보낸 후 응답을 되돌려주고, 잡이 추가되면 워커를 작동시키는 식입니다. 이런식으로 라라벨 애플리케이션 작성 방법은 그대로 유지한채 서버리스의 장점을 취할 수 있습니다. Vapor가 라라벨 애플리케이션을 서버리스로 변환하는데 필요한 모든 일을 해줍니다.

마치며

그냥 단순히 배포와 오토스케일링을 처리해주는 서비스인가?라고 생각했는데 라라벨을 서버리스로 변환해주고 편하게 관리할 수 있게 해주는 서비스였네요. 정말 엄청나네요! AWS 비용이 얼마나 나올지 가늠이 안되긴하는데 저는 서비스가 정식 오픈 하는대로 한 번 써볼까 합니다. Vapor 자체는 프로젝트 수에 상관없이 한달에 39$라서 크게 부담은 안되는 듯 합니다.

[1일 1식 라라벨] 라라콘 US 2019 발표자들

이 글은 2019년 7월 25일과 26일에 1일 1식 라라벨에 발행된 글입니다. 일부 시점이나 버전 정보가 블로그 발행시점과 다를 수 있습니다.

라라벨 진영의 가장 큰 행사인 LARACON US 2019가 오늘 시작됐습니다. 올해 8월에 라라벨 6가 나온다는 발표도 있었고 Vapor 라는 서버리스 플랫폼을 새로 출시했네요. 아직 자료나 동영상 등이 많이 공유되진 않고 있어서, 좀 더 자세히 알게되면 다시 공유하겠습니다. 대신 오늘은 LARACON US 2019 발표자들을 간단히 소개해볼까해요. 원래는 발표 주제도 공유하고 싶었는데, 이번 LARACON은 발표 제목이 공개되지 않았어요. 아쉽지만 어떤 인물들이 등장했는지만 알아보겠습니다. 인물이 꽤 많으니 컨펀런스 일정에 따라 첫째 날 둘째 날로 두 편에 나누어 쓰겠습니다.

LARACON US 2019 연사 Day 1

아담 와든 Adam Wathan

7월 20일자 1일 1식 라라벨에 등장했던 인물이군요. TailwindCSS를 만든 사람입니다. 작년 재작년 발표 모두 좋았는데, 올해 또 등판했네요. 홈페이지에서도 확인할 수 있겠지만 TailwindCSS 뿐만 아니라 라라벨과 뷰 관련 강좌와 도서도 많이 만들었습니다. Full Stack Radio라는 팟캐스트도 운영하고 있어요. 프론트엔드, 백엔드 모두 능통하고 발표까지 잘하는 난 사람이네요.

프릭 반 더 허르텐 Freek Van Der Herten


스파티 Spatie의 공동대표입니다. 스파티는 벨기에에 있는 웹 에이전시인데, 라라벨용 패키지를 엄청 많이 만들어 공개하고 있고, 구성원들로 하여금 지식 공유를 적극 권장하는 것으로 보입니다. 스파티의 패키지는 테일러 오트웰도 종종 트위터에서 언급하곤 합니다. 라라벨에 관심있는 사람이라면 스파티가 내놓은 패키지들이 뭐가 있는지 살펴보는게 도움이 될 것입니다. 프릭은 블로그를 통해 지식을 활발히 공유하고 있고, 뉴스레터도 발행하고 있습니다. 최근에 Oh Dear!라는 웹사이트 모니터링 서비스를 오픈하기도 했습니다.

바비 엘리트 바우만 Bobby Elite Bouwmann

이번 LARACON에서는 라라벨 디자인 패턴에 대해 발표했나봅니다. 이전 LARACON에서 발표했던 디자인 패턴 1.0 발표는 여기(슬라이드 쉐어유튜브)에서 볼 수 있습니다. markdownmail.com를 운영하고 있습니다. 공식 메뉴얼에 없는 숨겨진 기능들을 소개하는 라라벨 시크릿이라는 책을 쓰고 있다고 하네요.

제이슨 맥크레리 Jason McCreary

약간의 비용만 내면 내 프로젝트의 라라벨 버전을 올려주는 서비스인 라라벨 시프트를 만든 사람입니다. 자본주의 만세! 물론 사람이 해주는건 아니고 자동화되어있습니다. GettingGit과 BaseCode라는 강좌를 판매하고 있습니다. BaseCode는 읽기 좋은 코드를 작성하는 10가지 비법을 알려준다는데 저도 흥미가 가네요.

케이스 대미아니 Keith Damiani

타이튼 Tighten 소속 개발자입니다. 타이튼도 스파티와 마찬가지로 오픈소스 활동과 지식 공유 활동을 활발히 하는 에이전시입니다. 요즘에는 그래프 데이터베이스와 모바일 앱개발에 관심이 많다고 합니다. 이번 라라콘에서도 라라벨과 그래프 데이터베이스라는 주제로 발표를 하는 것 같네요.

카야 토마스 Kaya Thomas

명상앱을 만드는 Calm에 소속된 iOS 개발자입니다. 사이드 프로젝트로 We Read Too를 개발했습니다. We Read Too는 2014년에 런칭됐고, 2018년 2월에 애플 스토어에 피쳐드 된 바 있다고 하네요. 이번 행사에서는 풀 타임으로 일하면서 사이드 프로젝트를 런칭하고 운영하기라는 주제로 발표를 한 듯 합니다.

조나단 레이닝크 Jonathan Reinink

PHP를 쓸 땐 라라벨을 주력 프레임워크로 사용하는(라라벨 행사의 연사니 당연한 얘긴가요 ^^;) 웹 개발자입니다. Church Social이라는 서비스를 운영하고 있습니다. 오픈소스 활동로 Glide라는 이미지 조작 라이브러리와 Plates라는 템플릿 엔진을 만들었습니다. 그리고 아담 와든과 함께 TailwindCSS를 만들었네요! 요즘에는 서버 주도 SPA를 만드는 InertiaJS라는 자바스크립트 프레임워크를 만들고 있다고 합니다. 최근에 엘로퀀트 퍼포먼스 패턴이라는 비디오 강좌를 만들었는데, 이번 행사에서는 이와 관련된 발표를 했나봅니다. 발표를 들은 테일러 오트웰이 “엘로퀀트에 대해선 레이닝크가 나보다 낫다”고 했네요. 위에 등장했던 프리크 반 더 허르텐도 레이닝크가 블로그로 소개한 테크닉을 써봤더니 좋더라는 트윗을 올린걸로 봐선 확실히 실력이 좋고 엘로퀀트를 더 좋은 성능으로 사용하는 노하우가 있나봅니다.

저스틴 잭슨 Justin Jackson

팟캐스트 플랫폼 Transistor.fm을 창업했습니다. MegaMaker라는 부트스트래퍼(투자 받지 않고 개발해서 제품으로 소득을 올리는) 커뮤니티도 운영 중입니다. 개발자를 위한 마케팅(Marketing for Developers)과 Jolt라는 책을 썼습니다.

LARACON US 2019 연사 Day 2

콜린 디카를로 Colin Decarlo

Vehikl 이라는 웹 에이전시 소속 개발자입니다. 이번 행사에서 발표한 주제는 “나는 웹 개발에 필요한 모든 것을 트위터 타임라인에서 배웠다”였다고 하네요.

스티브 쇼거 Steve Schoger

스티브 쇼거는 디자이너로서 아담 와든과 함께 RefactoringUI를 저술했습니다. UI에 요긴하게 쓸 수 있는 디자인용 에셋인 Hero PatternsHeroiconsZondicons 프로젝트를 진행하고 있습니다. Hero Patterns와 Zondicons는 무료, Heroicons는 유료인거 같네요. 이번 행사 발표 주제는 비쥬얼 디자이너 처럼 생각하는 법이었네요.

에반 유 Evan You

VueJS의 창시자입니다. 구글에서 일하면서 만든 VueJS가 대히트를 쳐서 현재는 풀타임 오픈 소스 개발자로 생활하고 있습니다. Patreon에서 밝힌 바에 따르면 Patreon에서 한 달에 16,000달러(한화로 약 2,000만원)를 번다고 하네요. 라라콘의 단골 연사 중 한 명입니다. 2016년부터 올해까지 한 해도 빠지지 않고 발표를 한 것 같습니다. 이번 행사에서는 Vue v3.0에 어떤게 추가될 건지 발표한 것 같네요.

마르셀 포시오트 Marcel Pociot

라라벨 전문 개발사인 Beyond Code에서 매니징 및 개발자로 일하고 있고 PHP 챗봇 프레임워크인 BotMan을 만들었습니다. 최근에 자신의 라라벨용 패키지들의 총 다운로드 수가 1,000만이 넘었다고 합니다. 굉장하네요. 최근에 패키지 개발 방법 동영상 강좌을 출시했습니다. 이번 라라콘 발표도 패키지 개발 방법에 관한 내용이었던 것 같아요. 이 강좌는 현재 오픈 기념 40% 세일 중이라고 하네요.

칼렙 포르지오 Caleb Porzio

Livewire 개발자 입니다. Livewire는 라라벨용 풀스택 프레임워크인데, 순수 PHP를 쓰듯 간단하게 동적 프론트 엔드를 만들어 준다고 합니다. 이번 행사에서 공개한 것 같은데, 트위터를 통해서 느껴지는 반응이 심상치 않네요.

카트리나 트라예브스카 Katerina Trajchevska

원격 근무 개발자이자 개발자 채용 서비스 Adeva의 공동 창업자 입니다. Time Driven Development라는 제목으로 발표했네요.

크리스토프 럼펠 Christoph Rumpel

라라벨 코어 어드벤처의 저자입니다. 말그대로 라라벨의 코어를 파헤치는 동영상 강좌입니다. 원래는 무료였는데, 막상 해보니 시간과 에너지가 너무 많이 들어서 유료로 전환했다고 합니다. 현재는 라이프 사이클, 파사드, 엘로퀀트, 서비스 컨테이너를 다루는 컨텐츠가 준비되어 있고, 알림과 테스팅은 준비 중이네요. 이번 행사에서는 자신의 컨텐트인 라라벨 코어 어드벤처를 소개했나 봅니다. 라라벨 코어 어드벤처는 그 전에는 챗봇 관련 도서를 쓰고 강좌도 만들었다고 합니다.

드라이스 빈츠 Dries Vints

2018년 9월에 라라벨에 입사했습니다. http://laravel.io 를 관리한다고 하네요. 벨기에 엔트워프에 살고 Full Stack Belgium과 Full Stack Europe 이라는 모임을 주관한다고 합니다. 이번 행사에서는 EVENT SAUCING IN LARAVEL WITH EVENTSAUSE라는 주제로 발표를 했나 봅니다. 이벤트소스(EventSauce)는 프랭크 드 종(Frank de Jonge)이라는 개발자가 만든 PHP용 이벤트 소싱 라이브러리라고 하는데, 저한테는 아직 생소한 개념이네요. 공부해야겠어요 ㅠ 스파티의 프리크 반 더 허르텐이 이미 라라벨용 이벤트 소스 패키지도 내놨더군요. 암튼 새로 대두되는 주요 개념인것 같은 느낌입니다.

매트 스타우퍼 Matt Stauffer

타이튼의 기술 분야 리더입니다. Laravel Up & Running이라는 책(저와 익명의 공동 번역자가 함께 번역 중입니다. 한빛미디어를 통해 내년 초에 출간 예정이에요 ^^)의 저자이고 라라벨 팟캐스트5분 긱 쇼 등을 진행하고 있습니다. 라라벨 뉴스를 발행하고 있기도 하고요. 이번 행사에서 Onramp라는 학습 가이드를 소개한 듯 합니다. 살짝 봤는데 좋네요. 컨텐츠가 영어인게 아쉽습니다.

이상으로 라라콘 US 2019 2일차 연사를 모두 소개했습니다. 많은 분들이 현업에 종사하기도 하지만 오픈 소스 활동과 지식/정보 사업을 주로 하는 분들도 많아서 부럽네요. 한국도 오픈소스 활동만으로, 혹은 컨텐트 생산 및 지식 전달 활동만으로도 잘 먹고 잘 살 수 있는 나라가 되면 좋겠어요. 여튼 화이팅 하는 걸로!

클린 아키텍처 인 PHP를 번역 출간했습니다

다른 언어들에 비해 유독 PHP는 중급자용 서적을 찾아보기가 어렵습니다. PHP가 워낙 쉬운 언어, 간단한 웹사이트 만들 때 쓰는 것이라는 이미지가 있기 때문인지, 아니면 중급자용 서적을 출간했다가 크게 실패를 해서인지는 모르겠습니다.

하지만 다른 언어들이 발달하는 만큼 PHP도 발전했고, 단순한 개인 홈페이지 뿐만 아니라 엔터프라이즈급 애플리케이션을 만드는데도 쓰입니다.

실제로 PHP로 자체 서비스를 운영하는 곳들은 대규모 처리, 대형 애플리케이션을 다룰 줄 아는 개발자들을 필요로 합니다. 그래서 PHP로 프로그래밍을 입문하는 사람들도 단순히 PHP를 다루는 방법을 익히는데 그치지 않고 더 좋은 소프트웨어를 만드는 방법을 배워야한다고 생각합니다.

그래서 현직 팀장들이 신입이 갖췄으면 하는 역량을 위주로 정리한 “바쁜 팀장님 대신 알려주는 신입 PHP 개발자 안내서”를 쓰기도 했습니다. “바쁜..”은 아키텍처, 디자인 패턴, 객체지향 프로그래밍 등은 다루지 않고 있어서 다소 아쉬운 마음이 있었어요. 그러던 와중에 유익하게 읽었던 클린 아키텍처 인 PHP를 번역 출판할 기회를 얻게되어 즐거운 마음으로 번역에 도전했습니다.

처음해보는 번역이라 생각보다 힘들었습니다 ㅠ 모쪼록 더 나은 애플리케이션을 작성하는데 관심있는 모든 PHP 개발자 여러분들께 조금이나마 도움이 되길 바랍니다.

아래 구매링크에서 전체 목차와 샘플 챕터를 보실 수 있습니다. 많은 관심과 정보 공유 부탁드려요 ^^

구매 링크 https://leanpub.com/cleanphp-korean

감사합니다!

[1일 1식 라라벨] ERD를 그려주는 Laravel ER Diagram Generator

이 글은 2019년 7월 15일에 1일 1식 라라벨에 발행된 글입니다. 일부 시점이나 버전 정보가 블로그 발행시점과 다를 수 있습니다. 8월호 구독자를 모집하고 있습니다. 월 1만원으로 최신 라라벨 소식을 받아보세요.

충분한 여유를 가지고 프로젝트를 진행한다면 코드를 작성하기 전에 설계도 하고, ERD(Entity Relation Diagram)도 그리고 할 것이다. 하지만 세상은 언제나 나에게 호의적이지만은 않다. 사전에 계획 문서를 충분히 작성할 시간이 부족한 프로젝트를 맡게 될 수도 있고, 처음엔 그리 복잡하지도 않고 혼자 진행해서 문서를 만들지 않고 진행했을 수도 있다. 그런데 이후에 클라이언트가 문서를 요구하거나, 혹은 동료가 더 생겨서 코드를 빠르게 파악하는데 도움이 되는 문서가 필요해지는 경우가 있다. Laravel ER Diagram Generator는 이런 경우에 요긴하게 쓸 수 있는 패키지이다.

Laravel ER Diagram Generator는 모델 파일에 정의된 관계를 분석해서 ERD를 생성한다. 다음은 Laravel ER Diagram Generator로 생성한 Laravel.io의 ERD이다.(출처:  공식 저장소)

설치

우선 PHP 7.1 이상이 필요하고, graphviz가 설치되어 있어야 한다.

brew install graphviz

홈스테드

sudo apt-get install graphviz

윈도우 환경이면 공식 웹사이트에서 다운로드 한다.

패키지는 컴포저로 설치한다.

composer require beyondcode/laravel-er-diagram-generator --dev

개발에만 필요하고 프로덕션 환경에는 필요 없다. --dev 옵션을 잊지 말자.

사용

아티즌 커맨드로 사용한다.

php artisan generate:erd

옵션과 커스텀 설정은 저장소 문서를 참고하자.

소감

트위터에 코드를 먼저 짜고 분석을 나중에 하냐는 조롱조의 글도 있다. 하지만 앞서 언급한 것 처럼 내 손에 넘어오는 시점에 어떠한 문서도 없이 코드만 달랑 넘어오는 경우가 분명히 있고, 이럴 때는 코드를 기반으로 문서를 만들어주는 도구가 유용하게 쓰일 수 있다. 실무적인 용도 외에 학습용으로도 꽤 유용할 수 있다. 타인의 코드로 학습하기 때문에 코드에서 부터 분석을 시작할 수 밖에 없기 때문이다.

조금 아쉬운 점은 엘로쿼트 모델을 상속받은 엔티티만이 분석 대상에 포함된다는 점이다. 도메인 주도 개발을 지향하거나, 클린 아키텍처를 지향하는 경우 라라벨에 의존하지 않는 도메인 모델과 서비스를 핵심으로 삼을 수도 있는데, 이러면 이 패키지로는 분석이 불가능하다.