Laravel 애플리케이션을 AWS Lambda에 올리고 PostgreSQL에 붙이려는데 이런 에러가 나올 때가 있다.PDOException: could not find driver (Connection: pgsql, SQL: select * from ...)로컬에서는 잘 되던 게 Lambda에서만 터진다. 원인은 런타임 이미지에 PDO PostgreSQL 확장이 안 들어 있어서다.왜 이런 일이 생기나서버리스 PHP 런타임(Bref 등)은 Lambda의 용량 제한 때문에 확장을 최소한만 넣어서 배포한다. MySQL용 pdo_mysql은 기본 포함이지만 pdo_pgsql은 빠져 있는 경우가 많다.로컬 개발 환경의 PHP에는 대부분 둘 다 깔려 있으니 로컬 테스트에서는 안 잡힌다. 배포하고 나서야 발견하게 ..
회사 통계 시스템에서 이상한 이슈가 등록된 적이 있다. 같은 화면을 새로고침하는데 일정 확률로 다른 값이 나온다는 제보였다.처음에는 프런트엔드에서 데이터 취합을 잘못하는 줄 알았다. 그런데 백엔드에서 같은 쿼리를 반복해서 돌려보니 결과값이 실제로 달라졌다.의심했던 것들리드 레플리카를 여러 대 쓰는데 복제 지연으로 싱크가 안 맞는 문제쿼리 자체의 문제캐시나 기타 문제원인: paginate에 ORDER BY가 없었다결론부터 말하면 paginate를 쓸 때는 order by를 반드시 해줘야 한다.SQL 표준상 ORDER BY가 없는 SELECT는 행 순서를 보장하지 않는다. 이건 버그가 아니라 명세다. DB는 가장 빠르게 가져올 수 있는 순서로 반환할 자유가 있다.그런데 paginate()는 내부적으로 LIM..
프로젝트별 node version 자동관리에 이어서 이번엔 php 해보려고 한다. 조건 - docker 사용자라면 필요가 없다. - valet 및 php mon 사용자 - composer 사용자 ( shell script 에서 해당 프로젝트의 php 버전을 composer.json 에서 불러온다 ) - zsh 사용자 (shell script를 수정하면 가능할 것 같은데 이번글 zsh 기준으로 작성되어 있다. - mac 사용자 준비단계 - brew 와 zsh 이 이미 설치되어 있다는 조건하에 시작하게습니다. 1. brew 에서 jq 를 설치합니다 나중에 만들어질 shell script 에서 해석용도로 사용됩니다. # jq instsall brew instsll jq 2. php mon의 환경 변수 등록 (..
Laravel에서 소셜 로그인을 붙일 때 쓰는 공식 패키지가 Socialite다. 문제는 공식이 지원하는 곳이 제한적이라는 것이다.공식 지원 목록은 이렇다. Facebook, X(Twitter), LinkedIn, Google, GitHub, GitLab, Bitbucket, Slack. 국내 서비스에서 정작 필요한 카카오, 네이버는 없다.Socialite Providers이걸 해결해주는 커뮤니티 프로젝트가 있다.https://socialiteproviders.com/about/카카오, 네이버를 포함해 수백 개의 프로바이더가 등록돼 있다. 사용법은 전부 동일한 패턴이라 하나만 익히면 나머지는 문서만 보고 붙일 수 있다.설치와 설정 (카카오 예시)1. 패키지 설치composer require sociali..
블로그를 직접 만들어본 기록이다. 티스토리나 워드프레스를 쓰면 될 일이지만, 프레임워크를 제대로 익히는 데는 완결된 서비스를 처음부터 끝까지 만들어보는 것만 한 게 없다.저장소https://github.com/yousung/blog개발 환경PHP : 7.1Framework : Laravel 5.6Cache : Redis 또는 MemcachedDB : MySQL지금 기준으로 보면 전부 구버전이다. PHP 7.1은 2019년에 보안 지원이 끝났고 Laravel 5.6도 마찬가지다. 당시 스택 기록으로 남겨둔다.블로그를 직접 만들면 배우는 것들블로그는 학습용 프로젝트로 꽤 좋은 주제다. 단순해 보이지만 웹 서비스의 기본 요소가 거의 다 들어간다.1. 인증과 권한글 작성은 관리자만, 조회는 누구나. 이 단순한 ..
폼 유효성 검사에 실패했을 때 어느 항목이 잘못됐는지 시각적으로 알려주는 방법이다. 부트스트랩 느낌의 경고 스타일을 직접 만들어 쓴다.1. Laravel Custom Helper 만들기if (!function_exists('hasError')) { function hasError($errName, $isMsg = false) { if ($errors = session('errors', new \Illuminate\Support\MessageBag())) { if ($isError = $errors->has($errName)) { return $isMsg ? $errors->first($errNam..
