Tick Tick Boom

시간이 다 가기 전에

개발/라라벨 6

eloquent 모델에 keyType 지정하지 않을 시, relation에 접근할 수 없는 이슈

최근에 아주 골때리는 이슈를 하나 경험했다. A 라는 모델을 리스트로 가져오는 로직이 존재했는데, 특정 관계(relation)을 eager loading 시켜주면 딱 한개의 데이터에서만 eager loading이 되지 않아, 관계가 null 값으로 잡히는 사례였다. 이게 왜 골때리는 문제였나면, 엘로퀀트 빌더의 with 연산을 통해서 relation을 load 할때 에러가 나므로 해당 관계가 존재하는지 확인하기 위해, 모델을 통해서 각자 id를 통해 접근하면 null 값이던 데이터가 생긴다는 것이었다. 원인을 파악하던 중, laravel 디버그 바의 쿼리 조사 파트에서, 해당 관계를 가져오는 sql에서 id 값이, 1,4,91219491429124, 이런식으로 int 타입으로 연산이 진행된다는 것을 확인..

개발/라라벨 2023.10.17

laravel Request life-cycle (생명주기) dd로 따라가보기 (2)

INTRO 라라벨 생명주기 따라가보기 두번째 포스트이다. 저번 포스트에서 bootstrap/app.php 를 실행하기 직전까지 확인해보았는데, 이번부터는 그 이후이다. FLOW A.4.a. bootstrap/app.php 해당 파일은 php 파일로, 특정 클래스에 대한 정의없이 $app 이라는 인스턴스를 생성한 후, 가공하여, return 하는 코드이다. 하나 하나 따라가 보자. A.4.a.1 인스턴스 $app 생성하기 - Application 인스턴스 생성하기 /* |-------------------------------------------------------------------------- | Create The Application |--------------------------------..

개발/라라벨 2023.09.11

laravel Request life-cycle (생명주기) dd로 따라가보기 (1)

INTRO 어떤 프레임워크이던지, 처음 공부하기 시작하면 그 프레임워크의 생명주기부터 궁금해지는 것 같다. 생명주기를 알기 전까지는 마치 블랙박스 혹은 자판기 처럼 누르면(요청하면) 상품(응답)이 띡나오는 기계 같아서 조금 이해하기가 어려운 것 같다. laravel을 사용한지 시간이 좀 지났지만, 아직까지도 생명주기를 제대로 알지 못하는 것 같아 이 기회에 처음부터 파보려고 한다. 좀 시간이 걸릴 수도 있으나, request 부터 response까지 어떻게 진행되는지 알아보자~ CONDITION 로컬 환경에서 진행할 생각이며, 해당 환경은 아래와 같다. - 웹서버: valet을 이용한 로컬 호스트 (valet은 nginx 기반인 것으로 알고 있다. - php 버전: 8.2 - laravel 버전: 10...

개발/라라벨 2023.09.05

Eloquent Collection과 Support Collection 은 뭐가 다를까?

라라벨을 사용하다보면, 가끔씩 같은 클래스명과 비슷한 역할을 가지지만, 다른 네임스페이스를 가지는 클래스들이 존재한다. 대표적인 사례로는 바로 라라벨에서 가장 많이 사용하는 데이터 래퍼(wrapper) 클래스,Collection이다. Collection을 사용하기위해, PhpStorm을 두드리다보면, 어김없이 두녀석들이 힌팅이 된다. 바로, Illuminate\Support\Collection, Illuminate\Database\Eloquent\Collection 이다. 막연히, Eloquent를 사용하다가 모델을 담는 Collection이 만들어지면, 후자를 사용하고, 평소에 데이터를 다루기 위해서는 전자를 사용한다고 생각하고 사용해왔는데, 뭐가 뭔지 정확히 판별해가면서 사용한적은 없는 것 같다. 오..

개발/라라벨 2023.09.01

laravel Notification queue 적용시에 모델에 따라서 memory size exhausted 되는 이슈 해결기

개발 환경 php 버전: 7.4 laravel 버전: 6.20.26 문제 상황 현재 회사에서 개발중인 이커머스 관련 솔루션에서 사용자 결제시에 사용자에게 결제 관련 메일을 보내주는 기능이 존재한다. 원래 존재했던 기능이지만, 결제 과정에서 smtp를 통한 이메일 전송시에 결제 트랜잭션 소모시간이 과도하게 길어지는 이슈가 있어, 이메일 전송 로직자체를 큐로 분리하기로 했다. https://laravel.kr/docs/8.x/queues 라라벨 8.x - Queues-큐 라라벨 한글 메뉴얼 8.x - Queues-큐 laravel.kr 라라벨 큐란 특정 작업들을 비동기적으로 진행할수 있도록 하여, 백그라운드에서 처리될 수 있는 대기 작업을 쉽게 생성할 수 있도록 해주는 라라벨의 아주 좋은 기능이다. 회사 솔..

개발/라라벨 2023.08.29