프로그램
React와 PHP를 활용하여 MySQL 연동된 Admin 대시보드 웹사이트를 만드는 과정
MSTM
2024. 8. 13. 12:45
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. 실행 및 테스트
- PHP 서버를 실행합니다. 예를 들어, XAMPP나 MAMP를 사용하여 PHP 파일이 있는 디렉토리를 웹 서버의 루트로 설정합니다.
- React 앱을 실행합니다.
npm start
- 웹 브라우저에서 http://localhost:3000으로 접속하여 로그인 페이지를 확인합니다. 등록된 사용자로 로그인하면 대시보드 페이지로 리다이렉트됩니다.
이렇게 하면 React와 PHP를 활용한 기본적인 Admin 대시보드 웹사이트가 완성됩니다. 추가적인 기능이나 스타일링은 필요에 따라 확장해 나가면 됩니다.