PHP 마이크로서비스를 개발할 때 데이터베이스 연결과 쿼리는 핵심 링크입니다. 데이터베이스 연결 및 쿼리를 적절하게 관리하면 코드 유지 관리가 향상될 뿐만 아니라 시스템 성능도 크게 향상됩니다. 이 문서에서는 PHP 마이크로서비스에서 데이터베이스 연결 및 쿼리를 관리하는 모범 사례를 설명하고 실제 사례를 제공합니다.
PDO(PHP 데이터 개체)는 여러 데이터베이스에 대한 통합 인터페이스를 제공하는 PHP의 내장 데이터베이스 확장입니다. PDO를 사용하면 많은 코드를 수정하지 않고도 여러 데이터베이스 간에 쉽게 전환할 수 있습니다. PDO를 사용하기 전에 해당 데이터베이스 드라이버가 설치되어 있는지 확인하십시오.
PDO를 사용하여 MySQL에 연결하는 예:
$dsn = 'mysql:host=localhost;dbname=test;charset=utf8';
$username = 'root';
$password = '';
try {
$db = new PDO($dsn, $username, $password);
$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
} catch (PDOException $e) {
echo '데이터베이스에 연결하지 못했습니다.:' . $e->getMessage();
}
마이크로서비스에서는 여러 쿼리가 동일한 데이터베이스 연결을 공유할 수 있습니다. 반복적으로 연결을 생성하지 않으려면 싱글톤 모드를 사용하여 데이터베이스 인스턴스를 관리하여 연결 재사용 및 리소스 최적화를 달성할 수 있습니다.
데이터베이스 연결 싱글톤 예:
class Database
{
private static $instance;
private $db;
private function __construct()
{
$dsn = 'mysql:host=localhost;dbname=test;charset=utf8';
$username = 'root';
$password = '';
try {
$this->db = new PDO($dsn, $username, $password);
$this->db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
} catch (PDOException $e) {
echo '데이터베이스에 연결하지 못했습니다.:' . $e->getMessage();
}
}
public static function getInstance()
{
if (!self::$instance) {
self::$instance = new self();
}
return self::$instance;
}
public function getDB()
{
return $this->db;
}
}
// 용법
$db = Database::getInstance()->getDB();
데이터베이스 쿼리를 실행할 때 SQL 문을 직접 연결하는 대신 준비된 문을 사용하는 것이 좋습니다. 준비된 문은 SQL 주입 공격을 방지할 뿐만 아니라 쿼리 성능도 향상시킵니다.
PDO 준비된 문을 사용하여 쿼리를 실행하는 예:
$username = 'admin';
$password = '123456';
// 준비된 진술
$stmt = $db->prepare('SELECT * FROM users WHERE username = :username AND password = :password');
$stmt->bindParam(':username', $username);
$stmt->bindParam(':password', $password);
// 쿼리 실행
$stmt->execute();
// 쿼리 결과 가져오기
$result = $stmt->fetchAll(PDO::FETCH_ASSOC);
// 쿼리 결과 처리
foreach ($result as $row) {
// ...
}
PHP 마이크로서비스 개발에서는 데이터베이스 연결 및 쿼리를 적절하게 관리하는 것이 중요합니다. PDO 확장을 사용하면 데이터베이스 작업을 통합할 수 있고, 싱글톤 모드를 통해 데이터베이스 연결을 관리하면 성능과 리소스 활용도가 향상될 수 있으며, 준비된 명령문은 효과적으로 SQL 삽입을 방지하고 쿼리 성능을 최적화할 수 있습니다. 위의 방법은 개발자가 보다 효율적이고 안전한 마이크로서비스 애플리케이션을 구축하는 데 도움이 될 수 있습니다.
샘플 코드는 데모용으로만 제공됩니다. 실제 프로젝트에서는 필요에 따라 최적화하고 조정하십시오.