-
PHP에서 symlink()를 이용해 lock 구현하기
PHP에서 외부 Extensions 없이 간단히 lock을 구현하고자 할 때 file을 이용하는 경우가 많다(file에 대한 읽기/쓰기 lock을 말하는 것이 아니다). 예를들어 어떤 프로세스가 중첩되어 실행되는 것을 막기 위한 lock이 필요할 수 있다. 나의 경우는 Laravel의 Queue를 사용하면서 Daemon을 동시에 여러개를 띄운 상황에서 특정 작업의 중첩을 막기 위해 필요했다. Job에 대한 중복 실행은 Laravel의 Queue가 DB lock을 이용해 자체적으로 처리한다. 하지만 나는 Job의 중복 실행을 막는 것
-
PhpStorm에서 부분적으로 코드 포멧팅(code formatting) disable 하기
PhpStorm을 사용하면서 자주 이용하는 기능 중 하나가 code formatting 기능이다. 코드의 가독성을 높이고 code style을 유지하는데 도움이 되기 때문이다. 이 기능을 사용하면서 항상 불편했던 것 중 하나가 부분적으로 code formatting을 제외할 수 없다는 것이었다. 그런데 알고 보니 이미 부분적으로 code formatting을 제외하는 기능이 존재했다. PhpStorm 중 2016.x 와 2017.x 기준으로 Preferences > Editor > Code Style > Formatter Contr
-
laravel(또는 lumen) package 에서 schedule 추가
laravel을 사용하는 프로젝트에서 schedule 처리는 Task Scheduling에 안내되어 있는 것처럼 \App\Console\Kernel의 schedule(Schedule $schedule) 메서드 내에서 정의해서 사용한다. laravel 기반 프로젝트에 추가한 package(module)에서 직접 schedule을 추가하고 싶다면 어떻게 해야 할까? 이 부분에 대해서는 메뉴얼 상에 안내된 내용이 없다. 하지만 "How to schedule Artisan commands in a package?" 글을 참고하면 아래와 같
-
라라벨(laravel) log 파일 권한 변경
laravel 에서는 기본적으로 오류 로그를 "storage/logs"에 저장한다. 별다른 설정이 없다면 해당 경로에 실행 프로세스의 권한으로 로그 파일이 저장되는데 이것이 문제가 되는 경우가 있다. 예를들어 web server는 nobody 권한을 사용하고 crontab의 경우 root를 사용한다고 가정하다. crontab에 의해서 실행된 laravel 프로세스에서 오류가 발생하여 로그 파일이 생성 되었다면 이 파일의 권한은 기본적으로 root permission 에 644(-rw-r--r--)로 저장된다(서버 설정에 따라 다소
-
preg_replace()의 치환 문자열에서 이름이 지정된 서브 패턴의 역 참조 사용하기
preg_replace()는 이름이 지정된 서브 패턴에 대한 역 참조(named backreferences)를 지원하지 않는다. 일단 일반적인 역 참조를 사용하는 방법에 대한 예시를 보자. <?php $string = 'user/foo'; echo preg_replace('/^user\\/(?P<id>[^\\/]+)$/', 'user/profile/\\1', $string); // user/profile/foo 위의 예시에서 치환 문자열의 \\1 대신에 패턴에서 지정된 이름("id")을 사용하고자 한다고 가정하자. <?php $st