๋ฃจ์  ์†Œํ”„ํŠธ ๋กœ๊ณ 

216.73.216.80 TODAY : 146

PHP ๊ฐ•์˜

 > 

PHP - ์ค‘๊ธ‰

๐Ÿ“š PHP ์ค‘๊ธ‰ - 2์ฃผ์ฐจ: ํšŒ์›๊ฐ€์ž… ๋ฐ ๋กœ๊ทธ์ธ ์‹œ์Šคํ…œ ๊ตฌํ˜„ - 02 ํšŒ์›๊ฐ€์ž… ๊ธฐ๋Šฅ (๋ฐ์ดํ„ฐ ์œ ํšจ์„ฑ ๊ฒ€์‚ฌ, ๋น„๋ฐ€๋ฒˆํ˜ธ ํ•ด์‹ฑ)

๐Ÿ“š PHP ์ค‘๊ธ‰ - 2์ฃผ์ฐจ: ํšŒ์›๊ฐ€์ž… ๋ฐ ๋กœ๊ทธ์ธ ์‹œ์Šคํ…œ ๊ตฌํ˜„ - 02 ํšŒ์›๊ฐ€์ž… ๊ธฐ๋Šฅ (๋ฐ์ดํ„ฐ ์œ ํšจ์„ฑ ๊ฒ€์‚ฌ, ๋น„๋ฐ€๋ฒˆํ˜ธ ํ•ด์‹ฑ)
ํ‰์  10.0 ๋ผ์ด์„ผ์Šค free
์‚ฌ์šฉ์žํ‰์  10.0 ์šด์˜์ฒด์ œ
๋‹ค์šด๋กœ๋“œ 1 ํŒŒ์ผํฌ๊ธฐ 0
์ œ์ž‘์‚ฌ LUZENSOFT ๋“ฑ๋ก์ผ 2025-07-17 15:28:53
์กฐํšŒ์ˆ˜ 8
- ์„ค๋ช…

๐Ÿ“š PHP ์ค‘๊ธ‰ - 2์ฃผ์ฐจ: ํšŒ์›๊ฐ€์ž… ๋ฐ ๋กœ๊ทธ์ธ ์‹œ์Šคํ…œ ๊ตฌํ˜„ - 02 ํšŒ์›๊ฐ€์ž… ๊ธฐ๋Šฅ (๋ฐ์ดํ„ฐ ์œ ํšจ์„ฑ ๊ฒ€์‚ฌ, ๋น„๋ฐ€๋ฒˆํ˜ธ ํ•ด์‹ฑ)





์ด๋ฒˆ ํฌ์ŠคํŒ…์—์„œ๋Š” ์ง€๋‚œ์ฃผ์— ์ด์–ด #ํšŒ์›๊ฐ€์ž… ๋ฐ #๋กœ๊ทธ์ธ ์‹œ์Šคํ…œ ๊ตฌํ˜„์˜ ๋‘ ๋ฒˆ์งธ ๋‹จ๊ณ„๋กœ, #ํšŒ์›๊ฐ€์ž… ๊ธฐ๋Šฅ์— ์ดˆ์ ์„ ๋งž์ถฐ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. ํŠนํžˆ, ์‚ฌ์šฉ์ž๊ฐ€ ์ž…๋ ฅํ•œ #๋ฐ์ดํ„ฐ์˜ #์œ ํšจ์„ฑ์„ ๊ฒ€์‚ฌํ•˜๊ณ  #๋น„๋ฐ€๋ฒˆํ˜ธ๋ฅผ #์•ˆ์ „ํ•˜๊ฒŒ #ํ•ด์‹ฑํ•˜๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•ด ์ž์„ธํžˆ ์•Œ์•„๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.







1. ํšŒ์›๊ฐ€์ž… ํผ (HTML)

uploadImage

ํšŒ์›๊ฐ€์ž… ๊ธฐ๋Šฅ์„ ๊ตฌํ˜„ํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ๋จผ์ € ์‚ฌ์šฉ์ž๋กœ๋ถ€ํ„ฐ ํ•„์š”ํ•œ ์ •๋ณด๋ฅผ ์ž…๋ ฅ๋ฐ›์„ #HTML #ํผ์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. ์ผ๋ฐ˜์ ์œผ๋กœ #์•„์ด๋””, #๋น„๋ฐ€๋ฒˆํ˜ธ, #๋น„๋ฐ€๋ฒˆํ˜ธ ํ™•์ธ, #์ด๋ฉ”์ผ ๋“ฑ์˜ ํ•„๋“œ๊ฐ€ ํฌํ•จ๋ฉ๋‹ˆ๋‹ค.

