일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- 일러스트
- monolog
- 네오커머스
- 월회고
- Dell
- X보이스
- X라소프트
- 델코리아
- ENA
- xps
- 디-버그
- xps15 9550
- 국가번호목록 #전화번호국가코드 #퇴근을원합니다
- laravel
- Codeigniter
- XPS15
- 디버그
- 어도비
- SENTRY
- 개발기록
- 팬마음
- 포토샵
- php
- 고해상도
- codeigniter3
- aws
- 포토샵 고해상도
- ami
- 일러스트 고해상도
- Today
- Total
Good Day
AWS-SDK-PHP-Laravel을 활용한 Laravel 5 + DynamoDB Session 구성 본문
FROM.Techigniter (원문Link)
어째 Laravel과 DynamoDB는 둘다 유명한데 이걸 같이 쓰는 사람들이 별로 없나보다.
문서 찾는데 정말 고생했다.(영어로 찾았으면 금방나왔겠지만)
사실 Laravel은 새로운 프로젝트에 처음부터 쓸 생각이 아니었으나,
레퍼런스 문서만 보고 일단 써보자 싶어서 이리저리 알아보고 있었다.
겸사겸사해서 DB도 열렬하게 검토하던 중 RDBMS 쓰지 말고 그냥 미친척 NoSQL만 써보자! 라는 생각이 들어 DynamoDB로 낙점.
문제는 두개 다 처음하는거라 완전 무개념 상태였다. 어찌저찌 aws-sdk-php-laravel을 찾아서 세팅하고 DynamoDB Session 세팅하려는데 이게 제대로 안되서 엄청 고생하다가 결국 이 문서를 찾았다.
대부분 그냥 이해되는대로 의역 했고, 실제로 작동하도록 몇가지 내용을 추가했으니 원문만 보고 싶으시면 원문링크(우측상단)을 눌러서 봐주세요.
이 튜토리얼 통해 여러분은 쉽게 DynamoDB Session드라이버를 Laravel 5버전에서 사용하는 방법을 익힐 수 있습니다.
1. Aws Service Provider for Laravel 설치하기
먼저 Aws Service Provider를 당신의 프로젝트에 설치해야 합니다.
1) 아래 정보를 composer.json 파일에 추가해주세요.
※ 아마 대부분 이미 require가 추가되어 있을 텐데 그러면 그냥 끝에 이어서 내용을 넣어주세요.
{
"require": {
"aws/aws-sdk-php-laravel": "~3.0"
}
}
2) composer를 써서 업데이트 실행해주면 자동으로 aws sdk도 설치됩니다.
※ 저는 composer를 path에 추가했으므로 아래있는 composer update로 업데이트 했습니다.
php composer.phar update
or
composer update
3) config/app.php파일에서 provider key를 찾아 끝에 AWS Service Provider를 추가해줍니다.
'providers' => [
/*
* Laravel Framework Service Providers...
*/
Illuminate\Foundation\Providers\ArtisanServiceProvider::class,
...
/*
AWS Service Provider
*/
Aws\Laravel\AwsServiceProvider::class,
],
4) config/app.php파일에서 aliases key를 찾아 끝에 AWS facade alias를 추가해줍니다.
'aliases' => [
'App' => Illuminate\Support\Facades\App::class,
'Artisan' => Illuminate\Support\Facades\Artisan::class,
...
/*
AWS facade alias
*/
'AWS' => Aws\Laravel\AwsFacade::class,
],
5) artisan을 사용해 config파일을 생성해줍니다.
php artisan vendor:publish
6) 생성된 config/aws.php 파일에 AWS 정보를 기입해줍니다.
return [
'credentials' => [
'key' => 'YOUR_AWS_ACCESS_KEY_ID',
'secret' => 'YOUR_AWS_SECRET_ACCESS_KEY',
],
'region' => 'us-west-2',
'version' => 'latest',
// You can override settings for specific services
'DynamoDb' => [
'version' => 'latest'
],
];
※ IAM에서 사용자 등록하면 키랑 시크릿키 나옵니다.
※ region은 코드가 따로 있으니 표1 참고해주세요.
코드 | 이름 |
---|---|
| 아시아 태평양(도쿄) |
| 아시아 태평양(싱가포르) |
| 아시아 태평양(시드니) |
| EU(프랑크푸르트) |
| EU(아일랜드) |
| 남아메리카(상파울루) |
| US East (N. Virginia) |
| 미국 서부(캘리포니아 북부 지역) |
| 미국 서부(오레곤) |
< 표1. resion 코드 리스트 (link)>
2. DynamoDB Service Provider 생성하기
1) artisan으로 provider를 생성합니다.
php artisan make:provider DynamoSessionServiceProvider
위의 명령어를 실행하면 app/Providers 폴더에 DynamoSessionServiceProvider.php 파일이 생성됩니다.
2) 아래 코드를 namespace 이후에 덮어써줍니다.
use Illuminate\Support\ServiceProvider;
use Aws\DynamoDb\DynamoDbClient;
use Aws\DynamoDb\Session\SessionHandler;
use Session;
class DynamoSessionServiceProvider extends ServiceProvider {
//기본 리전을 설정한다(config 값이 없을 때 들어감.)
const DEFAULT_REGION = 'ap-northeast-1';
// Make sure that this service provider always boots
protected $defer = false;
/**
* Bootstrap the application services.
*
* @return void
*/
public function boot()
{
//
}
/**
* Register the application services.
*
* @return void
*/
public function register()
{
Session::extend('dynamo', function ($app) {
// Get a shortcut to config data
$cfg = $app['config']->get('session');
$aws_cfg = $app['config']->get('aws');
// Do the real work of hooking up Dynamo as session handler
$dynamoDb = DynamoDbClient::factory([
'region' => (isset($aws_cfg['region']) ? $aws_cfg['region'] : self::DEFAULT_REGION),
'version' => (isset($aws_cfg['DynamoDb']['version']) ? $aws_cfg['DynamoDb']['version'] : 'latest'),
'credentials' => $aws_cfg['credentials']
]);
$sessionHandler = $dynamoDb->registerSessionHandler([
'table_name' => $cfg['table'],
'hash_key' => 'id',
'session_lifetime' => 60 * $cfg['lifetime'], // minutes to seconds
'consistent_read' => true,
'locking_strategy' => null,
'automatic_gc' => true,
'gc_batch_size' => 25,
'max_lock_wait_time' => 10,
'min_lock_retry_microtime' => 10000,
'max_lock_retry_microtime' => 50000
]);
// Set the start of the session id to the cookie name - optional
$sessionHandler->open('', $cfg['cookie']);
return $sessionHandler;
});
}
}
3) config/app.php파일에서 provider key를 찾아 끝에 생성한 provider를 추가해줍니다.
'providers' => [
/*
* Laravel Framework Service Providers...
*/
...
Illuminate\View\ViewServiceProvider::class,
/*
AWS Service Provider
*/
Aws\Laravel\AwsServiceProvider::class,
/*
* Application Service Providers...
*/
...
YOUR_APP\Providers\RouteServiceProvider::class,
// for DynamoDB SESSION
YOUR_APP\Providers\DynamoSessionServiceProvider::class,
],
4) Session 설정 값을 업데이트 합니다.
config/session.php
'driver' => 'dynamo',
'table' => 'sessions', <- dynamoDB에 생성해놓은 테이블명
3. 축하합니다! 사용할 준비가 끝났습니다.
간단한 테스트 코드를 삽입합니다.
1) app/Http/routes.php에 아래 라우팅 주소 2개를 추가합니다.
Route::get('/s', function () {
Session::put('key', 'hello world!');
return 'save';
});
Route::get('/l', function () {
$get = Session::get('key') == '' ? 'false' : Session::get('key');
return $get;
});
2) 주소로 접근해서 확인합니다.
www.your-domain.com/s로 접근 후 www.your-domain.com/l로 접근했을 때 hello world!가 출력되는지 확인합니다.
※ 주의사항
1. IAM Role은 잘 체크해주세요
2. 특정폴더에 쓰기 권한 문제 발생에 주의하세요
끝.
'개발 > Laravel' 카테고리의 다른 글
AWS AMI + PHP56 + HTTPD24 + Laravel 초기 세팅 (0) | 2015.12.07 |
---|