[Technical Insight] PHP와 Crontab으로 구축하는 예약 알림 시스템: AI 시대의 고속 POC 전략

최근 소프트웨어 개발의 화두는 ‘바이브코딩(Vibe Coding)’입니다. 아이디어를 코드라는 실체로 옮기는 과정에서 AI를 파트너로 삼아 개발 속도를 비약적으로 높이는 방식이죠.

이번에 저는 루틴 관리 앱 ‘루티(Routi)’의 POC(개념 증명)를 진행하며, PHP 환경에서 예약 알림 시스템을 어떻게 설계하고 자동화했는지 그 기술적 구조를 공유하고자 합니다.

1. PHP의 Stateless 특성과 Crontab의 필요성

웹 엔진으로서의 PHP는 기본적으로 ‘Stateless’합니다. 즉, 외부의 요청(HTTP Request)이 있어야만 동작하며, 서버가 스스로 시간을 계산해 특정 로직을 수행할 수는 없습니다.

사용자가 설정한 루틴 시간에 맞춰 알림을 보내는 ‘스케줄링’ 기능을 구현하기 위해서는 OS 레벨의 도움인 크론탭(Crontab)이 필수적입니다. 크론탭은 리눅스 기반 서버에서 지정된 시간에 특정 명령을 반복 실행해 주는 강력한 스케줄러입니다.

2. 아키텍처 설계: 예약 알림의 핵심 로직

효율적인 예약 시스템을 위해 저는 다음과 같은 3단계 프로세스를 설계했습니다.

Step 1: DB 스키마 및 쿼리 최적화

먼저 알림 테이블에는 reservation_time(예약 시간)과 is_sent(발송 여부) 플래그가 있어야 합니다.

  • Logic: 현재 시간보다 reservation_time이 작거나 같고, is_sent가 0인 데이터를 필터링합니다.

Step 2: 비즈니스 로직 구현 (cron.php)

이 파일은 크론에 의해 1분마다 호출됩니다.

  1. Fetch: 발송 대상 리스트를 가져옵니다.
  2. Push: 각 유저의 엔드포인트로 알림을 전송합니다.
  3. Update: 발송이 완료된 레코드는 is_sent = 1로 업데이트하여 중복 발송을 원천 차단합니다.

Step 3: 인프라 레벨의 자동화 (Crontab 설정)

서버 터미널에서 crontab -e를 통해 단 한 줄의 설정으로 자동화 레이어를 완성합니다.

Bash

# 매 분마다(1m) cron.php를 실행하고 로그를 기록함
* * * * * php /var/www/html/routi/cron.php >> /var/www/html/routi/cron.log 2>&1

3. 전문가의 제언: 바이브코딩과 POC의 가치

이번 프로젝트에서 제가 느낀 가장 큰 인사이트는 “기술은 도구일 뿐, 중요한 것은 실행 속도”라는 점입니다.

  • PHP는 레거시하지만, AI(LLM)가 가장 방대한 학습 데이터를 보유한 언어 중 하나입니다. 바이브코딩 시 코드의 정확도가 매우 높습니다.
  • Crontab은 복잡한 큐(Queue) 시스템 없이도 서버 자원을 최소화하며 기능을 구현하게 해 줍니다.

복잡한 아키텍처를 고민하느라 시간을 허비하기보다, 이처럼 명확한 도구들을 활용해 아이디어를 시장에 빠르게 던져보는 것이 진정한 전문가의 자세가 아닐까 합니다.

“위에서 설명해 드린 PHP와 Crontab 기반의 알림 아키텍처를 실제로 적용해본 결과물입니다. 아이디어가 어떻게 실제 서비스로 빠르게 가시화되었는지 궁금하시다면 아래 링크에서 확인해 보세요.”

🔗 [루티(Routi) POC 프로토타입 바로가기] > https://push.loonshotstudio.com

Leave a Reply

Your email address will not be published. Required fields are marked *