[번역] 스팸과 싸우는 5가지 방법

원본글 : 5 Ways of Battling Form Spam 만약 여러분이 웹 어플리케이션을 만든다면, 스팸 봇들에게 점렴당하는 것들을 막을순 없을것입니다. 내 프로젝트 중 하나는 회원가입 폼 부분을 당해서 17,000여개의 가짜 유저을 정리하는 것은 정말 힘들었습니다.이를 해결 하기위해 스팸 봇과 싸우는 방법을 트위터에 물어보았고, 많은 반응과 좋은 아이디어들을 얻을 수 있었습니다.나는 언급된 방법들을 공유해 만약 여러분이 공격 …

PHP 7.4 preload

PHP 7.4 마지막 글 업데이트: 2019 12 09 2019년 11월 29일에 php 7.4가 릴리즈 되었다.여러가지 기능이 업데이트 되었고 기다렸던 property type도 추가되었는데가장 눈에 띄이는 기능은 preload 기능이였다. Preload? PHP는 기본적으로 CGI 형식으로 동작합니다. 매번 페이지를 읽을 때마다 PHP는 실행하기 전에 모든 코드를 재컴파일합니다. 심지어 Python의 장난감 프레임워크의 개발 서버도 이런 식으로 돌지는 않습니다. PHP: 잘못된 …

[PHP] Multiple for(each), while escape

TL;TR; PHP는 중접된 반복문을 원하는 개수만큼 탈출할 수 있는,break 2;와 continue 2;를 지원한다. 다중 for문 PHP가 아니더라도 어디에든 다중 for문을 사용하는 것을 본적이 있을 것이다.물론, for문이 중첩되어있는걸 보면 경기를 일으키는 사람도 있지만,어쩔 수 없이 써야할수도 있고, 지식의 한계와 마감의 촉박함이 다중 for문을 만들어 낼 수 있는 부분은 어쩔수 없다. 뭐 그렇다치고, 모던 PHP그룹을 보던중 신기한(?) …

[PHP] Distinction Null and Undefined

TL;TR <?php array_key_exists(‘value’, get_defined_vars()) ?> 대게 주의에선 PHP에선 Null과 Undefined를 구별하지 못한다고 알려져 있다.나 또한 Null과 Undefined를 구별할 수 있는 방법이 없다고 생각했지만, 성능상의 이슈를 제외하고, PHP에서도 Null과 Undefined를 구분 할 수 있다. PHP에서 변수의 유효성을 확인하기 위해 가장 많이 사용되는 함수인 isset은 해당변수가 ‘정의 되어 있지 않’거나 변수의 값이 ‘Null’인 경우에 false를 반환한다. 즉, …

Laravel $model->relation Vs. $model->relation()

TL;DR $model->relation()은 모델 객체(object)를 반환$model->relation은 relation의 결과값을 반환 Laravel에선 모델간의 관계(relation)을 편리하게 사용할수 있는 기능을 제공한다.[docs]외래키(foreign_key)를 이용하여 해당 데이터에 해당되는 값을 가져올 수 있는 편리한 기능이다. 다음과 같은 구조의 DB가 있다고 생각해보자. User : table – id : integer (auto_increase, primary_key) – name : string – password : string Post : table – id : …

Laravel Validate fail custom message

Laravel에선 Vaildator 혹은 FormReqeust를 이용해 사용자의 입력값을 검증 할 수 있다.또한 각 조건 별로 에러 표시되는 에러 메시지를 설정할 수 있는데 해당 부분은 coustom-error-message 을 참고하도록 하자. TL;DR 이 포스트의 목적은 커스텀 에러 메시지가 아니고,Laravel 5.5이후 부터 입력값 검증에 실패할 경우 아래와 같은 형식으로 에러가 표시되는데, 저 “message”: “The given data was invalid”는 FormReqeust의 messages()나 resources/lang/xx/validation.php에서는 …

Laravel 5.8 PHPunit test setUp, tearDown error

갑작스레 Laravel을 5.8로 업데이트 하고나서 잘만 동작하던 test가PHP Fatal error: Declaration of Tests\Feature\Test::setUp() must be compatible with이런 에러를 벹으며 동작하지 않았다. github, laracast등에 올라온지 꾀 된 내용인데 laravel upgrade 가이드엔 test 관련 표기가 없어 당황하던 도중 github에서 방법을 찾게 되었다. (작성일 기준으론 upgrade 가이드에 표시되지 않았을뿐 현재는 표시되어있다.) 해결 방법은 setUp과 tearDown 메소드에 반환형을 :void로 …

Laravel phpunit Filestyem fake disk 설정

Laravel의 phpunit에서 fileupload를 테스트하기위한 공식 문서의 예제를 보면 Storage::fake(‘avatars’); 부분을 설정해 해당 disk를 사용하려고 해도$request->file(‘test’)->store(‘test_files’);이렇게 작성된 Controller를 통해 저장하게되면 storage/app/test_files에 저장되며, Storage::disk(‘avatars’)->assertExists($file->hashName()); 가 계속 파일이 없다고 표시된다. phpunit.xml 수정 <env name=”FILESYSTEM_DRIVER” value=”fake-local”/> 을 추가하고Storage::fake(‘fake-local’);, Storage::disk(‘fake-local’)로 변경해주면,storage/framework/testing/disks/fake-local/test_files/에 저장되며 test가 정상적으로 진행된다.