Project
— Overview
자동차 보증 계약을 온라인으로 신청·관리하는 B2C 플랫폼. 딜러와 고객이 계약 상태를 실시간으로 조회하고, 보증 범위·만료일·수리 이력을 한 화면에서 확인할 수 있다.
PHP 백엔드에 MySQL 데이터베이스를 연결하고, 프론트엔드와는 JSON REST API로 통신한다. 세션 기반 인증과 역할별 접근 제어(딜러 / 고객 / 관리자)가 적용되어 있다.
— Core Logic
모든 API 엔드포인트는 Prepared Statement로 SQL Injection을 차단하고,
$_SESSION['user_id']를 조건에 포함해 타인의 데이터 접근을 방지한다.
// GET /api/warranty/{id}
function getWarranty(PDO $pdo, int $id): void
{
$stmt = $pdo->prepare(
'SELECT w.*, v.model, v.vin, v.year
FROM warranties w
JOIN vehicles v ON v.id = w.vehicle_id
WHERE w.id = :id
AND w.user_id = :uid' // 본인 데이터만 조회
);
$stmt->execute([':id' => $id, ':uid' => $_SESSION['user_id']]);
$row = $stmt->fetch(PDO::FETCH_ASSOC);
if (!$row) {
http_response_code(404);
echo json_encode(['error' => 'Not found']);
exit;
}
header('Content-Type: application/json');
echo json_encode($row);
}api/warranty.php — GET endpoint with ownership check
보증 만료 여부는 DB 쿼리 시점에 계산해 반환한다. 만료 D-30 이내 계약은 별도 플래그로 표시해 갱신 알림을 트리거한다.
-- 만료 임박 계약 조회 (30일 이내)
SELECT w.id, w.expires_at,
DATEDIFF(w.expires_at, CURDATE()) AS days_left,
v.model, u.email
FROM warranties w
JOIN vehicles v ON v.id = w.vehicle_id
JOIN users u ON u.id = w.user_id
WHERE w.status = 'active'
AND w.expires_at BETWEEN CURDATE()
AND DATE_ADD(CURDATE(), INTERVAL 30 DAY);cron/notify_expiring.php — expiry check query
— How It Works
POST /api/warranty로 계약이 생성된다.pending → active로 변경되고 고객에게 이메일이 발송된다.GET /api/warranty로 전체 계약 목록을 조회하고, 만료 임박 건은 오렌지 배지로 표시한다.POST /api/claim으로 등록하고 보증 범위 여부를 자동 판정한다.