본문 바로가기

Laravel

Remove Laravel bootstrap cache config.php uploaded to AWS AWS 테스트 서버에 코드를 배포했다. 하지만 수정된 코드만 배포된 게 아니라 laravel.log와 bootstrap/cache/config.php까지 같이 배포되었다. 소스트리를 사용해서 확인해봐도 코드 파일들만 테스트 브랜치에 merge되어 있었는데... 어떻게 저게 올라갔지... .gitignore에 명시해놔도 이상하게 올라간다.? 이미 저 파일들이 테스트 서버로 올라간 이상 테스트 서버에 ssh로 접속해서 rm -rf로 디렉토리를 지워봤자 또 다른 에러들이 나게 된다. 라라벨이 동작할 때 bootstrap을 통해 준비하는데 로컬 경로들 때문에 테스트 서버 상에서는 경로를 못찾아서 나는 에러들이었다. 방법은 AWS 테스트 서버를 정상 상태로 재배포(롤백)한 다음 로컬에 있는 브랜치에서 올라가지 말..
Laravel Responder 주의 : 영어 해석이 어색한 부분이 굉장히 많음.. 이상하다 싶으면 원문 읽길 바랍니다. Laravel Responder는 API 응답을 구성하기 위한 패키지다. transformers를 사용해서 데이터를 transform할 수 있고, 성공과 에러 응답을 생성하고 직렬화할 수 있다. 예외 처리를 하고 응답 테스트를 지원할 수 있다. Intro 라라벨은 JSON으로 변환하기 위해 컨트롤러 메서드로부터 모델들을 바로 반환하게 한다. 이건 API를 구성하기 위해 빠른 방법이지만 DB column들이 드러나게 된다. Fractal은 transformers로 이 문제를 해결했다. 하지만 프레임워크와 통합하는 것은 좀 번거로울 수 있다. public function index() { // 사용자 모델들을 다 조회..
laravel with() vs load() with() : 호출될 때 한번에 연관된 모델들을 가져온다. eager loading. 2개의 쿼리만 날린다. N+1 쿼리 문제를 해결해준다. N+1 쿼리 문제? 1:N인 관계에서 1인 모델을 조회한 뒤 연관된 N개의 모델을 가져오려면 1+N개의 쿼리가 DB에 요청되는 문제.
Laravel env() vs PHP getenv() env()는 환경 변수의 값 또는 기본 값을 반환한다. $env = env('APP_ENV'); // Returns 'production' if APP_ENV is not set... $env = env('APP_ENV', 'production'); in .env file APP_ENV = 'test' getenv()는 환경 변수의 값을 가져올 때 사용한다. 값이 존재하면 반환하고 환경 변수 이름이 없는 경우는 false를 반환한다. 환경 변수 이름이 지정되어 있지 않으면 모든 환경 변수들은 연관 배열로 반환된다. 대소문자 구분이 없다. 결론 laravel의 env()는 getenv()를 발전시킨 헬퍼이기 때문에 laravel에선 env()를 활용해 환경 변수에 접근하면 좋을 것 같다. default 값..
Laravel optional helper 라라벨 회사에서 애플 로그인 작업을 하다가 애플 서버 응답이 에러면 처리해야 하는 부분이 있었다. PR을 날리고 코드 리뷰를 받는데 개발자분께서 optional을 쓰라고 하셨다. -> (object operator)로 A라는 객체의 값에 접근하려고 할 때 A가 사실 객체가 아닌 경우(non object)라면 error가 나게 된다. 아래 예시에서 $exception->getResponse()->getBody()->getContent()를 통해서 특정 값에 도달 해 json_decode를 하고 error key에 접근을 시도한다. $errorDescription = json_decode(optional(optional($exception->getResponse())->getBody())->getContents()..
PhpStorm 공식 홈페이지 단축키 모음 페이지 상단으로 올리면 Windows, macOS 등 환경에 따른 단축키를 볼 수 있다. Keyboard Shortcuts By Category는 카테고리에 따라 단축키를 분류한 것이고 Keyboard Shortcuts By Keystroke는 키보드 버튼에 따라 단축키를 분류한 것이다. https://www.jetbrains.com/help/phpstorm/keyboard-shortcuts-and-mouse-reference.html?keymap=primary_default_for_macos Keyboard Shortcuts and Mouse Reference - Help | PhpStorm Keyboard Shortcuts and Mouse Reference Using shortcuts is a ma..
Laravel tests, RefreshDatabase RefreshDatabase는 각각의 테스트가 서로 영향을 주지 않으면서 DB를 깨끗하게, 독립적으로 사용하기 위해 쓰인다. 라라벨에서의 테스트 생명 주기 PHPUnit과 유사하다. 테스트 전에 각각 setUp 메서드가 실행된다 setUp()은 라라벨 앱을 생성하고 refresh한다. traits를 설정한다. afterApplicationCreatedCallbacks, sets up events, clears facade’s resolved instances 등을 호출한다. 실제 테스트가 실행된다 각각의 테스트가 종료될 때 tearDown 메서드가 실행된다. beforeApplicationDestroyedCallbacks가 호출된다. mockery를 종료하고 변수를 초기화 한다. RefreshDataba..
Laravel DatabaseMigrations, DatabaseTransactions DatabaseMigrations 각각의 테스트를 실행하기 전에 DB tables들을 migrate 한다. 각각 테스트가 끝난 후에는 추가되었던 데이터를 지운다.