Laravel 마이그레이션 작성시 index 존재 여부 확인하는 방법

Laravel에 테이블이나 컬럼이 존재하는지 확인하는 메소드는 있는데 index 존재 여부를 확인하는 메소드는 지원하지 않아서 다소 아쉬운 면이 있었습니다. 찾아보니 doctrine schema manager 를 사용하면 확인이 가능하더군요. Laravel로 마이그레이션 작성해보신 분들은 아래 예제 코드 보시면 바로 이해가 되실거에요. 아마 doctrine/dbal 패키지를 설치가 필요할 거에요.(확인해보진 않았습니다 ^^ 어차피 renameColumn 하려면 필요하니까 걍 설치 고고)

Schema::table('articles', function($table)
{
    $conn = Schema::getConnection();
    $dbSchemaManager = $conn->getDoctrineSchemaManager();
    $doctrineTable = $dbSchemaManager->listTableDetails('articles');

    if($doctrineTable->hasIndex('title')){
        $table->dropIndex('title');
    }
});

 

leaderboard-728x90

 

Laravel 컨트롤러 테스트 작성 요령

테스트를 작성할 때 무엇을 테스트 할 것인지를 결정하는 것이 참 어려운 것 같습니다. Jeffrey Way 의 조언을 따르니 컨트롤러 테스트 작성에 꽤 도움이 되네요.

“Controller tests should verify responses, ensure that the correct database access methods are triggered, and assert that the appropriate instance variables are sent to the view.”

다음에서 발췌: JeffreyWay. ‘Laravel Testing Decoded.’ iBooks.

  1.  response 를 확인한다.
    1. $this->assertResponseIsOk() 혹은 $this->assertRedirectedTo(‘/PATH’) 등으로 확인할 수 있습니다.
  2. 원하는 모델의 메소드가 작동되었는지 확인한다.
    1. Mockery 의 shouldReceive 로 확인할 수 있습니다.
  3. 뷰에 데이터를 잘 넘겼는지 확인한다.
    1. $this->assertViewHas(‘변수명’) 으로 확인할 수 있습니다.

leaderboard-728x90

 

Laravel 테스트 작성중 POST로 리퀘스트 전송시 응답으로 200이 아닌 500이 온다면

csrf 토큰 때문입니다.

app/Http/Middleware/VerifyCsrfToken.php 를

public function handle($request, Closure $next)
{
    if ('testing' !== app()->environment()){
        return parent::handle($request, $next);
    }

    return $next($request);
}

이렇게 수정해서 test 환경에서는 토큰을 확인하지 않도록 해주는 방법이 있습니다.

다른 더 좋은 방법들도 있을거 같아요. 좀 찾아봐야겠습니다. ㅎㅎ
 

leaderboard-728x90

 

Envato

To Help People Learn and Earn Online.
사람들이 온라인으로 배우고, 돈 버는 것을 돕는 것.

조사시점 : 2015.05.21
 

기업들의 비전과 미션을 수집하고 있습니다. 도움 주실 분들은 댓글이나 이메일 smartbosslee@gmail.com 혹은 트위터 @smartbosslee 로 연락주세요. 제보도 받습니다 🙂

Lumen 에서 timezone 을 서울로 바꾸는 방법

.env 파일을 사용하는 경우에는 .env 파일에 다음 내용을 한 줄 추가합니다.

APP_TIMEZONE=Asia/Seoul

.env 파일을 사용하지 않는 경우에는 시간 관련 기능을 사용하는 곳 상단에 아래의 내용을 한 줄 추가합니다.

date_default_timezone_set(env('APP_TIMEZONE', 'Asia/Seoul'));

 

leaderboard-728x90

 

조만간 기성 연예인들의 개인 방송 시대가 열릴 것 같다

몇 해 전부터 케이블 방송에서 빅뱅TV와 같은 시도가 이어져왔다.

132112

아프리카TV와 유튜브를 통한 개인 방송의 수익성이 검증되었다. 이에 개인 방송국으로 유명세를 날리던 이들이 스스로 기획사를 설립하고 있다.

대도서관

개인 방송 컨셉을 도입한 지상파 프로그램 마이 리틀 텔레비전이 인기를 끌고 있다.

1954315240_gsBUrt39_EBA788EC9DB4_EBA6ACED8B80_ED8594EBA088EBB984ECA084_EBB0B1ECA285EC9B905BEC95BCEC8B9DEC9D80_EB9E9CEC84A0EC9D84_ED8380EAB3A05D_E02_x264-aiden0.mp4_20150210_224651.906

조만간, 연예기획사 소속 연예인들의 개인 방송이(정말로 개인적으로 하는게 아닌 기획사가 주도하는) 본격적으로 시도될 것 같다.

 

oak-online-alter-table를 이용하여 중단 없이 MySQL 테이블 변경하기

MySQL에서 테이블을 변경하면 테이블이 잠긴다. 그리고 데이터양에 따라 테이블 변경에 걸리는 시간이 달라진다. 그래서 데이터양이 많아지면 테이블을 변경시 서비스가 중단되는 경우가 발생할 수 있다.

중단 없이 MySQL 테이블을 변경할 수 있도록 해주는 툴로 아래의 것들이 있다.
openark-kit의 oak-online-alter-table
Percona Toolkit의 pt-online-schema-change
Facebook이 만든 online schema change for MySQL

이 중 oak-online-alter-table 의 사용 방법을 간단히 알아본다. 환경은 CentOS 6.4 이다.

설치

openark-kit을 사용하기 위해서는 2.3 버전 이상의 python과 python-mysql 모듈이 설치되어 있어야 한다.

python 설치

yum install python

python-mysql 모듈 설치

yum install MySQL-python

openark kit 설치
https://code.google.com/p/openarkkit/ 에서 최신 버전을 다운로드 받는다.

wget https://openarkkit.googlecode.com/files/openark-kit-###-1.noarch.rpm
sudo rpm -i openark-kit-###-1.noarch.rpm

실행

world 데이터베이스의 City 테이블에 Population 컬럼에 인덱스를 거는 경우.

oak-online-alter-table --database=world --table=City --alter="ADD KEY(Population)"

기본적으로 –user, –password, –socket, –port 옵션 값을 지정해줄 필요가 있다. 커맨드에 직접 추가해주거나 설정 파일을 만들어서 할 수 있다.
파일로 하는 경우에는 아래의 형식에 맞추어 파일을 작성하고 –defaults-file 옵션에 해당 파일의 경로를 지정해주면 된다.

#config.cfg
[client]
user=test
password=testpw
socket=/var/lib/mysql/mysql.sock
port=3306
oak-online-alter-table --database=world --table=City --alter="ADD KEY(Population)" --defaults-file=config.cfg

파일로 하지 않는 경우엔 다음과 같이 해주면 된다.

oak-online-alter-table --database=world --table=City --alter="ADD KEY(Population)" --user=test --password=testpw --socket=/var/lib/mysql/mysql.sock

 

leaderboard-728x90

 

오퍼레이터

인터넷으로 해결하지 못하는 커머스의 90% 해결하는 것. 지향하는 목표는 모바일, 메세징과 온디맨드 경제의 컨버전스.

– 우버 공동창업자의 야심작 OPERATOR, 2015. 04. 23

 

기업들의 비전과 미션을 수집하고 있습니다. 도움 주실 분들은 댓글이나 이메일 smartbosslee@gmail.com 혹은 트위터 @smartbosslee 로 연락주세요. 제보도 받습니다 🙂