본문 바로가기

프로그램

React와 PHP를 활용하여 MySQL 연동된 Admin 대시보드 웹사이트를 만드는 과정

React와 PHP를 활용하여 MySQL 연동된 Admin 대시보드 웹사이트를 만드는 과정을 단계별로 설명하겠습니다. 이 예제에서는 무료 템플릿을 사용하여 로그인 후 메인 페이지로 리다이렉트하는 기본 구조를 구현합니다.

1. 프로젝트 구조 설정

먼저, 두 개의 프로젝트를 생성합니다. 하나는 React 프론트엔드, 다른 하나는 PHP 백엔드입니다.

React 프로젝트 설정

npx create-react-app admin-dashboard
cd admin-dashboard

PHP 백엔드 설정

PHP 프로젝트를 위한 디렉토리를 생성합니다.

mkdir php-backend
cd php-backend

2. 데이터베이스 설정

MySQL에서 사용할 데이터베이스를 생성합니다.

CREATE DATABASE admin_dashboard;
USE admin_dashboard;

CREATE TABLE users (
    id INT AUTO_INCREMENT PRIMARY KEY,
    username VARCHAR(50) NOT NULL UNIQUE,
    password VARCHAR(255) NOT NULL
);

3. PHP 백엔드 구현

3.1. PHP 파일 생성

php-backend 디렉토리 내에 login.php 파일을 생성합니다.

<?php
$servername = "localhost";
$username = "your_username";
$password = "your_password";
$dbname = "admin_dashboard";

$conn = new mysqli($servername, $username, $password, $dbname);
if ($conn->connect_error) {
    die("Connection failed: " . $conn->connect_error);
}

if ($_SERVER['REQUEST_METHOD'] === 'POST') {
    $user = $_POST['username'];
    $pass = $_POST['password'];

    $sql = "SELECT * FROM users WHERE username = ?";
    $stmt = $conn->prepare($sql);
    $stmt->bind_param("s", $user);
    $stmt->execute();
    $result = $stmt->get_result();

    if ($result->num_rows > 0) {
        $row = $result->fetch_assoc();
        if (password_verify($pass, $row['password'])) {
            echo json_encode(["status" => "success"]);
        } else {
            echo json_encode(["status" => "error", "message" => "Invalid credentials."]);
        }
    } else {
        echo json_encode(["status" => "error", "message" => "User not found."]);
    }
    $stmt->close();
}
$conn->close();
?>

3.2. 사용자 등록 (선택 사항)

사용자를 등록할 수 있는 register.php 파일도 추가할 수 있습니다.

<?php
// register.php
$servername = "localhost";
$username = "your_username";
$password = "your_password";
$dbname = "admin_dashboard";

$conn = new mysqli($servername, $username, $password, $dbname);
if ($conn->connect_error) {
    die("Connection failed: " . $conn->connect_error);
}

if ($_SERVER['REQUEST_METHOD'] === 'POST') {
    $user = $_POST['username'];
    $pass = password_hash($_POST['password'], PASSWORD_DEFAULT);

    $sql = "INSERT INTO users (username, password) VALUES (?, ?)";
    $stmt = $conn->prepare($sql);
    $stmt->bind_param("ss", $user, $pass);

    if ($stmt->execute()) {
        echo json_encode(["status" => "success"]);
    } else {
        echo json_encode(["status" => "error", "message" => "User registration failed."]);
    }
    $stmt->close();
}
$conn->close();
?>

4. React 프론트엔드 구현

4.1. 로그인 페이지 만들기

src 디렉토리 내에 Login.js 파일을 생성합니다.

import React, { useState } from 'react';

const Login = () => {
    const [username, setUsername] = useState('');
    const [password, setPassword] = useState('');
    const [message, setMessage] = useState('');

    const handleLogin = async (e) => {
        e.preventDefault();
        const response = await fetch('http://localhost/php-backend/login.php', {
            method: 'POST',
            headers: {
                'Content-Type': 'application/x-www-form-urlencoded',
            },
            body: new URLSearchParams({
                username: username,
                password: password,
            }),
        });
        const data = await response.json();
        if (data.status === 'success') {
            window.location.href = '/dashboard'; // 로그인 성공 시 대시보드로 리다이렉트
        } else {
            setMessage(data.message);
        }
    };

    return (
        <div>
            <h2>Login</h2>
            <form onSubmit={handleLogin}>
                <input type="text" placeholder="Username" value={username} onChange={(e) => setUsername(e.target.value)} required />
                <input type="password" placeholder="Password" value={password} onChange={(e) => setPassword(e.target.value)} required />
                <button type="submit">Login</button>
            </form>
            {message && <p>{message}</p>}
        </div>
    );
};

export default Login;

4.2. 대시보드 페이지 만들기

src 디렉토리 내에 Dashboard.js 파일을 생성합니다.

import React from 'react';

const Dashboard = () => {
    return (
        <div>
            <h2>Dashboard</h2>
            <p>Welcome to the Admin Dashboard!</p>
        </div>
    );
};

export default Dashboard;

4.3. 라우팅 설정

src/App.js 파일을 수정하여 라우팅을 설정합니다.

import React from 'react';
import { BrowserRouter as Router, Route, Switch } from 'react-router-dom';
import Login from './Login';
import Dashboard from './Dashboard';

const App = () => {
    return (
        <Router>
            <Switch>
                <Route path="/" exact component={Login} />
                <Route path="/dashboard" component={Dashboard} />
            </Switch>
        </Router>
    );
};

export default App;

5. 실행 및 테스트

  1. PHP 서버를 실행합니다. 예를 들어, XAMPP나 MAMP를 사용하여 PHP 파일이 있는 디렉토리를 웹 서버의 루트로 설정합니다.
  2. React 앱을 실행합니다.
npm start
  1. 웹 브라우저에서 http://localhost:3000으로 접속하여 로그인 페이지를 확인합니다. 등록된 사용자로 로그인하면 대시보드 페이지로 리다이렉트됩니다.

이렇게 하면 React와 PHP를 활용한 기본적인 Admin 대시보드 웹사이트가 완성됩니다. 추가적인 기능이나 스타일링은 필요에 따라 확장해 나가면 됩니다.

'프로그램' 카테고리의 다른 글

2024, 유행하는 프로그램 언어, 그리고 웹개발  (0) 2024.07.23