루젠소프트 로고

216.73.216.204 TODAY : 3,455

PHP 강의

 > 

PHP - 중급

📚 PHP 중급 - 1주차: 데이터베이스 기초 및 MySQL 연동 (PDO) - 03 PHP Data Objects (PDO)를 이용한 DB 연결

📚 PHP 중급 - 1주차: 데이터베이스 기초 및 MySQL 연동 (PDO) - 03 PHP Data Objects (PDO)를 이용한 DB 연결
평점 10.0 라이센스 free
사용자평점 10.0 운영체제
다운로드 1 파일크기 0
제작사 LUZENSOFT 등록일 2025-07-11 13:15:53
조회수 15
- 설명

📚 PHP 중급 - 1주차: 데이터베이스 기초 및 MySQL 연동 (PDO) - 03 PHP Data Objects (PDO)를 이용한 DB 연결







왜 #PDO를 사용해야 하는가?


uploadImage


안녕하세요! #PHP 중급 과정에 다시 오신 것을 환영합니다. 지난 시간에는 #SQL의 기본적인 #CRUD 명령어에 대해 배웠죠. 오늘은 #PHP에서 #MySQL 데이터베이스에 #안전하고 #효율적으로 연결하는 핵심 방법인 #PDO(PHP Data Objects)에 대해 자세히 알아보겠습니다.



과거 PHP에서는 mysql_connect()mysqli_connect()와 같은 함수를 직접 사용하여 데이터베이스에 연결했습니다. mysqlimysql 함수보다는 개선되었지만, 여전히 데이터베이스 종류별로 다른 함수를 사용해야 하는 불편함이 있었습니다.



PDO는 이러한 문제를 해결하기 위해 등장했습니다. PDO는 #데이터베이스 #추상화 #계층(Database Abstraction Layer)을 제공하여, 사용하는 데이터베이스의 종류(MySQL, PostgreSQL, SQLite 등)에 관계없이 동일한 인터페이스로 데이터베이스 작업을 수행할 수 있게 해줍니다. 이는 데이터베이스를 변경할 필요가 생길 때 코드 수정을 최소화할 수 있다는 강력한 장점이 있습니다.



무엇보다 PDO의 가장 큰 장점은 #보안입니다. PDO는 #준비된 #구문(Prepared Statements)을 지원하여 #SQL #인젝션 공격을 효과적으로 방어할 수 있도록 도와줍니다. 이는 웹 애플리케이션 보안에서 매우 중요한 부분입니다.





PDO를 이용한 데이터베이스 연결 설정


uploadImage


PDO를 사용하여 데이터베이스에 연결하는 것은 PDO 클래스의 인스턴스를 생성하는 것으로 시작합니다. 이때 몇 가지 중요한 매개변수를 설정해야 합니다.




1. #DSN (Data Source Name)




DSN은 데이터베이스 연결에 필요한 정보를 문자열 형태로 정의합니다. PDO가 어떤 데이터베이스에 어떻게 연결해야 하는지를 알려주는 일종의 주소록입니다.



형식: 데이터베이스_드라이버:호스트=호스트_주소;데이터베이스명=DB_이름;캐릭터셋=문자셋



  • 데이터베이스_드라이버: 사용할 데이터베이스의 종류를 명시합니다. (예: mysql, pgsql, sqlite 등)

  • 호스트=호스트_주소: 데이터베이스 서버가 실행 중인 주소입니다. 로컬 환경에서는 localhost 또는 127.0.0.1을 사용합니다.

  • 데이터베이스명=DB_이름: 연결할 데이터베이스의 이름입니다. (예: phplearning)

  • 캐릭터셋=문자셋: 데이터 통신에 사용할 문자 인코딩을 설정합니다. 한글 등을 올바르게 처리하기 위해 utf8mb4를 권장합니다.



예시:

PHP

$dsn = "mysql:host=localhost;dbname=phplearning;charset=utf8mb4";




2. 사용자 이름 및 비밀번호




데이터베이스에 접근할 권한이 있는 사용자 이름과 해당 비밀번호입니다.



  • $user: MySQL 사용자 이름 (예: root)

  • $pass: MySQL 비밀번호 (설정되어 있지 않다면 빈 문자열 '' 또는 null)




3. 옵션 (Options)




