본문 바로가기
PHP로 웹사이트 만들기

9. PHP와 MySQL로 게시판 만들기: 로그인 및 회원가입 구현하기

by blogfine 2025. 1. 30.

로그인 및 회원가입 구현하기: PHP와 MySQL로 인증 시스템 만들기

웹사이트에서 사용자 인증 시스템은 중요한 기능입니다. 사용자가 로그인하고 회원가입을 할 수 있도록 기능을 구현하면, 게시판이나 커뮤니티 시스템에서 사용자 관리가 가능해집니다. 이 글에서는 PHP와 MySQL을 이용하여 로그인 및 회원가입 기능을 구현하는 방법을 단계별로 설명하겠습니다.

1. 로그인 및 회원가입 시스템 구축의 기초

로그인 및 회원가입 시스템을 구축하려면, 사용자 정보를 저장할 수 있는 데이터베이스와 사용자 인증을 위한 보안 메커니즘이 필요합니다. 이를 위해 MySQL에 사용자 정보를 저장할 테이블을 만들고, PHP로 사용자의 입력을 처리합니다.

먼저, MySQL 데이터베이스에서 사용자 정보를 저장할 테이블을 생성합니다. 이 테이블에는 사용자 아이디, 비밀번호, 이메일 등의 정보가 포함됩니다.


-- 사용자 테이블 생성
CREATE TABLE users (
    id INT AUTO_INCREMENT PRIMARY KEY,
    username VARCHAR(50) NOT NULL UNIQUE,
    password VARCHAR(255) NOT NULL,
    email VARCHAR(100) NOT NULL,
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);

이 테이블은 사용자 아이디, 비밀번호, 이메일을 저장하며, `password`는 해시된 값을 저장해야 보안을 강화할 수 있습니다.

2. 회원가입 기능 구현하기

회원가입 기능은 사용자가 자신의 정보를 입력하여 새로운 계정을 만들 수 있게 합니다. 사용자가 입력한 비밀번호는 반드시 안전하게 해시하여 저장해야 하며, `password_hash()` 함수를 사용하여 비밀번호를 해시할 수 있습니다.

다음은 사용자 회원가입을 처리하는 PHP 코드입니다:

<?php
// register.php
include('config.php');

// 사용자가 제출한 데이터 받기
$username = $_POST['username'];
$password = $_POST['password'];
$email = $_POST['email'];

// 비밀번호 해시화
$hashed_password = password_hash($password, PASSWORD_DEFAULT);

// SQL 쿼리 작성
$sql = "INSERT INTO users (username, password, email) VALUES ('$username', '$hashed_password', '$email')";

// 쿼리 실행
if ($conn->query($sql) === TRUE) {
    echo "회원가입이 완료되었습니다.";
} else {
    echo "오류: " . $conn->error;
}

// 연결 종료
$conn->close();
?>

위 코드에서는 사용자가 입력한 아이디, 비밀번호, 이메일 정보를 받아 `password_hash()` 함수를 사용해 비밀번호를 해시한 후, 이를 데이터베이스에 저장합니다. 이 방식은 비밀번호를 안전하게 처리하는 방법입니다.

3. 로그인 기능 구현하기

로그인 기능은 사용자가 등록된 아이디와 비밀번호를 입력하여 인증하는 과정입니다. 사용자가 입력한 비밀번호는 `password_verify()` 함수를 사용하여 데이터베이스에 저장된 해시된 비밀번호와 비교하여 인증합니다.

다음은 로그인 기능을 구현하는 PHP 코드입니다:

<?php
// login.php
include('config.php');

// 사용자가 제출한 데이터 받기
$username = $_POST['username'];
$password = $_POST['password'];

// SQL 쿼리 작성
$sql = "SELECT * FROM users WHERE username = '$username'";
$result = $conn->query($sql);

// 사용자 인증
if ($result->num_rows > 0) {
    $row = $result->fetch_assoc();
    if (password_verify($password, $row['password'])) {
        echo "로그인 성공!";
        // 세션 시작 및 사용자 정보 저장 (선택사항)
        session_start();
        $_SESSION['user_id'] = $row['id'];
        $_SESSION['username'] = $row['username'];
    } else {
        echo "비밀번호가 일치하지 않습니다.";
    }
} else {
    echo "사용자를 찾을 수 없습니다.";
}

// 연결 종료
$conn->close();
?>

위 코드는 사용자가 입력한 아이디와 비밀번호를 받아 데이터베이스에서 해당 사용자의 정보를 조회하고, `password_verify()` 함수를 사용하여 입력된 비밀번호가 해시된 비밀번호와 일치하는지 확인합니다. 로그인에 성공하면 세션을 시작하여 사용자의 정보를 저장할 수 있습니다.

4. 세션 관리와 로그인 상태 유지하기

로그인 상태를 유지하려면 세션을 사용해야 합니다. 세션을 통해 사용자가 로그인한 상태를 추적하고, 로그인 후에도 인증된 상태를 유지할 수 있습니다.

로그인 성공 후 세션을 시작하고, 사용자의 정보를 세션 변수에 저장합니다. 이 세션 정보를 통해 사용자가 로그인이 유지되며, 다른 페이지에서도 로그인 여부를 확인할 수 있습니다. 로그인된 사용자만 접근할 수 있는 페이지를 제한하는 기능도 구현할 수 있습니다.

<?php
// 로그인 확인
session_start();

if (!isset($_SESSION['user_id'])) {
    echo "로그인 후에 이용할 수 있습니다.";
    exit;
}
?>

위 코드는 사용자가 로그인되지 않은 상태에서 페이지에 접근할 경우, 로그인 화면으로 리다이렉트되거나 접근을 제한하는 방법을 보여줍니다.

5. 회원가입과 로그인에서의 오류 처리

회원가입 및 로그인 과정에서 발생할 수 있는 오류를 처리하는 것이 중요합니다. 예를 들어, 사용자가 이미 등록된 아이디를 입력할 경우, "이미 사용 중인 아이디입니다"라는 메시지를 출력해야 합니다. 또한, 로그인 실패 시 "아이디 또는 비밀번호가 일치하지 않습니다"라는 메시지를 보여줄 수 있습니다.

오류 메시지를 출력하고, 사용자가 올바른 입력을 할 수 있도록 안내하는 것이 중요합니다.

6. 마무리

이번 글에서는 PHP와 MySQL을 이용하여 로그인 및 회원가입 기능을 구현하는 방법을 알아보았습니다. 이 시스템은 기본적인 사용자 인증을 제공하며, 게시판 또는 커뮤니티 사이트에서 사용자 관리의 핵심이 됩니다. 비밀번호 암호화, 세션 관리, 오류 처리 등 중요한 보안 요소를 고려하여 시스템을 구축할 수 있습니다.

로그인 및 회원가입 기능을 구현한 후에는 더 많은 보안 기능을 추가하거나, 회원 정보 수정, 비밀번호 재설정 등의 기능을 확장할 수 있습니다. 이를 통해 더욱 안전하고 편리한 사용자 인증 시스템을 만들 수 있습니다.