PHP에서 대량의 푸시 메시지를 보내기 위한 팁 > 개발자팁

개발자팁

개발과 관련된 유용한 정보를 공유하세요.
질문은 QA에서 해주시기 바랍니다.

PHP에서 대량의 푸시 메시지를 보내기 위한 팁 정보

PHP PHP에서 대량의 푸시 메시지를 보내기 위한 팁

본문

PHP에서 대량의 푸시 메시지를 보내는 경우, 웹 화면이 멈추지 않도록 비동기 처리를 해야 합니다. 일반적으로 큰 규모의 작업을 처리할 때는 다음과 같은 방법을 사용합니다.

1. 큐 시스템 사용: 메시지를 전송하고자 하는 대상들을 큐에 넣어두고, 백그라운드에서 큐를 처리하는 작업을 별도로 실행합니다. PHP에서는 Redis나 RabbitMQ와 같은 큐 시스템을 사용하여 이를 구현할 수 있습니다.

2. 배치 작업 사용: 대량의 푸시 메시지를 한 번에 보내기보다 일정 갯수씩 나누어서 보내는 것이 좋습니다. 예를 들어, 100명의 대상에게 푸시 메시지를 보내야 할 경우, 10명씩 분할하여 10번의 작업으로 나누어 보내는 것입니다. 이를 위해 PHP의 스크립트를 여러 번 실행하는 배치 작업을 사용할 수 있습니다.

3. 백그라운드 프로세스 사용: 웹 화면과 별개로 동작하는 백그라운드 프로세스를 실행하여 푸시 메시지를 보내는 작업을 처리할 수 있습니다. 이를 위해 PHP CLI(Command Line Interface)를 사용하거나, 서드파티 도구인 Supervisor나 PM2와 같은 프로세스 관리 도구를 사용할 수 있습니다.

또한, 푸시 메시지를 보낼 때는 API 호출 등의 외부 작업이 필요하기 때문에, 처리 시간이 오래 걸릴 수 있습니다. 따라서, PHP 실행 시간 제한을 늘리거나, 배치 작업으로 나누어 처리하는 것도 고려해야 합니다.

추천
1

댓글 5개

저는
1) 별도의 큐 테이블에 삽입하고,
3) 별도 구축된 CLI 서버에서 해당 테이블을 바탕으로 푸쉬데이터(메세지 및 대상)를 fetch 한 후에,
2) 1000개씩 배치를 통해 보내고 있습니다. (registration_ids 에 키 배열을 전달)
https://firebase.google.com/docs/cloud-messaging/http-server-ref?hl=ko

다만 1000건 이상을 동시에 보내야 해서, push fetcher 에서 1000건씩 임시배열에 담은 다음, push sender 를 여러개 fork 해서 보내고 있습니다. (예를 들어서 3만건을 보내야하면, 1000개씩 30개로 쪼개서 sender를 동시에 30개 실행)
어차피 프로세스당 1HTTP 리퀘스트만 실행되므로 서버에 부하없이 잘 동작하더군요.
대량으로 발송할때는 curl_multi(php에서도 사용가능) 를 사용하거나 guzzle async 를 사용하면 됩니다.

MQ 나 Redis 는 서버 호스팅이나 외부 서비스 연계를 해야 하는데, 배보다 배꼽이 큰 방법입니다.

배치도 crontab 이 없는 환경에선 사용하기 위해선 sass 형태의 cron service 를 사용해야 합니다.

composer 도 쓰기 힘들다면, curl_multi가 현실적 대안입니다.
composer 사용가능하다면, guzzle async 가 효과적입니다.

요즘은 push notification 은 fcm 을 쌩으로 쓰는것보단 onesignal 형태의 외부 서비스를 쓰는것도 괜찮습니다.
발송상태 모니터링도 되고, ios / android 도 단일 api 에서 대응할수 있습니다.

비용이 발송하는게 문제인데, 애초에 대량 발송 업체는 이미 수익이 있는 상태라서 크게 문제되는 비용이 아닐것입니다.(fcm 을 안정적으로 구축하여 비지니스에 집중하는게 오히려 비용적 이익이 클수 있음)
@더업스토리 경험이 많으신 분 같은데 curl_multi 를 이용한 1만개정도의 다중전송을 위한 샘플코드를 보여주시면 감사하겠습니다.
전체 1,168
개발자팁 내용 검색 PHP에서

회원로그인

(주)에스아이알소프트 / 대표:홍석명 / (06211) 서울특별시 강남구 역삼동 707-34 한신인터밸리24 서관 1404호 / E-Mail: admin@sir.kr
사업자등록번호: 217-81-36347 / 통신판매업신고번호:2014-서울강남-02098호 / 개인정보보호책임자:김민섭(minsup@sir.kr)
© SIRSOFT