7.2 로그인 기능 구현

약 6분

본문 듣기
읽기 설정

글자 크기

줄 간격

글꼴

7.2 로그인 기능 구현

로그인 기능은 웹 애플리케이션에서 사용자의 인증을 위한 중요한 프로세스입니다. 사용자가 올바른 자격 증명을 입력하여 시스템에 접근할 수 있게 하는 것이죠. 이 섹션에서는 로그인 기능을 구현하기 위해 필요한 전반적인 흐름과 필요한 코드 샘플을 제공하겠습니다.

1. 웹 개발 흐름 이해하기

로그인 프로세스는 다음과 같은 흐름으로 진행됩니다:

  • 사용자가 브라우저에서 로그인 폼을 제출합니다. (POST 요청)
  • 웹서버는 이 요청을 받고 PHP 스크립트를 실행합니다.
  • PHP는 데이터베이스에 연결하여 사용자가 입력한 정보와 일치하는 등록된 사용자가 있는지 확인합니다.
  • 인증에 성공하면 세션을 만들어 사용자의 로그인 상태를 유지합니다.
  • 마지막으로, 사용자는 권한이 있는 페이지로 리다이렉트됩니다.

2. 데이터베이스 테이블 생성

먼저 사용자의 데이터를 저장할 users 테이블을 생성합니다. MariaDB를 이용해 SQL을 실행한 결과는 다음과 같습니다:

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

3. 로그인 폼 구현

아래는 사용자가 로그인 정보를 입력할 수 있는 HTML 폼입니다:

<form action="login.php" method="POST">
    <label for="username">Username:</label>
    <input type="text" name="username" required>
    <label for="password">Password:</label>
    <input type="password" name="password" required>
    <button type="submit">Login</button>
</form>

4. PHP 로그인 처리

login.php 파일을 만들어서 사용자의 정보를 처리합니다:

<?php
session_start();
$pdo = new PDO('mysql:host=localhost;dbname=yourdbname', 'yourusername', 'yourpassword');

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

    // 사용자 정보 조회
    $stmt = $pdo->prepare('SELECT * FROM users WHERE username = :username');
    $stmt->execute(['username' => $username]);
    $user = $stmt->fetch();

    // 비밀번호 검증
    if ($user && password_verify($password, $user['password'])) {
        $_SESSION['user_id'] = $user['id'];
        header('Location: dashboard.php'); // 로그인 후 페이지로 리다이렉트
    } else {
        echo 'Invalid username or password.';
    }
}
?>

5. 문제 해결 및 보안 고려사항

로그인 기능을 구현할 때 유의해야 할 점은 보안입니다. SQL Injection을 방지하기 위해 PDO와 Prepared Statements를 사용했으며, 비밀번호는 password_hash()를 이용해 해시 방식으로 저장해야 합니다. 또한, CSRF 토큰을 사용하여 사용자가 본인의 의도와 다르게 요청되는 것을 방지해야 합니다.

예를 들어, 비밀번호 생성 시:

$hashedPassword = password_hash('user_password', PASSWORD_DEFAULT);

6. 실습 및 과제

이제 위의 내용을 바탕으로 로그인 기능을 실제로 구현해 보세요. 다음과 같은 추가 과제를 구현해 보시기 바랍니다:

  • 로그인 실패 시 사용자에게 적절한 메시지를 보여주기
  • 로그인 후 사용자의 세션 정보를 표시하기
  • 세션에서 로그아웃할 수 있는 기능 추가하기

이로써 로그인 기능 구현 단계를 마치겠습니다! 반영하여 실습할 수 있는 프로젝트를 진행해보세요.

댓글 0

댓글을 남기려면 로그인하세요.

아직 댓글이 없습니다. 첫 댓글을 남겨보세요.