티스토리 뷰
Laravel 의 새로운 major 버전인 5.6 버전이 한국시간 2018-02-08 새벽 0시 36분에 Release 되었습니다. 이번 버전에는 어떠한 변경사항들이 있는지 살펴보도록 하겠습니다. 모든 변경사항은 changelog(Github) 를 참고하시기 바랍니다.
또한 5.6 버전으로 업데이트를 하실 경우 Laravel 공식 홈페이지에 있는 마이그레이션 가이드를 참고하시기 바랍니다.
PHP 지원 버전 변경
Laravel 5.6 버전부터는 PHP 7.1.3 버전 이상만 지원하도록 변경되었습니다. 지난 Laravel 5.5 버전부터 PHP 7 버전 이상부터 지원하도록 변경되었으며, 버전 변경 이유는 뒤에 소개하겠지만 의존하는 sympony 프레임워크의 버전업데이트로 발생한듯 합니다.
의존성 패키지 변화
Laravel 프레임워크는 여러 패키지 의존하여 만들어졌습니다.
- Symfony ~4.0
대표적인 의존성 패키지로 Symfony 프레임워크가 있습니다. Laravel 에서 사용하는 Symfony 버전이 ~4.0 으로 변경되었습니다. 이러한 이유로 Laravel 5.6 으로 마이그레이션을 하실 때 프로젝트에서 Symfony 프레임워크를 직접 포함시켜 사용하고 있다면 버전을 변경해야합니다. Symfony 프레임워크 4.* 의 자세한 변경사항은 링크에서 확인가능합니다.
- PHPUnit ~7.0
PHPUnit 은 프레임워크에 상관없이 많은 프로젝트에서 테스트를 위해 사용하고 있습니다. Laravel 5.6 부터는 phpunit ~7.0 버전을 사용합니다.
- cron-expression ~2.0
cron-expression 은 PHP 에서 Crontab 설정을 읽어 이전에 실행한 시간과 다음에 실행될 시간을 계산하여 Cron의 실행여부 등을 판단 할 수 있도록 도와주는 패키지입니다. Laravel 에서 사용되던 cron-expression 이 1.* -> 2.* 으로 변경되었습니다.
그외에 Laravel 에서 관리하는 패키지들의 버전 변경사항이 아래와 같이 발생되었습니다.
- Dusk (~3.0 로 업그레이드)
- Passport (~5.0 로 업그레이드)
- Scout (~4.0 로 업그레이드)
Artisan Command
Laravel 에서 제공되는 Artisan 명령어에도 일부 변경사항이 있습니다.
- optimize 커맨드 삭제
아래의 그림처럼 Laravel 5.4 까지 존재하던 optimize 커맨드가 5.5 에서 deprecated 되었으며, 5.6 에서 완전히 삭제되었습니다.
만약 위와 같이 composer.json 에 php artisan optimize 명령어가 포함되어 있으면 삭제를 하셔야합니다.
- make:controller 커맨드에 --api 옵션 추가
controller 생성 커맨드에 --api 옵션이 추가되었습니다. 이전에 사용되던 --resource 옵션 대신 생겼으며, 해당 옵션으로 생성시 아래와 같이 controller가 생성됩니다.
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
class ApiController extends Controller
{
/**
* Display a listing of the resource.
*
* @return \Illuminate\Http\Response
*/
public function index()
{
//
}
/**
* Store a newly created resource in storage.
*
* @param \Illuminate\Http\Request $request
* @return \Illuminate\Http\Response
*/
public function store(Request $request)
{
//
}
/**
* Display the specified resource.
*
* @param int $id
* @return \Illuminate\Http\Response
*/
public function show($id)
{
//
}
/**
* Update the specified resource in storage.
*
* @param \Illuminate\Http\Request $request
* @param int $id
* @return \Illuminate\Http\Response
*/
public function update(Request $request, $id)
{
//
}
/**
* Remove the specified resource from storage.
*
* @param int $id
* @return \Illuminate\Http\Response
*/
public function destroy($id)
{
//
}
}
Blade
Blade 는 라라벨에서 제공되는 View 용 template 입니다. Blade 는 총 3가지의 변경사항 있습니다.
- @csrf / @method directive 추가
<form>
{{ csrf_field() }}
{{ method_field('PUT') }}
<!-- ... -->
</form>
<form>
@method('put')
@csrf
<!-- ... -->
</form>
- component aliases 추가
Blade::component('components.alert', 'alert');
@component('alert')
You are not allowed to access this resource!
@endcomponent
// 혹은 component 안에 slot 이 없는 경우는 아래와 같이 directive로 사용이 가능합니다.
@alert
You are not allowed to access this resource!
@endalert
- double_encode 기본값 true 로 변경
<?php
namespace App\Providers;
use Illuminate\Support\Facades\Blade;
use Illuminate\Support\ServiceProvider;
class AppServiceProvider extends ServiceProvider
{
/**
* Bootstrap any application services.
*
* @return void
*/
public function boot()
{
Blade::withoutDoubleEncoding();
}
}
Logging
이번 Laravel 5.6 변경사항 중 가장 큰 변경사항이라고 생각듭니다. laravel/framework 에서 Log 디렉토리를 살펴보면 아래와 같이 버전간의 차이점이 존재합니다.
5.6
- config/logging.php 추가
Laravel 5.5 까지 log에 대한 설정은 config/app.php 위치에 있는 log 와 log_level 설정뿐이였습니다. Laravel 5.6 부터는 config/logging.php 파일로 별도로 설정하도록 변경되었습니다. logging.php 파일은 기본적으로 다음과 같습니다.
- Illuminate\Log\Writer 클래스 변경
Illuminate\Log\Writer 클래스가 Illuminate\Log\Logger 클래스로 변경되었습니다. 만약 기존에 Writer 클래스를 Type Hint로 사용하고 있었다면 Psr\Log\LoggerInterface 클래스로 변경하셔야합니다.
- Illuminate\Contracts\Logging\Log Interface 제거
Illuminate\Contracts\Logging\Log Interface 가 제거되었습니다. 만약 기존에 Log Interface 를 Type Hint 로 사용하고 있었다면, Psr\Log\LoggerInterface 클래스로 변경하셔야합니다.
Argon2i 암호 Hash 기능 추가
Argon2 은 2015 년 PHC(Password Hashing Competition) 우승 알고리즘입니다. Argon2 은 아래의 3가지 버전이 존재한다고 합니다.
- Argon2d : GPU 크래킹 공격에 초첨을 맞춘 버전입니다.
- Argon2i : 측면 채널 공격에 저항 할 수 있도록 최적화되어 있습니다.
- Argon2id : Argon2d 와 Argon2i 의 하이브리드 버전입니다.
2017 년 11월 Release 된 PHP 7.2 에 Argon2d 와 Argon2i 가 추가되었으나, Laravel 5.6 에서는 Argon2d 가 Password Hash 기능으로는 적합하지 않아 Argon2i 만 Password Hash 기능으로 추가되었다고 합니다.
Argon2 Hash 를 사용할려면 새로 추가된 config/hashing.php 에서 설정을 변경하시면 됩니다.
그외의 변경사항들
그 외에 여러가지 변경사항이 존재합니다. 자세한 사항은 Laravel CHANGELOG 와 Laravel 5.6 Upgrade Guide 그리고 Laravel News 에서 확인 가능합니다.
'PHP > Laravel' 카테고리의 다른 글
[ Docker ] Laradock 프로젝트를 이용하여 Laravel 로컬 개발 환경 구축 (0) | 2017.12.21 |
---|---|
[ laravel ] laravel 5.5에서 변경되는 사항 정리 (0) | 2017.06.06 |
[ PHP ] Laravel 5.4 Release (Laravel 5.4에서 변경점) (0) | 2017.01.25 |