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를 개발할 수 있습니다.
'문서 및 기타 > 이것저것' 카테고리의 다른 글
디자인 패턴: 싱글턴 패턴의 이해와 구현 (0) | 2025.02.18 |
---|---|
Unity 기초: 게임 개발을 위한 첫걸음 (0) | 2025.02.18 |
Web3.0과 블록체인 기술 이해하기 (0) | 2025.02.17 |
디버깅을 잘하는 개발자의 습관: 효과적인 문제 해결 방법 (0) | 2025.02.16 |
데이터 시각화 도구의 종류와 사용법: 완벽 가이드 (1) | 2025.02.16 |