본문 바로가기
PHP로 웹사이트 만들기

4. PHP와 MySQL로 게시판 만들기: PHP와 MySQL로 데이터베이스 설계하기

by blogfine 2025. 1. 25.

PHP와 MySQL로 데이터베이스 설계하기: 게시판의 테이블 구조 만들기

웹 개발에서 게시판 시스템을 구현할 때 중요한 부분 중 하나는 데이터베이스 설계입니다. 게시판에서 사용자들이 작성한 글, 댓글, 작성자 정보 등 다양한 데이터를 효율적으로 저장하고 관리하기 위해서는 잘 설계된 테이블 구조가 필요합니다. 이번 글에서는 PHP와 MySQL을 사용하여 게시판의 데이터베이스 테이블을 설계하는 방법을 단계별로 설명하겠습니다.

1. 게시판 데이터베이스 설계의 기본 개념

게시판의 데이터베이스 설계를 하기 전에, 게시판 시스템에서 어떤 데이터를 저장할 것인지 고민해봐야 합니다. 일반적으로 게시판 시스템은 다음과 같은 데이터가 필요합니다:

  • 게시글: 제목, 내용, 작성자, 작성일 등
  • 댓글: 댓글 내용, 작성자, 작성일 등
  • 사용자: 사용자 정보, 로그인 정보 등
  • 카테고리: 게시글을 분류할 수 있는 카테고리 정보

이러한 데이터를 효율적으로 저장하기 위해서는 정규화된 테이블 구조를 만드는 것이 좋습니다. 정규화는 데이터 중복을 최소화하고 데이터 일관성을 유지할 수 있게 도와줍니다.

2. 게시판 테이블 설계하기

게시판을 만들기 위한 첫 번째 단계는 MySQL에서 사용할 테이블을 설계하는 것입니다. 기본적으로 게시판에는 게시글을 저장하는 테이블과 댓글을 저장하는 테이블이 필요합니다. 그 외에도 사용자 정보를 관리하는 테이블과 카테고리 정보를 저장할 테이블도 고려할 수 있습니다.

게시글 테이블 설계

게시글 테이블은 사용자가 게시한 글의 제목, 내용, 작성자, 작성일 등을 저장합니다. 다음은 게시글을 저장할 테이블을 생성하는 SQL 명령어 예시입니다:


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

위의 SQL 명령어는 게시글을 저장하는 "posts" 테이블을 생성합니다. 주요 필드는 다음과 같습니다:

  • id: 게시글의 고유 ID (자동 증가)
  • title: 게시글의 제목
  • content: 게시글의 내용
  • author: 게시글 작성자
  • created_at: 게시글 작성일
  • updated_at: 게시글 수정일

댓글 테이블 설계

게시글에 대한 댓글을 저장하기 위한 테이블도 필요합니다. 댓글 테이블은 댓글의 내용, 작성자, 작성일 등 정보를 저장합니다. 댓글 테이블은 게시글 테이블과 연결되어야 하므로, 게시글의 id를 외래 키(foreign key)로 추가해야 합니다. 댓글 테이블을 생성하는 SQL 예시는 다음과 같습니다:


CREATE TABLE comments (
  id INT AUTO_INCREMENT PRIMARY KEY,
  post_id INT NOT NULL,
  content TEXT NOT NULL,
  author VARCHAR(100) NOT NULL,
  created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
  FOREIGN KEY (post_id) REFERENCES posts(id) ON DELETE CASCADE
);

댓글 테이블의 주요 필드는 다음과 같습니다:

  • id: 댓글의 고유 ID (자동 증가)
  • post_id: 댓글이 달린 게시글의 ID (외래 키)
  • content: 댓글 내용
  • author: 댓글 작성자
  • created_at: 댓글 작성일

여기서 중요한 점은 FOREIGN KEY 제약을 사용하여 "comments" 테이블의 post_id가 "posts" 테이블의 id와 연결된다는 것입니다. 이를 통해 댓글이 어느 게시글에 속하는지 명확하게 알 수 있습니다.

사용자 테이블 설계

게시판에서 사용자 인증 및 관리가 필요하다면 사용자 정보를 저장할 테이블도 설계해야 합니다. 사용자 테이블은 사용자의 이름, 이메일, 비밀번호 등을 저장합니다. 사용자 테이블을 생성하는 SQL 예시는 다음과 같습니다:


CREATE TABLE users (
  id INT AUTO_INCREMENT PRIMARY KEY,
  username VARCHAR(100) NOT NULL,
  email VARCHAR(255) NOT NULL UNIQUE,
  password VARCHAR(255) NOT NULL,
  created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);

사용자 테이블의 주요 필드는 다음과 같습니다:

  • id: 사용자의 고유 ID (자동 증가)
  • username: 사용자의 이름
  • email: 사용자의 이메일 (중복을 허용하지 않음)
  • password: 사용자의 비밀번호 (암호화하여 저장)
  • created_at: 사용자가 가입한 날짜

3. 게시판 데이터베이스 관계 설정

게시판의 데이터베이스 설계에서 중요한 점은 각 테이블 간의 관계를 명확하게 설정하는 것입니다. 게시글과 댓글 테이블 간의 관계는 1:N 관계입니다. 즉, 하나의 게시글에는 여러 개의 댓글이 달릴 수 있습니다. 이 관계를 위해 댓글 테이블에 "post_id"를 외래 키로 설정하여 게시글과 댓글을 연결합니다.

또한, 사용자 테이블과 게시글 테이블, 댓글 테이블 간의 관계도 설정할 수 있습니다. 예를 들어, 게시글 작성자와 댓글 작성자를 사용자 테이블의 "id"와 연결하여 관리할 수 있습니다.

4. 마무리

이번 글에서는 PHP와 MySQL을 사용하여 게시판 시스템에 필요한 기본적인 데이터베이스 테이블 구조를 설계하는 방법을 설명했습니다. 게시판을 구축하려면 게시글과 댓글, 사용자 관리 등을 위한 테이블을 설계하고 이를 PHP와 연동하여 데이터를 관리해야 합니다. 잘 설계된 데이터베이스 구조는 웹 애플리케이션의 성능과 안정성을 높이는 데 큰 도움이 됩니다.

이제 데이터베이스 설계를 완료했으니, PHP를 사용하여 MySQL과 연동하는 작업을 진행할 수 있습니다. 데이터베이스 설계를 정확히 이해하고 구현하는 것은 게시판 시스템을 구축하는 데 매우 중요한 첫걸음입니다.