약 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
아직 댓글이 없습니다. 첫 댓글을 남겨보세요.