์จ๋ผ์ธ ๊ฐ์
>
๐ PHP ์ค๊ธ - 2์ฃผ์ฐจ: ํ์๊ฐ์
๋ฐ ๋ก๊ทธ์ธ ์์คํ
๊ตฌํ - 02 ํ์๊ฐ์
๊ธฐ๋ฅ (๋ฐ์ดํฐ ์ ํจ์ฑ ๊ฒ์ฌ, ๋น๋ฐ๋ฒํธ ํด์ฑ)
์๋ฃ ๊ธฐ๋ณธ์ ๋ณด
์ฃผ์ ํ๋ก๊ทธ๋จ ์คํ
- ํ์ : 10.0
- ๋ผ์ด์ ์ค: free
ํผ๋๋ฐฑ ๋ฐ ๋ค์ด๋ก๋
- ์ฌ์ฉ์ ํ์ : 10.0
- ์กฐํ: 124
- ๋ค์ด: 1
์ ์กฐ์ฌ ๋ฐ ๋ฑ๋ก ์ ๋ณด
- ์ ์์ฌ: LUZENSOFT
- ๋ฑ๋ก์ผ: 2025-07-17 15:28:53
-
- ์ค๋ช
๐ PHP ์ค๊ธ - 2์ฃผ์ฐจ: ํ์๊ฐ์
๋ฐ ๋ก๊ทธ์ธ ์์คํ
๊ตฌํ - 02 ํ์๊ฐ์
๊ธฐ๋ฅ (๋ฐ์ดํฐ ์ ํจ์ฑ ๊ฒ์ฌ, ๋น๋ฐ๋ฒํธ ํด์ฑ)
์ด๋ฒ ํฌ์คํ
์์๋ ์ง๋์ฃผ์ ์ด์ด #ํ์๊ฐ์
๋ฐ #๋ก๊ทธ์ธ ์์คํ
๊ตฌํ์ ๋ ๋ฒ์งธ ๋จ๊ณ๋ก, #ํ์๊ฐ์
๊ธฐ๋ฅ์ ์ด์ ์ ๋ง์ถฐ๋ณด๊ฒ ์ต๋๋ค. ํนํ, ์ฌ์ฉ์๊ฐ ์
๋ ฅํ #๋ฐ์ดํฐ์ #์ ํจ์ฑ์ ๊ฒ์ฌํ๊ณ #๋น๋ฐ๋ฒํธ๋ฅผ #์์ ํ๊ฒ #ํด์ฑํ๋ ๋ฐฉ๋ฒ์ ๋ํด ์์ธํ ์์๋ณด๊ฒ ์ต๋๋ค.
1. ํ์๊ฐ์
ํผ (HTML)

ํ์๊ฐ์
๊ธฐ๋ฅ์ ๊ตฌํํ๊ธฐ ์ํด์๋ ๋จผ์ ์ฌ์ฉ์๋ก๋ถํฐ ํ์ํ ์ ๋ณด๋ฅผ ์
๋ ฅ๋ฐ์ #HTML #ํผ์ด ํ์ํฉ๋๋ค. ์ผ๋ฐ์ ์ผ๋ก #์์ด๋, #๋น๋ฐ๋ฒํธ, #๋น๋ฐ๋ฒํธ ํ์ธ, #์ด๋ฉ์ผ ๋ฑ์ ํ๋๊ฐ ํฌํจ๋ฉ๋๋ค.
HTML
ํ์๊ฐ์
ํ์๊ฐ์
' . htmlspecialchars($_SESSION['error_message']) . '';
unset($_SESSION['error_message']); // ๋ฉ์์ง ํ์ ํ ์ญ์
}
?>
2. ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ฐ๊ฒฐ ์ค์

ํ์ ์ ๋ณด๋ฅผ ์ ์ฅํ #๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ฐ๊ฒฐํ๋ ์ค์ ์ด ํ์ํฉ๋๋ค. db_config.php ํ์ผ์ ํตํด #๋ฐ์ดํฐ๋ฒ ์ด์ค #์ฐ๊ฒฐ์ ๊ด๋ฆฌํ๋ ๊ฒ์ด ์ข์ต๋๋ค.
PHP
connect_error) {
die("๋ฐ์ดํฐ๋ฒ ์ด์ค ์ฐ๊ฒฐ ์คํจ: " . $conn->connect_error);
}
// ๋ฌธ์ ์ธ์ฝ๋ฉ ์ค์ (UTF-8)
$conn->set_charset("utf8mb4");
?>
3. ํ์๊ฐ์
์ฒ๋ฆฌ ๋ก์ง (PHP)

