약 6분
읽기 설정
글자 크기
줄 간격
글꼴
7.4 댓글 기능 구현
댓글 기능은 사용자들이 해당 게시글에 대해 의견을 작성할 수 있게 해줍니다. 이를 구현하기 위해서는 댓글 데이터를 어떻게 저장하고 표시할 것인지에 대한 이해가 필요합니다. 댓글 기능은 데이터베이스와의 상호작용이 필수적이며, PHP와 MySQL을 사용하여 이 과정을 설명하겠습니다.
1. 웹 개발 흐름 이해하기
이 기능을 구현하기 위해서는 먼저 웹의 동작 방식을 이해해야 합니다. 브라우저에서 사용자가 댓글을 작성하면, 이 데이터는 웹서버에 전송됩니다. 웹서버는 PHP로 작성된 스크립트를 실행하여 댓글을 데이터베이스에 저장합니다. 그 후, 저장된 댓글은 다시 웹 페이지로 보내져 사용자에게 표시됩니다. 웹 개발 흐름은 다음과 같습니다:
- 사용자가 브라우저에서 댓글 작성
- 브라우저가 요청(request) 전송
- 웹서버가 PHP 스크립트 실행
- PHP가 데이터베이스에 데이터 전송
- 데이터베이스가 댓글 저장 및 결과 반환
- 웹서버가 최종 결과를 브라우저에 전달
2. 데이터베이스 설계
댓글 기능을 구현하기 위해 필요한 데이터베이스 테이블을 생성합니다. 댓글 테이블은 아래와 같이 설계할 수 있습니다:
- comments 테이블:
- id (INT, PRIMARY KEY, AUTO_INCREMENT)
- post_id (INT, FOREIGN KEY, 게시글 ID)
- user_id (INT, FOREIGN KEY, 사용자 ID)
- content (TEXT, 댓글 내용)
- created_at (DATETIME, 생성일시)
CREATE TABLE comments (
id INT AUTO_INCREMENT PRIMARY KEY,
post_id INT NOT NULL,
user_id INT NOT NULL,
content TEXT NOT NULL,
created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
FOREIGN KEY (post_id) REFERENCES posts(id),
FOREIGN KEY (user_id) REFERENCES users(id)
);
3. 댓글 작성 및 저장
사용자가 댓글을 작성하면 POST 메소드를 사용하여 서버로 전송합니다. 아래는 댓글을 저장하는 PHP 코드 예제입니다:
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
$postId = $_POST['post_id'];
$userId = $_SESSION['user_id']; // 세션에서 사용자 ID 가져오기
$content = $_POST['content'];
// PDO를 이용한 데이터베이스 연결
$pdo = new PDO('mysql:host=localhost;dbname=your_db_name', 'username', 'password');
$stmt = $pdo->prepare('INSERT INTO comments (post_id, user_id, content) VALUES (?, ?, ?)');
$stmt->execute([$postId, $userId, $content]);
}
4. 댓글 표시하기
저장된 댓글을 불러와서 게시글 아래에 표시하는 방법은 다음과 같습니다:
$stmt = $pdo->prepare('SELECT * FROM comments WHERE post_id = ? ORDER BY created_at DESC');
$stmt->execute([$postId]);
$comments = $stmt->fetchAll();
foreach ($comments as $comment) {
echo '<div class="comment">';
echo '<p>' . htmlspecialchars($comment['content']) . '</p>';
echo '<span>' . $comment['created_at'] . '</span>';
echo '</div>';
}
5. 보안 고려사항
댓글 기능 구현 시 주의할 점은 보안입니다. SQL Injection이나 XSS를 방지하기 위해, 사용자 입력을 적절히 필터링하고 이스케이프 처리해야 합니다. 예를 들어, 사용자 입력에 대해 htmlspecialchars()를 사용하여 HTML 특수 문자를 변환해줍니다.
6. 실습 과제
댓글 기능을 구현한 후, 자신이 만든 코드에 대해 테스트 해보세요. 추가적으로 댓글 삭제 기능을 구현하시면 더 많은 경험이 될 것입니다. 이를 위해 DELETE SQL 명령어를 활용하시면 좋습니다.
댓글 0
아직 댓글이 없습니다. 첫 댓글을 남겨보세요.