PHP 데이터베이스 연결: 초보자를 위한 PDO 가이드 (MySQL 및 PostgreSQL)

발행: (2026년 2월 4일 오후 02:26 GMT+9)
5 min read
원문: Dev.to

Source: Dev.to

왜 PDO를 선택해야 할까?

PHP에서 데이터베이스에 연결하는 방법은 크게 두 가지가 있습니다: mysqliPDO.

현대 PHP 개발에서는 PDO를 강력히 권장합니다. 가장 큰 장점은 PDO가 데이터베이스 추상화 레이어 역할을 한다는 점입니다. 즉, 어떤 데이터베이스를 사용하든 동일한 코드 구조를 사용할 수 있습니다.

  • 나중에 MySQL에서 PostgreSQL로 전환하더라도 연결 문자열(DSN)만 약간 바꾸면 됩니다.
  • mysqli는 MySQL 전용으로 제한됩니다.
  • PDO를 마스터하면 보다 다재다능하고 미래에도 대비된 개발자가 됩니다.

PDO로 MySQL에 연결하기

기본 연결 스크립트

getMessage();

    exit();
}
?>

핵심 개념

  • DSN (Data Source Name) – 데이터베이스 정보를 담은 문자열입니다. 보안 문제를 피하려면 항상 charset=utf8mb4를 명시하세요.
  • try‑catch 블록 – 연결을 try‑catch로 감싸 PDOException을 우아하게 처리합니다.
  • 보안 팁 – 프로덕션 환경에서는 $e->getMessage()를 절대 출력하지 마세요; 민감한 정보가 유출될 수 있습니다.

전문가를 위한 필수 “옵션 설정”

new PDO의 네 번째 인자로 옵션 배열을 전달하여 PDO 동작을 커스터마이징할 수 있습니다.

 PDO::ERRMODE_EXCEPTION,
    // 기본적으로 연관 배열 형태로 결과 반환
    PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
    // 보안을 위해 준비문 에뮬레이션 비활성화
    PDO::ATTR_EMULATE_PREPARES => false,
];

try {
    $dbh = new PDO($dsn, $user, $password, $options);
    echo "Connected with optimized settings!";
} catch (PDOException $e) {
    error_log($e->getMessage()); // 화면에 표시하지 말고 로그에 기록
}
?>
  • ATTR_ERRMODE – SQL 오류가 발생하면 예외가 발생하도록 하여 잡을 수 있게 합니다.
  • ATTR_DEFAULT_FETCH_MODEFETCH_ASSOC는 메모리를 절약하는 깔끔한 연관 배열을 반환합니다.
  • ATTR_EMULATE_PREPARES – 이를 false로 설정하면 PDO가 데이터베이스의 네이티브 준비문을 사용하게 되며, 이는 더 안전합니다.

PostgreSQL에 연결하기

코드 구조는 동일하며, DSN 접두사만 바뀝니다.

문제 해결 체크리스트

SQLSTATE[...]와 같은 오류가 발생하면 다음을 확인하세요:

  • 자격 증명 – 데이터베이스 이름, 사용자명, 비밀번호에 오타가 없는지 확인합니다.
  • 호스트 및 포트 – Docker 컨테이너나 원격 서버의 경우 localhost가 작동하지 않을 수 있습니다. 올바른 포트(MySQL 3306, PostgreSQL 5432)와 커스텀 설정을 확인하세요.
  • 드라이버php.ini에서 해당 PDO 드라이버(pdo_mysql 또는 pdo_pgsql)가 활성화되어 있는지 확인합니다. phpinfo()로 확인할 수 있습니다.
  • localhost vs. 127.0.0.1 – Linux/macOS에서는 localhost가 소켓 연결을 시도합니다. 127.0.0.1로 바꾸면 TCP/IP 연결을 강제하게 되어 연결 문제를 해결할 수 있습니다.

결론

PDO는 PHP에서 데이터베이스와 상호작용하기 위한 금본위입니다. DSN 구조를 숙지하고 적절한 예외 처리를 적용하면, 여러 데이터베이스 시스템에서 작동하는 안전하고 이식 가능하며 전문가 수준의 코드를 작성할 수 있습니다.

Originally published at: https://code-izumi.com/php/database-connection/

Back to Blog

관련 글

더 보기 »

Laravel 초보자를 위한 PHP 기본

Laravel 여정을 시작한다면, 미리 알아두어야 할 한 가지가 있습니다: > PHP 기본기가 탄탄할수록 Laravel은 더 쉬워집니다. 많은 초보자…