register_process.php ํ์ผ์์ ์ค์ ํ์๊ฐ์
์ฒ๋ฆฌ ๋ก์ง์ ๊ตฌํํฉ๋๋ค. ์ด ๋ถ๋ถ์์๋ ๋ค์ ๋จ๊ณ๋ฅผ ๊ฑฐ์นฉ๋๋ค:
#๋ฐ์ดํฐ ์ ํจ์ฑ ๊ฒ์ฌ: ์
๋ ฅ๋ ๋ฐ์ดํฐ๊ฐ #์ ํจํ์ง ํ์ธํฉ๋๋ค.
#๋น๋ฐ๋ฒํธ #ํด์ฑ: ๋ณด์์ ์ํด ๋น๋ฐ๋ฒํธ๋ฅผ ํด์ฑํฉ๋๋ค.
#๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ ์ฅ: ์ ํจํ๊ณ ํด์ฑ๋ ๋ฐ์ดํฐ๋ฅผ #๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ ์ฅํฉ๋๋ค.
PHP
', $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. ๋ฐ์ดํฐ ์ ํจ์ฑ ๊ฒ์ฌ ์์ธ ์ค๋ช

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)

#๋น๋ฐ๋ฒํธ๋ฅผ #ํ๋ฌธ์ผ๋ก #๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ ์ฅํ๋ ๊ฒ์ #๋งค์ฐ #์ํํฉ๋๋ค. ๋ฐ์ดํฐ๋ฒ ์ด์ค๊ฐ ์ ์ถ๋ ๊ฒฝ์ฐ ๋ชจ๋ ์ฌ์ฉ์ ๋น๋ฐ๋ฒํธ๊ฐ ๋
ธ์ถ๋๊ธฐ ๋๋ฌธ์
๋๋ค. ์ด๋ฅผ ๋ฐฉ์งํ๊ธฐ ์ํด #๋น๋ฐ๋ฒํธ #ํด์ฑ์ด ํ์์ ์
๋๋ค.
#PHP์์๋ password_hash() ํจ์๋ฅผ ์ฌ์ฉํ์ฌ ๋น๋ฐ๋ฒํธ๋ฅผ ์์ ํ๊ฒ ํด์ฑํ ์ ์์ต๋๋ค.
PHP
$hashed_password = password_hash($password, PASSWORD_BCRYPT);
password_hash(): ์ฃผ์ด์ง ๋ฌธ์์ด์ ํด์ฑํฉ๋๋ค.
PASSWORD_BCRYPT: bcrypt #์๊ณ ๋ฆฌ์ฆ์ ์ฌ์ฉํ์ฌ ํด์ฑํฉ๋๋ค. bcrypt๋ ํ์ฌ ๊ฐ์ฅ ๋๋ฆฌ ์ฌ์ฉ๋๊ณ #์์ ํ๋ค๊ณ ํ๊ฐ๋ฐ๋ ํด์ฑ ์๊ณ ๋ฆฌ์ฆ ์ค ํ๋์
๋๋ค. ์ด ํจ์๋ #์๋์ผ๋ก #์ํธ(salt)๋ฅผ ์์ฑํ์ฌ ํด์ฑ ๊ฒฐ๊ณผ์ ํฌํจ์ํค๋ฏ๋ก, ๋์ผํ ๋น๋ฐ๋ฒํธ๋ผ๋ ๋งค๋ฒ ๋ค๋ฅธ ํด์ ๊ฐ์ ๊ฐ์ง๊ฒ ๋์ด #๋ ์ธ๋ณด์ฐ #ํ
์ด๋ธ ๊ณต๊ฒฉ ๋ฑ์ ๋ฐฉ์งํฉ๋๋ค.
๋์ค์ ๋ก๊ทธ์ธ ์์๋ password_verify() ํจ์๋ฅผ ์ฌ์ฉํ์ฌ ์ฌ์ฉ์๊ฐ ์
๋ ฅํ ๋น๋ฐ๋ฒํธ์ ํด์ฑ๋ ๋น๋ฐ๋ฒํธ๋ฅผ ๋น๊ตํ๊ฒ ๋ฉ๋๋ค.
6. ๋ฐ์ดํฐ๋ฒ ์ด์ค ํ
์ด๋ธ ์์ฑ (SQL)

์ 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๋ฅผ ์ด์ฉํ #ํ์๊ฐ์
๊ธฐ๋ฅ ๊ตฌํ์ ํต์ฌ์ธ #๋ฐ์ดํฐ #์ ํจ์ฑ ๊ฒ์ฌ์ #๋น๋ฐ๋ฒํธ #ํด์ฑ์ ๋ํด ์ดํด๋ณด์์ต๋๋ค. ์์ ํ๊ณ ๊ฒฌ๊ณ ํ ํ์๊ฐ์
์์คํ
์ ๊ตฌ์ถํ๊ธฐ ์ํด์๋ ์ด๋ฌํ #๋ณด์ ์ธก๋ฉด์ ์ฒ ์ ํ ๊ณ ๋ คํด์ผ ํฉ๋๋ค.
์ด ์นดํ
๊ณ ๋ฆฌ Navigation
์ ์ฒด ์นดํ
๊ณ ๋ฆฌ Navigation