반응형

1. CMS란 무엇인가?

CMS(Content Management System)는 웹사이트의 콘텐츠를 쉽게 생성, 관리, 수정할 수 있도록 돕는 시스템입니다. 대표적인 CMS로는 워드프레스(WordPress), Joomla, Drupal 등이 있지만, 이번 글에서는 PHP와 MySQL을 사용하여 간단한 CMS를 직접 만들어보겠습니다.

2. 프로젝트 개요

우리가 만들 CMS는 다음과 같은 기능을 갖출 것입니다:

  • 사용자 로그인 및 관리
  • 게시글 작성, 수정, 삭제
  • 데이터베이스(MySQL)를 이용한 콘텐츠 저장
  • 관리 페이지(Admin Panel)

3. 개발 환경 설정

3.1 필수 도구

CMS를 개발하기 위해 아래의 도구가 필요합니다.

  • PHP (7.x 이상)
  • MySQL 또는 MariaDB
  • Apache 또는 Nginx 웹 서버
  • phpMyAdmin (선택 사항)
  • 코드 편집기 (VS Code, PhpStorm 등)

3.2 데이터베이스 설정

CMS의 데이터를 저장할 MySQL 데이터베이스를 생성합니다.

CREATE DATABASE simple_cms;
USE simple_cms;

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

CREATE TABLE posts (
    id INT AUTO_INCREMENT PRIMARY KEY,
    title VARCHAR(255) NOT NULL,
    content TEXT NOT NULL,
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);

4. PHP로 CMS 개발하기

4.1 데이터베이스 연결

<?php
$host = 'localhost';
$dbname = 'simple_cms';
$username = 'root';
$password = '';

try {
    $pdo = new PDO("mysql:host=$host;dbname=$dbname;charset=utf8", $username, $password);
    $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
} catch (PDOException $e) {
    die("데이터베이스 연결 실패: " . $e->getMessage());
}
?>

4.2 사용자 로그인 시스템 만들기

4.2.1 회원가입 페이지 (register.php)

<?php
include 'db.php';
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
    $username = $_POST['username'];
    $password = password_hash($_POST['password'], PASSWORD_BCRYPT);

    $stmt = $pdo->prepare("INSERT INTO users (username, password) VALUES (?, ?)");
    $stmt->execute([$username, $password]);
    echo "회원가입 성공!";
}
?>

<form method="POST">
    <input type="text" name="username" placeholder="사용자명" required>
    <input type="password" name="password" placeholder="비밀번호" required>
    <button type="submit">회원가입</button>
</form>

4.2.2 로그인 페이지 (login.php)

<?php
include 'db.php';
session_start();

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

    $stmt = $pdo->prepare("SELECT * FROM users WHERE username = ?");
    $stmt->execute([$username]);
    $user = $stmt->fetch();

    if ($user && password_verify($password, $user['password'])) {
        $_SESSION['user'] = $user;
        header("Location: admin.php");
        exit;
    } else {
        echo "잘못된 로그인 정보입니다.";
    }
}
?>

<form method="POST">
    <input type="text" name="username" placeholder="사용자명" required>
    <input type="password" name="password" placeholder="비밀번호" required>
    <button type="submit">로그인</button>
</form>

4.3 게시글 관리 기능

4.3.1 게시글 추가 페이지 (add_post.php)

<?php
include 'db.php';
session_start();
if (!isset($_SESSION['user'])) {
    header("Location: login.php");
    exit;
}

if ($_SERVER['REQUEST_METHOD'] === 'POST') {
    $title = $_POST['title'];
    $content = $_POST['content'];

    $stmt = $pdo->prepare("INSERT INTO posts (title, content) VALUES (?, ?)");
    $stmt->execute([$title, $content]);
    echo "게시글이 추가되었습니다.";
}
?>

<form method="POST">
    <input type="text" name="title" placeholder="제목" required>
    <textarea name="content" placeholder="내용" required></textarea>
    <button type="submit">게시글 추가</button>
</form>

4.3.2 게시글 목록 페이지 (index.php)

<?php
include 'db.php';
$stmt = $pdo->query("SELECT * FROM posts ORDER BY created_at DESC");
$posts = $stmt->fetchAll();
?>

<?php foreach ($posts as $post): ?>
    <h2><?= htmlspecialchars($post['title']) ?></h2>
    <p><?= nl2br(htmlspecialchars($post['content'])) ?></p>
    <hr>
<?php endforeach; ?>

5. 추가 기능 및 확장

  • 댓글 시스템 추가 가능
  • 파일 업로드 기능 (이미지, 문서 등)
  • 카테고리 및 태그 기능
  • 관리자 페이지 스타일링 (CSS, Bootstrap 활용)

6. 결론

위의 과정을 통해 기본적인 CMS를 만들었습니다. 더 나아가 보안 강화, UI 개선, REST API 연동 등을 추가하면 더욱 발전된 CMS를 개발할 수 있습니다.

반응형

+ Recent posts