HTML

<!DOCTYPE html>
<html lang="ko">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>ํšŒ์›๊ฐ€์ž…</title>
    <style>
        body { font-family: Arial, sans-serif; margin: 20px; }
        .container { max-width: 400px; margin: auto; padding: 20px; border: 1px solid #ccc; border-radius: 8px; }
        h2 { text-align: center; }
        label { display: block; margin-bottom: 8px; }
        input[type="text"],
        input[type="password"],
        input[type="email"] {
            width: calc(100% - 20px);
            padding: 10px;
            margin-bottom: 15px;
            border: 1px solid #ddd;
            border-radius: 4px;
        }
        button {
            width: 100%;
            padding: 10px;
            background-color: #007bff;
            color: white;
            border: none;
            border-radius: 4px;
            cursor: pointer;
        }
        button:hover {
            background-color: #0056b3;
        }
        .error { color: red; margin-bottom: 10px; }
    </style>
</head>
<body>
    <div class="container">
        <h2>ํšŒ์›๊ฐ€์ž…</h2>
        <?php
        session_start();
        if (isset($_SESSION['error_message'])) {
            echo '<div class="error">' . htmlspecialchars($_SESSION['error_message']) . '</div>';
            unset($_SESSION['error_message']); // ๋ฉ”์‹œ์ง€ ํ‘œ์‹œ ํ›„ ์‚ญ์ œ
        }
        ?>
        <form action="register_process.php" method="POST">
            <label for="username">์•„์ด๋””:</label>
            <input type="text" id="username" name="username" required>

            <label for="password">๋น„๋ฐ€๋ฒˆํ˜ธ:</label>
            <input type="password" id="password" name="password" required>

            <label for="confirm_password">๋น„๋ฐ€๋ฒˆํ˜ธ ํ™•์ธ:</label>
            <input type="password" id="confirm_password" name="confirm_password" required>

            <label for="email">์ด๋ฉ”์ผ:</label>
            <input type="email" id="email" name="email" required>

            <button type="submit">ํšŒ์›๊ฐ€์ž…</button>
        </form>
    </div>
</body>
</html>







2. ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์—ฐ๊ฒฐ ์„ค์ •

uploadImage

ํšŒ์› ์ •๋ณด๋ฅผ ์ €์žฅํ•  #๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์—ฐ๊ฒฐํ•˜๋Š” ์„ค์ •์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. db_config.php ํŒŒ์ผ์„ ํ†ตํ•ด #๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค #์—ฐ๊ฒฐ์„ ๊ด€๋ฆฌํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค.

PHP

<?php
// db_config.php
$db_host = 'localhost'; // ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ํ˜ธ์ŠคํŠธ
$db_user = 'root';      // ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์‚ฌ์šฉ์ž๋ช…
$db_pass = 'your_password'; // ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๋น„๋ฐ€๋ฒˆํ˜ธ (์‹ค์ œ ์‚ฌ์šฉ ์‹œ ๋ณ€๊ฒฝ)
$db_name = 'your_database_name'; // ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ช… (์‹ค์ œ ์‚ฌ์šฉ ์‹œ ๋ณ€๊ฒฝ)

// MySQLi ๊ฐ์ฒด๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์—ฐ๊ฒฐ
$conn = new mysqli($db_host, $db_user, $db_pass, $db_name);

// ์—ฐ๊ฒฐ ์˜ค๋ฅ˜ ํ™•์ธ
if ($conn->connect_error) {
    die("๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์—ฐ๊ฒฐ ์‹คํŒจ: " . $conn->connect_error);
}

// ๋ฌธ์ž ์ธ์ฝ”๋”ฉ ์„ค์ • (UTF-8)
$conn->set_charset("utf8mb4");
?>







3. ํšŒ์›๊ฐ€์ž… ์ฒ˜๋ฆฌ ๋กœ์ง (PHP)

uploadImage

register_process.php ํŒŒ์ผ์—์„œ ์‹ค์ œ ํšŒ์›๊ฐ€์ž… ์ฒ˜๋ฆฌ ๋กœ์ง์„ ๊ตฌํ˜„ํ•ฉ๋‹ˆ๋‹ค. ์ด ๋ถ€๋ถ„์—์„œ๋Š” ๋‹ค์Œ ๋‹จ๊ณ„๋ฅผ ๊ฑฐ์นฉ๋‹ˆ๋‹ค:

  1. #๋ฐ์ดํ„ฐ ์œ ํšจ์„ฑ ๊ฒ€์‚ฌ: ์ž…๋ ฅ๋œ ๋ฐ์ดํ„ฐ๊ฐ€ #์œ ํšจํ•œ์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.

  2. #๋น„๋ฐ€๋ฒˆํ˜ธ #ํ•ด์‹ฑ: ๋ณด์•ˆ์„ ์œ„ํ•ด ๋น„๋ฐ€๋ฒˆํ˜ธ๋ฅผ ํ•ด์‹ฑํ•ฉ๋‹ˆ๋‹ค.

  3. #๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์ €์žฅ: ์œ ํšจํ•˜๊ณ  ํ•ด์‹ฑ๋œ ๋ฐ์ดํ„ฐ๋ฅผ #๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์ €์žฅํ•ฉ๋‹ˆ๋‹ค.

PHP

<?php
// register_process.php
session_start(); // ์„ธ์…˜ ์‹œ์ž‘

// ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์„ค์ • ํŒŒ์ผ ํฌํ•จ
require_once 'db_config.php';

// POST ์š”์ฒญ์ด ์•„๋‹ˆ๋ฉด ๋ฆฌ๋‹ค์ด๋ ‰ํŠธ
if ($_SERVER['REQUEST_METHOD'] !== 'POST') {
    header('Location: register.php');
    exit();
}

// 1. ์ž…๋ ฅ ๊ฐ’ ๊ฐ€์ ธ์˜ค๊ธฐ ๋ฐ ๊ณต๋ฐฑ ์ œ๊ฑฐ
$username = trim($_POST['username'] ?? '');
$password = $_POST['password'] ?? '';
$confirm_password = $_POST['confirm_password'] ?? '';
$email = trim($_POST['email'] ?? '');

// 2. ๋ฐ์ดํ„ฐ ์œ ํšจ์„ฑ ๊ฒ€์‚ฌ
$errors = [];

// ์•„์ด๋”” ์œ ํšจ์„ฑ ๊ฒ€์‚ฌ
if (empty($username)) {
    $errors[] = "์•„์ด๋””๋ฅผ ์ž…๋ ฅํ•ด์ฃผ์„ธ์š”.";
} elseif (!preg_match('/^[a-zA-Z0-9]{4,20}$/', $username)) {
    $errors[] = "์•„์ด๋””๋Š” ์˜๋ฌธ, ์ˆซ์ž ์กฐํ•ฉ 4~20์ž๋กœ ์ž…๋ ฅํ•ด์ฃผ์„ธ์š”.";
}

// ๋น„๋ฐ€๋ฒˆํ˜ธ ์œ ํšจ์„ฑ ๊ฒ€์‚ฌ
if (empty($password)) {
    $errors[] = "๋น„๋ฐ€๋ฒˆํ˜ธ๋ฅผ ์ž…๋ ฅํ•ด์ฃผ์„ธ์š”.";
} elseif (strlen($password) < 8) {
    $errors[] = "๋น„๋ฐ€๋ฒˆํ˜ธ๋Š” ์ตœ์†Œ 8์ž ์ด์ƒ์ด์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.";
} elseif ($password !== $confirm_password) {
    $errors[] = "๋น„๋ฐ€๋ฒˆํ˜ธ์™€ ๋น„๋ฐ€๋ฒˆํ˜ธ ํ™•์ธ์ด ์ผ์น˜ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.";
}

// ์ด๋ฉ”์ผ ์œ ํšจ์„ฑ ๊ฒ€์‚ฌ
if (empty($email)) {
    $errors[] = "์ด๋ฉ”์ผ์„ ์ž…๋ ฅํ•ด์ฃผ์„ธ์š”.";
} elseif (!filter_var($email, FILTER_VALIDATE_EMAIL)) {
    $errors[] = "์œ ํšจํ•˜์ง€ ์•Š์€ ์ด๋ฉ”์ผ ํ˜•์‹์ž…๋‹ˆ๋‹ค.";
}

// ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ–ˆ๋‹ค๋ฉด ์„ธ์…˜์— ์ €์žฅ ํ›„ ํšŒ์›๊ฐ€์ž… ํผ์œผ๋กœ ๋ฆฌ๋‹ค์ด๋ ‰ํŠธ
if (!empty($errors)) {
    $_SESSION['error_message'] = implode('<br>', $errors);
    header('Location: register.php');
    exit();
}

// 3. ์•„์ด๋”” ์ค‘๋ณต ํ™•์ธ
// SQL Injection ๋ฐฉ์ง€๋ฅผ ์œ„ํ•ด prepared statement ์‚ฌ์šฉ
$stmt = $conn->prepare("SELECT id FROM users WHERE username = ?");
$stmt->bind_param("s", $username);
$stmt->execute();
$stmt->store_result();

if ($stmt->num_rows > 0) {
    $_SESSION['error_message'] = "์ด๋ฏธ ์กด์žฌํ•˜๋Š” ์•„์ด๋””์ž…๋‹ˆ๋‹ค. ๋‹ค๋ฅธ ์•„์ด๋””๋ฅผ ์‚ฌ์šฉํ•ด์ฃผ์„ธ์š”.";
    $stmt->close();
    $conn->close();
    header('Location: register.php');
    exit();
}
$stmt->close();

// 4. ๋น„๋ฐ€๋ฒˆํ˜ธ ํ•ด์‹ฑ (๋งค์šฐ ์ค‘์š”!)
// password_hash() ํ•จ์ˆ˜๋Š” ์†”ํŠธ(salt)๋ฅผ ์ž๋™์œผ๋กœ ์ƒ์„ฑํ•˜์—ฌ ์•ˆ์ „ํ•˜๊ฒŒ ํ•ด์‹ฑํ•ฉ๋‹ˆ๋‹ค.
$hashed_password = password_hash($password, PASSWORD_BCRYPT);

// 5. ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์‚ฌ์šฉ์ž ์ •๋ณด ์ €์žฅ
// SQL Injection ๋ฐฉ์ง€๋ฅผ ์œ„ํ•ด prepared statement ์‚ฌ์šฉ
$stmt = $conn->prepare("INSERT INTO users (username, password, email) VALUES (?, ?, ?)");
$stmt->bind_param("sss", $username, $hashed_password, $email);

if ($stmt->execute()) {
    // ํšŒ์›๊ฐ€์ž… ์„ฑ๊ณต
    $_SESSION['success_message'] = "ํšŒ์›๊ฐ€์ž…์ด ์„ฑ๊ณต์ ์œผ๋กœ ์™„๋ฃŒ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.";
    header('Location: login.php'); // ์„ฑ๊ณต ์‹œ ๋กœ๊ทธ์ธ ํŽ˜์ด์ง€๋กœ ์ด๋™
    exit();
} else {
    // ํšŒ์›๊ฐ€์ž… ์‹คํŒจ
    $_SESSION['error_message'] = "ํšŒ์›๊ฐ€์ž…์— ์‹คํŒจํ–ˆ์Šต๋‹ˆ๋‹ค. ๋‹ค์‹œ ์‹œ๋„ํ•ด์ฃผ์„ธ์š”. ์˜ค๋ฅ˜: " . $stmt->error;
    header('Location: register.php');
    exit();
}

// ์—ฐ๊ฒฐ ์ข…๋ฃŒ
$stmt->close();
$conn->close();
?>







4. ๋ฐ์ดํ„ฐ ์œ ํšจ์„ฑ ๊ฒ€์‚ฌ ์ƒ์„ธ ์„ค๋ช…

uploadImage

register_process.php์—์„œ ์‚ฌ์šฉ๋œ ์ฃผ์š” #๋ฐ์ดํ„ฐ #์œ ํšจ์„ฑ #๊ฒ€์‚ฌ ๊ธฐ๋ฒ•์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

  • trim(): ์‚ฌ์šฉ์ž ์ž…๋ ฅ์˜ ์•ž๋’ค ๊ณต๋ฐฑ์„ ์ œ๊ฑฐํ•˜์—ฌ ์ผ๊ด€๋œ ๋ฐ์ดํ„ฐ๋ฅผ ์ฒ˜๋ฆฌํ•ฉ๋‹ˆ๋‹ค.

  • empty(): ํ•„์ˆ˜ ํ•„๋“œ๊ฐ€ ๋น„์–ด ์žˆ๋Š”์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.

  • preg_match(): #์ •๊ทœํ‘œํ˜„์‹์„ ์‚ฌ์šฉํ•˜์—ฌ ์•„์ด๋””๊ฐ€ ํŠน์ • ํŒจํ„ด(์˜๋ฌธ, ์ˆซ์ž 4~20์ž)์„ ๋”ฐ๋ฅด๋Š”์ง€ ๊ฒ€์‚ฌํ•ฉ๋‹ˆ๋‹ค.

  • strlen(): ๋น„๋ฐ€๋ฒˆํ˜ธ์˜ ์ตœ์†Œ ๊ธธ์ด๋ฅผ ๊ฒ€์‚ฌํ•ฉ๋‹ˆ๋‹ค.

  • filter_var($email, FILTER_VALIDATE_EMAIL): #PHP ๋‚ด์žฅ ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ด๋ฉ”์ผ ์ฃผ์†Œ์˜ ํ˜•์‹์ด ์œ ํšจํ•œ์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.

  • #๋น„๋ฐ€๋ฒˆํ˜ธ ์ผ์น˜ ํ™•์ธ: password === confirm_password๋ฅผ ํ†ตํ•ด ๋‘ ๋น„๋ฐ€๋ฒˆํ˜ธ ์ž…๋ ฅ์ด ์ผ์น˜ํ•˜๋Š”์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.

  • #์•„์ด๋”” ์ค‘๋ณต ํ™•์ธ: ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ๋™์ผํ•œ ์•„์ด๋””๊ฐ€ ์ด๋ฏธ ์กด์žฌํ•˜๋Š”์ง€ ์ฟผ๋ฆฌ๋ฅผ ํ†ตํ•ด ํ™•์ธํ•ฉ๋‹ˆ๋‹ค. #Prepared #Statement๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ #SQL #Injection ๊ณต๊ฒฉ์„ ๋ฐฉ์ง€ํ•˜๋Š” ๊ฒƒ์ด ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค.







5. ๋น„๋ฐ€๋ฒˆํ˜ธ ํ•ด์‹ฑ (Hashing)

uploadImage

#๋น„๋ฐ€๋ฒˆํ˜ธ๋ฅผ #ํ‰๋ฌธ์œผ๋กœ #๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์ €์žฅํ•˜๋Š” ๊ฒƒ์€ #๋งค์šฐ #์œ„ํ—˜ํ•ฉ๋‹ˆ๋‹ค. ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๊ฐ€ ์œ ์ถœ๋  ๊ฒฝ์šฐ ๋ชจ๋“  ์‚ฌ์šฉ์ž ๋น„๋ฐ€๋ฒˆํ˜ธ๊ฐ€ ๋…ธ์ถœ๋˜๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. ์ด๋ฅผ ๋ฐฉ์ง€ํ•˜๊ธฐ ์œ„ํ•ด #๋น„๋ฐ€๋ฒˆํ˜ธ #ํ•ด์‹ฑ์ด ํ•„์ˆ˜์ ์ž…๋‹ˆ๋‹ค.

#PHP์—์„œ๋Š” password_hash() ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋น„๋ฐ€๋ฒˆํ˜ธ๋ฅผ ์•ˆ์ „ํ•˜๊ฒŒ ํ•ด์‹ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

PHP

$hashed_password = password_hash($password, PASSWORD_BCRYPT);

  • password_hash(): ์ฃผ์–ด์ง„ ๋ฌธ์ž์—ด์„ ํ•ด์‹ฑํ•ฉ๋‹ˆ๋‹ค.

  • PASSWORD_BCRYPT: bcrypt #์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์‚ฌ์šฉํ•˜์—ฌ ํ•ด์‹ฑํ•ฉ๋‹ˆ๋‹ค. bcrypt๋Š” ํ˜„์žฌ ๊ฐ€์žฅ ๋„๋ฆฌ ์‚ฌ์šฉ๋˜๊ณ  #์•ˆ์ „ํ•˜๋‹ค๊ณ  ํ‰๊ฐ€๋ฐ›๋Š” ํ•ด์‹ฑ ์•Œ๊ณ ๋ฆฌ์ฆ˜ ์ค‘ ํ•˜๋‚˜์ž…๋‹ˆ๋‹ค. ์ด ํ•จ์ˆ˜๋Š” #์ž๋™์œผ๋กœ #์†”ํŠธ(salt)๋ฅผ ์ƒ์„ฑํ•˜์—ฌ ํ•ด์‹ฑ ๊ฒฐ๊ณผ์— ํฌํ•จ์‹œํ‚ค๋ฏ€๋กœ, ๋™์ผํ•œ ๋น„๋ฐ€๋ฒˆํ˜ธ๋ผ๋„ ๋งค๋ฒˆ ๋‹ค๋ฅธ ํ•ด์‹œ ๊ฐ’์„ ๊ฐ€์ง€๊ฒŒ ๋˜์–ด #๋ ˆ์ธ๋ณด์šฐ #ํ…Œ์ด๋ธ” ๊ณต๊ฒฉ ๋“ฑ์„ ๋ฐฉ์ง€ํ•ฉ๋‹ˆ๋‹ค.

๋‚˜์ค‘์— ๋กœ๊ทธ์ธ ์‹œ์—๋Š” password_verify() ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์‚ฌ์šฉ์ž๊ฐ€ ์ž…๋ ฅํ•œ ๋น„๋ฐ€๋ฒˆํ˜ธ์™€ ํ•ด์‹ฑ๋œ ๋น„๋ฐ€๋ฒˆํ˜ธ๋ฅผ ๋น„๊ตํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.







6. ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ํ…Œ์ด๋ธ” ์ƒ์„ฑ (SQL)

uploadImage

์œ„ PHP ์ฝ”๋“œ๊ฐ€ ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ๋™์ž‘ํ•˜๋ ค๋ฉด your_database_name ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๋‚ด์— users ํ…Œ์ด๋ธ”์ด ์ƒ์„ฑ๋˜์–ด ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๋‹ค์Œ์€ users ํ…Œ์ด๋ธ”์„ ์ƒ์„ฑํ•˜๋Š” #SQL ์ฟผ๋ฆฌ ์˜ˆ์‹œ์ž…๋‹ˆ๋‹ค.

SQL

CREATE TABLE users (
    id INT AUTO_INCREMENT PRIMARY KEY,
    username VARCHAR(255) NOT NULL UNIQUE,
    password VARCHAR(255) NOT NULL,
    email VARCHAR(255) NOT NULL UNIQUE,
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);

  • id: ๊ฐ ์‚ฌ์šฉ์ž๋ฅผ ๊ณ ์œ ํ•˜๊ฒŒ ์‹๋ณ„ํ•˜๋Š” #๊ธฐ๋ณธ #ํ‚ค์ž…๋‹ˆ๋‹ค.

  • username: ์‚ฌ์šฉ์ž ์•„์ด๋””๋ฅผ ์ €์žฅํ•ฉ๋‹ˆ๋‹ค. UNIQUE ์ œ์•ฝ ์กฐ๊ฑด์„ ์ถ”๊ฐ€ํ•˜์—ฌ ์ค‘๋ณต๋œ ์•„์ด๋””๋ฅผ ๋ฐฉ์ง€ํ•ฉ๋‹ˆ๋‹ค.

  • password: #ํ•ด์‹ฑ๋œ ๋น„๋ฐ€๋ฒˆํ˜ธ๋ฅผ ์ €์žฅํ•ฉ๋‹ˆ๋‹ค. VARCHAR(255)๋Š” bcrypt ํ•ด์‹œ ๊ฐ’์„ ์ €์žฅํ•˜๊ธฐ์— ์ถฉ๋ถ„ํ•œ ๊ธธ์ด์ž…๋‹ˆ๋‹ค.

  • email: ์‚ฌ์šฉ์ž ์ด๋ฉ”์ผ์„ ์ €์žฅํ•ฉ๋‹ˆ๋‹ค. ์—ญ์‹œ UNIQUE ์ œ์•ฝ ์กฐ๊ฑด์„ ์ ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  • created_at: ์‚ฌ์šฉ์ž ๊ณ„์ •์ด ์ƒ์„ฑ๋œ ์‹œ๊ฐ„์„ ๊ธฐ๋กํ•ฉ๋‹ˆ๋‹ค.







๊ฒฐ๋ก 


์ด๋ฒˆ ํฌ์ŠคํŒ…์—์„œ๋Š” #PHP๋ฅผ ์ด์šฉํ•œ #ํšŒ์›๊ฐ€์ž… ๊ธฐ๋Šฅ ๊ตฌํ˜„์˜ ํ•ต์‹ฌ์ธ #๋ฐ์ดํ„ฐ #์œ ํšจ์„ฑ ๊ฒ€์‚ฌ์™€ #๋น„๋ฐ€๋ฒˆํ˜ธ #ํ•ด์‹ฑ์— ๋Œ€ํ•ด ์‚ดํŽด๋ณด์•˜์Šต๋‹ˆ๋‹ค. ์•ˆ์ „ํ•˜๊ณ  ๊ฒฌ๊ณ ํ•œ ํšŒ์›๊ฐ€์ž… ์‹œ์Šคํ…œ์„ ๊ตฌ์ถ•ํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ์ด๋Ÿฌํ•œ #๋ณด์•ˆ ์ธก๋ฉด์„ ์ฒ ์ €ํžˆ ๊ณ ๋ คํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.