개발노트

고즐의 개발 및 서버 개발 노트

PHP PDO 멀티 DB 연결 완벽 정리: MySQL부터 Oracle까지 한 번에 이해하기

# PHP # PDO # MySQL # 연결 # SQLite

PHP 2025.11.21 34 회 읽음
PHP 14일 전 34 회 읽음


PHP를 오래전부터 사용하다 보니 mysqi 방식의 연결의 경우 다른 데이터베이스 연결을 위해서는 개별 연결하는 class를 만들어서 연결하도록 처리하곤 했다. 이제는 PHP PDO 통해서 쉽게 연동이 가능한 방법을 소개 하고자 합니다.



PDO로 다양한 데이터베이스를 연결하는 가장 쉬운 방법

PDO가 제공하는 멀티 데이터베이스 연결의 장점

PDO의 핵심 개념

PDO는 PHP에서 다양한 데이터베이스를 하나의 통일된 방법으로 연결할 수 있게 설계된 인터페이스입니다. MySQL뿐만 아니라 SQLite, PostgreSQL, Oracle 등 여러 데이터베이스를 동일한 문법 패턴으로 연결하고 데이터 조작이 가능합니다. 즉, 한 번 PDO 문법을 익히면 데이터베이스 종류가 달라도 쉽게 확장할 수 있다는 장점이 있습니다.



MySQL에 PDO로 연결하는 방법

가장 기본적인 PDO 연결 예제

MySQL 연결 코드

MySQL은 PDO 사용 시 가장 많이 활용되는 데이터베이스이며, 아래와 같은 형태로 간단히 연결할 수 있습니다.

$pdo = new PDO(
    "mysql:host=localhost;dbname=testdb;charset=utf8mb4",
    "username",
    "password",
    [
        PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
        PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC
    ]
);

charset=utf8mb4 옵션을 지정하면 최신 UTF-8 환경에서 깨짐 없이 데이터를 처리할 수 있습니다. 또한 ERRMODE 설정을 통해 에러 발생 시 예외를 던지도록 설정하여 디버깅과 유지보수가 수월해집니다.



SQLite에 PDO로 연결하는 방법

파일 기반 데이터베이스를 가장 쉽게 연결하는 방식

SQLite 연결 코드

SQLite는 파일 하나만으로도 데이터베이스가 완성되는 구조이며, 로컬 개발 및 가벼운 서비스에 매우 적합합니다. 아래 예시처럼 간단한 파일 경로만 지정하면 됩니다.

$pdo = new PDO(
    "sqlite:/path/to/database.sqlite",
    null,
    null,
    [
        PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION
    ]
);

SQLite는 사용자명과 비밀번호 개념이 없으므로 null로 설정해도 정상적으로 연결되며, 파일 접근 권한 관리가 중요한 요소가 됩니다.



PostgreSQL에 PDO로 연결하는 방법

대규모 서비스에서 많이 사용하는 고성능 DB

PostgreSQL 연결 코드

PostgreSQL은 JSONB, 함수기반 처리 등 고급 기능을 제공하는 강력한 데이터베이스입니다. PDO로도 아래와 같은 간단한 형식으로 연결할 수 있습니다.

$pdo = new PDO(
    "pgsql:host=localhost;port=5432;dbname=testdb",
    "username",
    "password",
    [
        PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
        PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC
    ]
);

포트 번호가 기본값(5432)이 아닌 경우에는 명시적으로 설정할 수 있으며, MySQL과 유사한 패턴으로 동작하기 때문에 초보자도 쉽게 사용 가능합니다.



Oracle에 PDO로 연결하는 방법

엔터프라이즈 환경에서 널리 사용하는 구조

Oracle 연결 코드

Oracle은 금융, 공공기관 등 엔터프라이즈 환경에서 많이 사용되며 PDO_OCI 드라이버를 통해 연결할 수 있습니다. 다만 로컬 개발 환경에서 oci8 확장 설치가 필요할 수 있습니다.

$pdo = new PDO(
    "oci:dbname=//localhost:1521/XEPDB1",
    "username",
    "password",
    [
        PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
        PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC
    ]
);

Oracle은 SID 또는 서비스명으로 연결해야 하며, XEPDB1과 같은 서비스명이 사용됩니다. 환경에 따라 두 방식 중 하나를 선택하여 구성하면 됩니다.



PDO 전환이 주는 장점 요약

한 번 배워서 모든 데이터베이스에 적용 가능

PDO의 통일된 문법 구조

PDO의 가장 큰 장점은 데이터베이스 종류와 관계없이 동일한 문법 패턴을 사용할 수 있다는 점입니다. 예를 들어 prepared statement, execute, fetch, transaction 같은 메서드는 모든 DB에서 동일하게 동작합니다. 이는 유지보수 비용을 크게 절감하며, 확장형 아키텍처를 구축할 때 큰 장점이 됩니다.


보안과 예외 처리의 강화

PDO는 파라미터 바인딩 방식으로 SQL Injection을 원천적으로 방지하며, 예외(Exception) 기반 오류 관리를 통해 안정적인 서비스 운영을 도와줍니다. 또한 SQL 작성 방식도 간결하여 개발 생산성이 높습니다.


멀티 DB 환경에 적합한 현대적 방식

서비스가 커지면 데이터베이스가 하나만 존재하지 않을 때가 많습니다. 로그 서비스는 SQLite, 메인 데이터베이스는 MySQL, 분석 작업은 PostgreSQL처럼 구성될 수 있으며, 이때 PDO는 동일한 문법으로 제어할 수 있기 때문에 매우 강력한 솔루션이 됩니다.