백엔드 개발 일지에서는 오늘 PHP를 사용하여 간단한 REST API를 만드는 방법과 간단한 인증 시스템을 구현하는 방법에 대해 설명하겠습니다. 이 글에서는 PHP의 기본적인 사용법을 알고 있음을 전제로 하며, 실질적인 예제를 통해 RESTful API와 인증을 구현해보겠습니다.

1. 환경 설정

우선, PHP가 설치된 환경이 필요합니다. 로컬 환경에서 XAMPP 또는 MAMP를 사용하여 PHP 서버를 설정할 수 있습니다. 데이터베이스로는 MySQL을 사용할 것이며, API의 동작을 위한 데이터베이스 테이블을 생성해야 합니다.

CREATE DATABASE api_example;

USE api_example;

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

2. 사용자 등록 API

사용자를 등록하기 위한 간단한 API를 만들어보겠습니다. 사용자 정보를 JSON 형식으로 전송받고, 데이터베이스에 저장하는 기능을 구현합니다.

<?php
header('Content-Type: application/json');
$conn = new mysqli('localhost', 'username', 'password', 'api_example');

if ($conn->connect_error) {
    die(json_encode(['error' => 'Database connection failed']));
}

if ($_SERVER['REQUEST_METHOD'] == 'POST') {
    $data = json_decode(file_get_contents('php://input'), true);
    $username = $data['username'];
    $password = password_hash($data['password'], PASSWORD_BCRYPT);

    $stmt = $conn->prepare("INSERT INTO users (username, password) VALUES (?, ?)");
    $stmt->bind_param("ss", $username, $password);

    if ($stmt->execute()) {
        echo json_encode(['message' => 'User registered successfully']);
    } else {
        echo json_encode(['error' => 'User registration failed']);
    }

    $stmt->close();
}
$conn->close();
?>

위의 코드에서 사용자의 정보를 JSON으로 받아 데이터베이스에 저장하는 API를 작성했습니다. 비밀번호는 password_hash() 함수를 사용해 해싱하여 저장합니다.

3. 사용자 인증 API

다음으로, 사용자가 로그인할 수 있도록 인증 API를 구현합니다. 사용자가 입력한 비밀번호와 데이터베이스에 저장된 해시된 비밀번호를 비교하여 인증합니다.

<?php
header('Content-Type: application/json');
$conn = new mysqli('localhost', 'username', 'password', 'api_example');

if ($conn->connect_error) {
    die(json_encode(['error' => 'Database connection failed']));
}

if ($_SERVER['REQUEST_METHOD'] == 'POST') {
    $data = json_decode(file_get_contents('php://input'), true);
    $username = $data['username'];
    $password = $data['password'];

    $stmt = $conn->prepare("SELECT password FROM users WHERE username = ?");
    $stmt->bind_param("s", $username);
    $stmt->execute();
    $stmt->store_result();
    $stmt->bind_result($hashedPassword);
    $stmt->fetch();

    if ($stmt->num_rows > 0 && password_verify($password, $hashedPassword)) {
        echo json_encode(['message' => 'Login successful']);
    } else {
        echo json_encode(['error' => 'Invalid username or password']);
    }

    $stmt->close();
}
$conn->close();
?>

위 코드에서 사용자가 입력한 정보와 데이터베이스에 저장된 정보를 비교하여 성공적인 로그인 여부를 판단합니다. 비밀번호 검증은 password_verify() 함수를 사용합니다.

4. API 테스트

이제 Postman과 같은 API 테스트 도구를 사용하여 API를 테스트할 수 있습니다. 사용자 등록 API에 POST 요청을 보내 사용자 정보를 등록하고, 로그인 API에 POST 요청을 보내 인증을 테스트합니다.

  • 사용자 등록 요청 예시:
  • - URL: http://localhost/api/register.php - Body: JSON

        {
            "username": "testuser",
            "password": "testpassword"
        }
  • 로그인 요청 예시:
- URL: http://localhost/api/login.php

- Body: JSON

    {
        "username": "testuser",
        "password": "testpassword"
    }

마무리

이 글에서는 PHP를 사용하여 간단한 REST API와 사용자 인증 시스템을 구현하는 방법을 살펴보았습니다. 실제 프로젝트에서는 더욱 복잡한 기능과 보안 요소를 추가해야 하지만, 이번 예제를 통해 기본적인 구조와 흐름을 이해할 수 있었기를 바랍니다. 앞으로 더 발전된 API를 만들기 위해 OAuth 또는 JWT와 같은 인증 방법을 고려해 보시는 것도 좋습니다.