PDO 객체의 동작 방식을 세밀하게 제어할 수 있는 설정 값들입니다. 이들은 배열 형태로 PDO 생성자의 네 번째 인자로 전달됩니다.



  • PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION:

    • 데이터베이스 작업 중 오류가 발생하면 #PDOException을 발생시키도록 설정합니다. 이는 오류를 체계적으로 처리하고 디버깅하는 데 필수적입니다. 이 설정을 하지 않으면 오류가 발생해도 PHP 경고(Warning)만 발생하고 스크립트가 계속 실행될 수 있어 위험합니다.

  • PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC:

    • #SELECT 쿼리 결과를 가져올 때 기본 페치 모드를 #연관 #배열(Associative Array)로 설정합니다. 이렇게 하면 결과 데이터에 컬럼 이름으로 접근할 수 있어 코드 가독성이 좋아집니다. (예: $row['name'])

  • PDO::ATTR_EMULATE_PREPARES => false:

    • 매우 중요한 설정입니다. #네이티브 #준비된 #구문 기능을 사용하도록 지시합니다. 이 설정을 false로 해야 #SQL #인젝션 공격 방어에 더 효과적입니다. true로 설정하면 PDO가 SQL 쿼리를 에뮬레이트하여 처리하게 되어 보안상 취약점이 생길 수 있습니다.





실제 데이터베이스 연결 코드


uploadImage


이전 지식을 바탕으로 데이터베이스에 연결하는 전체 PHP 코드를 작성해 보겠습니다. #오류 #처리(try-catch 블록)는 필수입니다.



PHP

<?php
$host = '127.0.0.1'; // 데이터베이스 호스트 주소
$db   = 'phplearning'; // 연결할 데이터베이스 이름
$user = 'root'; // 데이터베이스 사용자 이름
$pass = 'your_password'; // 데이터베이스 비밀번호 (설정된 비밀번호로 변경)
$charset = 'utf8mb4'; // 문자 인코딩

// DSN (Data Source Name) 구성
$dsn = "mysql:host=$host;dbname=$db;charset=$charset";

// PDO 옵션 설정
$options = [
    PDO::ATTR_ERRMODE            => PDO::ERRMODE_EXCEPTION,      // 오류 발생 시 예외 throw
    PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,          // 기본 페치 모드를 연관 배열로 설정
    PDO::ATTR_EMULATE_PREPARES   => false,                     // 네이티브 준비 구문 사용 (보안/성능 향상)
];

// 데이터베이스 연결 시도
try {
    $pdo = new PDO($dsn, $user, $pass, $options);
    echo "데이터베이스에 성공적으로 연결되었습니다!". "<br>";

    // 여기에 데이터베이스 작업 코드 (SELECT, INSERT 등)를 작성
    // 예:
    // $stmt = $pdo->query('SELECT * FROM users');
    // while ($row = $stmt->fetch()) {
    //     echo $row['name'] . "<br>";
    // }

} catch (PDOException $e) {
    // 연결 실패 시 예외 처리
    // 실제 서비스에서는 사용자에게 오류 메시지를 직접 보여주지 않는 것이 좋습니다.
    // 대신 오류를 로깅하고 사용자에게는 "서비스에 문제가 발생했습니다."와 같은 메시지를 보여줍니다.
    throw new PDOException($e->getMessage(), (int)$e->getCode());
}
?>



위 코드를 PHP 파일로 저장하고 웹 서버를 통해 실행해 보세요. your_password 부분은 실제 MySQL 비밀번호로 반드시 변경해야 합니다. 성공적으로 연결되면 "데이터베이스에 성공적으로 연결되었습니다!" 메시지가 출력될 것입니다.



만약 연결에 실패하면 PDOException이 발생하고 자세한 오류 메시지가 출력되어 문제 해결에 도움을 줄 것입니다. 예를 들어, 비밀번호가 틀렸거나 데이터베이스 이름이 잘못되었을 수 있습니다.





정리 및 다음 주차 예고


uploadImage


이번 시간에는 #PDO가 왜 PHP에서 데이터베이스 연결의 #표준이자 #최선의 방법인지, 그리고 PDO를 사용하여 MySQL 데이터베이스에 #안전하게 연결하는 방법을 자세히 알아보았습니다. DSN 구성, 사용자 인증, 그리고 중요한 옵션 설정(ATTR_ERRMODE, ATTR_DEFAULT_FETCH_MODE, ATTR_EMULATE_PREPARES)의 의미와 중요성을 이해하는 것이 핵심입니다.



이제 여러분은 PHP 애플리케이션에서 데이터베이스와 소통할 수 있는 견고한 기반을 마련했습니다.