웹 개발 기초 – PHP 웹 프로그래밍 – 4 – 데이터베이스 연동 (MySQL, PostgreSQL 등)

웹 개발 기초 - PHP 웹 프로그래밍 - 4 - 데이터베이스 연동 (MySQL, PostgreSQL 등)
웹 개발 기초 – PHP 웹 프로그래밍 – 4 – 데이터베이스 연동 (MySQL, PostgreSQL 등)

웹 개발 기초 – PHP 웹 프로그래밍 – 데이터베이스 연동 (MySQL, PostgreSQL 등)

안녕하세요! 😊
이번에는 웹 프로그래밍에서 가장 중요한 요소 중 하나인 데이터베이스 연동에 대해 다뤄볼게요.
웹사이트가 단순한 정보만 보여주는 정적인 페이지에서 벗어나려면, 데이터를 저장하고 불러올 수 있는 시스템이 필요하죠.
바로 그 역할을 해주는 게 데이터베이스, 그리고 그와 소통하는 중간다리가 PHP의 데이터베이스 연동 기능이에요!

비유하자면, PHP는 요리사이고 데이터베이스는 냉장고라고 생각해보세요.
요리사(PHP)가 음식을 만들기 위해 냉장고(MySQL, PostgreSQL 등)에서 재료(데이터)를 꺼내오거나 넣는 거죠! 🍲


데이터베이스란?

데이터베이스(DB)는 정보를 체계적으로 저장하고 관리할 수 있도록 해주는 소프트웨어예요.
PHP에서는 대표적으로 아래 두 가지를 많이 사용합니다:

  • MySQL / MariaDB : 가장 널리 사용되는 오픈소스 관계형 데이터베이스
  • PostgreSQL : 고급 기능이 많은 강력한 데이터베이스 시스템

1. MySQL(MariaDB) 연동하기

📌 1-1. 데이터베이스 연결

<?php
$host = "localhost";
$user = "root";
$password = "";
$dbname = "mydatabase";

$conn = mysqli_connect($host, $user, $password, $dbname);

if (!$conn) {
    die("❌ 연결 실패: " . mysqli_connect_error());
}
echo "✅ MySQL 연결 성공!";
?>

💡 설명:

  • mysqli_connect() : MySQL 서버에 연결
  • localhost : 현재 컴퓨터(로컬서버)라는 뜻
  • root : 기본 관리자 계정
  • mydatabase : 사용할 데이터베이스 이름

📌 1-2. 데이터 삽입하기 (INSERT)

<?php
$sql = "INSERT INTO users (username, email) VALUES ('홍길동', 'hong@example.com')";
if (mysqli_query($conn, $sql)) {
    echo "✅ 새 레코드가 성공적으로 추가되었습니다!";
} else {
    echo "❌ 오류: " . mysqli_error($conn);
}
?>

📌 1-3. 데이터 불러오기 (SELECT)

<?php
$sql = "SELECT * FROM users";
$result = mysqli_query($conn, $sql);

while ($row = mysqli_fetch_assoc($result)) {
    echo "이름: " . $row["username"] . " / 이메일: " . $row["email"] . "<br>";
}
?>

2. PostgreSQL 연동하기

PostgreSQL은 pg_connect() 함수로 연결합니다.

📌 2-1. PostgreSQL 연결하기

<?php
$conn = pg_connect("host=localhost dbname=mydb user=postgres password=mypass");

if (!$conn) {
    die("❌ PostgreSQL 연결 실패!");
}
echo "✅ PostgreSQL 연결 성공!";
?>

📌 2-2. 데이터 삽입

<?php
$result = pg_query($conn, "INSERT INTO users (username, email) VALUES ('김철수', 'kim@example.com')");
if ($result) {
    echo "✅ 삽입 성공!";
} else {
    echo "❌ 오류 발생";
}
?>

📌 2-3. 데이터 조회

<?php
$result = pg_query($conn, "SELECT * FROM users");

while ($row = pg_fetch_assoc($result)) {
    echo "이름: " . $row['username'] . " / 이메일: " . $row['email'] . "<br>";
}
?>

3. 사용자 입력 받아서 저장하기 (HTML + PHP)

📄 HTML 폼 예시

<form action="insert.php" method="post">
  이름: <input type="text" name="username"><br>
  이메일: <input type="email" name="email"><br>
  <input type="submit" value="등록">
</form>

🧾 insert.php

<?php
$conn = mysqli_connect("localhost", "root", "", "mydatabase");

$username = $_POST['username'];
$email = $_POST['email'];

$sql = "INSERT INTO users (username, email) VALUES ('$username', '$email')";
if (mysqli_query($conn, $sql)) {
    echo "✅ 입력 완료!";
} else {
    echo "❌ 오류: " . mysqli_error($conn);
}
?>

4. SQL Injection 방지 (보안 강화)

사용자 입력을 바로 SQL에 넣으면 보안에 취약해요. 이를 SQL 인젝션(SQL Injection) 이라고 하죠.
이를 막기 위해서는 Prepared Statement (준비된 구문) 를 사용하는 것이 좋아요.

✅ 예: MySQL에서 준비된 구문 사용

<?php
$conn = mysqli_connect("localhost", "root", "", "mydatabase");

$stmt = mysqli_prepare($conn, "INSERT INTO users (username, email) VALUES (?, ?)");
mysqli_stmt_bind_param($stmt, "ss", $username, $email);

$username = $_POST['username'];
$email = $_POST['email'];

mysqli_stmt_execute($stmt);
echo "✅ 안전하게 데이터가 저장되었습니다!";
?>

5. 데이터베이스 연동 흐름 요약

  1. 연결하기: mysqli_connect() 또는 pg_connect() 사용
  2. 쿼리 작성: SELECT, INSERT, UPDATE, DELETE
  3. 실행하기: mysqli_query() 또는 pg_query()
  4. 결과 처리: mysqli_fetch_assoc() 등으로 결과 활용
  5. 보안 고려: SQL Injection 방지를 위한 prepare 구문 사용

🔍 주의해야 할 점 정리

항목 설명
DB 연결 정보 비밀번호 노출 주의, 외부에 유출되지 않도록 설정 파일로 분리
SQL Injection 사용자 입력은 반드시 필터링 또는 prepare 구문 사용
문자 인코딩 UTF-8 설정 필수 (mysqli_set_charset() 사용 가능)
에러 처리 예외 처리 및 디버깅을 위한 로그 설정
DB 접속 종료 작업이 끝나면 mysqli_close() 또는 pg_close()로 연결 종료

마무리하며…

웹사이트가 ‘살아있는 정보’를 다루기 위해서는 반드시 데이터베이스 연동이 필요합니다.
PHP는 MySQL이든 PostgreSQL이든 아주 잘 지원하고 있어서 초보자도 금방 배울 수 있어요!

이제 간단한 회원가입, 게시판, 상품 리스트, 댓글 기능 등 다양한 기능도 직접 구현해보실 수 있을 거예요 😊
다음 시간에는 데이터를 수정(UPDATE) 하고 삭제(DELETE) 하는 기능까지 같이 다뤄볼게요!

행복한 코딩 하세요~ 🎉

답글 남기기