데이터베이스 구성
참고
현재 지원되는 데이터베이스 드라이버는 지원되는 데이터베이스를 참조하세요.
구성 파일
CodeIgniter에는 데이터베이스 연결 값(사용자 이름, 비밀번호, 데이터베이스 이름 등)을 저장할 수 있는 구성 파일이 있습니다. 구성 파일은 app/Config/Database.php에 있습니다. .env 파일에서 데이터베이스 연결 값을 설정할 수도 있습니다. 자세한 내용은 아래를 참조하세요.
기본 데이터베이스 설정
구성 설정은 다음 프로토타입이 포함된 배열인 클래스 속성에 저장됩니다.
<?php
namespace Config;
use CodeIgniter\Database\Config;
class Database extends Config
{
// ...
public array $default = [
'DSN' => '',
'hostname' => 'localhost',
'username' => 'root',
'password' => '',
'database' => 'database_name',
'DBDriver' => 'MySQLi',
'DBPrefix' => '',
'pConnect' => false,
'DBDebug' => true,
'charset' => 'utf8mb4',
'DBCollat' => 'utf8mb4_general_ci',
'swapPre' => '',
'encrypt' => false,
'compress' => false,
'strictOn' => false,
'failover' => [],
'port' => 3306,
];
// ...
}
클래스 속성의 이름은 연결 이름이며 연결 시 그룹 이름을 지정하는 데 사용할 수 있습니다.
참고
SQLite3 데이터베이스의 기본 위치는 writable 폴더입니다. 위치를 변경하려면 새 폴더의 전체 경로를 설정해야 합니다(예: ‘database’ => WRITEPATH . ‘db/database_name.db’).
DSN
일부 데이터베이스 드라이버(예: Postgre, OCI8)를 연결하려면 전체 DSN(데이터 소스 이름) 문자열이 필요합니다. 그러나 이를 요구하는 드라이버에 대해 DSN 문자열을 지정하지 않으면 CodeIgniter는 제공된 나머지 설정을 사용하여 이를 빌드하려고 시도합니다.
DSN을 지정하는 경우 다음과 같이 드라이버의 기본 PHP 확장을 사용하는 것처럼 'DSN' 구성 설정을 사용해야 합니다.
// OCI8
public array $default = [
'DSN' => '//localhost/XE',
// ...
];
보편적인 방식의 DSN
범용 방식(URL 유사)으로 DSN을 설정할 수도 있습니다. 이 경우 DSN에는 다음 프로토타입이 있어야 합니다.
public array $default = [
'DSN' => 'DBDriver://username:password@hostname:port/database',
// ...
];
DSN 문자열의 범용 버전으로 연결할 때 기본 구성 값을 재정의하려면 구성 변수를 쿼리 문자열로 추가하세요.
// MySQLi
public array $default = [
'DSN' => 'MySQLi://username:password@hostname:3306/database?charset=utf8mb4&DBCollat=utf8mb4_general_ci',
// ...
];
// Postgre
public array $default = [
'DSN' => 'Postgre://username:password@hostname:5432/database?charset=utf8&connect_timeout=5&sslmode=require',
// ...
];
참고
DSN 문자열을 제공했지만 나머지 구성 필드에 있는 일부 유효한 설정(예: 데이터베이스 문자 집합)이 누락된 경우 CodeIgniter는 해당 문자열을 추가합니다.
장애 조치
어떤 이유로 기본 연결을 연결할 수 없는 상황에 대한 장애 조치를 지정할 수도 있습니다. 이러한 장애 조치는 다음과 같이 연결에 대한 장애 조치를 설정하여 지정할 수 있습니다.
<?php
namespace Config;
use CodeIgniter\Database\Config;
class Database extends Config
{
// ...
public array $default = [
// ...
'failover' => [
[
'hostname' => 'localhost1',
'username' => '',
'password' => '',
'database' => '',
'DBDriver' => 'MySQLi',
'DBPrefix' => '',
'pConnect' => true,
'DBDebug' => true,
'charset' => 'utf8mb4',
'DBCollat' => 'utf8mb4_general_ci',
'swapPre' => '',
'encrypt' => false,
'compress' => false,
'strictOn' => false,
],
[
'hostname' => 'localhost2',
'username' => '',
'password' => '',
'database' => '',
'DBDriver' => 'MySQLi',
'DBPrefix' => '',
'pConnect' => true,
'DBDebug' => true,
'charset' => 'utf8mb4',
'DBCollat' => 'utf8mb4_general_ci',
'swapPre' => '',
'encrypt' => false,
'compress' => false,
'strictOn' => false,
],
],
// ...
];
// ...
}
원하는 만큼 장애 조치를 지정할 수 있습니다.
다중 데이터베이스 설정
선택적으로 여러 연결 값 세트를 저장할 수 있습니다. 예를 들어 단일 설치에서 여러 환경(개발, 프로덕션, 테스트 등)을 실행하는 경우 각각에 대해 연결 그룹을 설정한 다음 필요에 따라 그룹 간에 전환할 수 있습니다. 예를 들어 “테스트” 환경을 설정하려면 다음을 수행합니다.
<?php
namespace Config;
use CodeIgniter\Database\Config;
class Database extends Config
{
// ...
public array $test = [
'DSN' => '',
'hostname' => 'localhost',
'username' => 'root',
'password' => '',
'database' => 'database_name',
'DBDriver' => 'MySQLi',
'DBPrefix' => '',
'pConnect' => true,
'DBDebug' => true,
'charset' => 'utf8mb4',
'DBCollat' => 'utf8mb4_general_ci',
'swapPre' => '',
'compress' => false,
'encrypt' => false,
'strictOn' => false,
'failover' => [],
];
// ...
}
그런 다음 해당 그룹을 사용하도록 시스템에 전역적으로 알리려면 구성 파일에 있는 이 변수를 설정합니다.
<?php
namespace Config;
use CodeIgniter\Database\Config;
class Database extends Config
{
// ...
public string $defaultGroup = 'test';
// ...
}
참고
test라는 이름은 임의적입니다. 당신이 원하는 것은 무엇이든 될 수 있습니다. 기본적으로 기본 연결에는 default라는 단어를 사용했지만 이 이름 역시 프로젝트와 더 관련 있는 이름으로 바꿀 수 있습니다.
데이터베이스 자동 변경
구성 파일을 수정하여 환경을 감지하고 클래스 생성자 내에 필수 논리를 추가하여 defaultGroup 값을 올바른 값으로 자동 업데이트할 수 있습니다.
<?php
namespace Config;
use CodeIgniter\Database\Config;
/**
* Database Configuration
*/
class Database extends Config
{
// ...
public $development = [/* ... */];
public $test = [/* ... */];
public $production = [/* ... */];
public function __construct()
{
// ...
$this->defaultGroup = ENVIRONMENT;
}
}
.env 파일로 구성
현재 서버의 데이터베이스 설정을 사용하여 .env 파일 내에 구성 값을 저장할 수도 있습니다. 기본 그룹의 구성 설정에서 변경되는 값만 입력하면 됩니다. 값은 다음 형식을 따라야 합니다. 여기서 default는 그룹 이름입니다.
database.default.username = 'root';
database.default.password = '';
database.default.database = 'ci4';
그러나 환경 변수를 설정하여 새 속성을 추가하거나 스칼라 값을 배열로 변경할 수는 없습니다. 자세한 내용은 데이터를 대체하는 환경 변수를 참조하세요.
따라서 MySQL에서 SSL을 사용하려면 해킹이 필요합니다. 예를 들어 .env 파일에서 배열 값을 JSON 문자열로 설정합니다.
database.default.encrypt = {"ssl_verify":true,"ssl_ca":"/var/www/html/BaltimoreCyberTrustRoot.crt.pem"}
Config 클래스의 생성자에서 이를 디코딩합니다.
<?php
namespace Config;
use CodeIgniter\Database\Config;
/**
* Database Configuration
*/
class Database extends Config
{
// ...
public function __construct()
{
// ...
$array = json_decode($this->default['encrypt'], true);
if (is_array($array)) {
$this->default['encrypt'] = $array;
}
}
}
값 설명
구성 이름 |
설명 |
|---|---|
DSN |
DSN 연결 문자열(일체형 구성 순서) |
hostname |
데이터베이스 서버의 호스트 이름입니다. 종종 이것은 ‘localhost’입니다. |
username |
데이터베이스에 연결하는 데 사용되는 사용자 이름입니다. ( |
password |
데이터베이스에 연결하는 데 사용되는 비밀번호입니다. ( |
database |
연결하려는 데이터베이스의 이름입니다. 참고 CodeIgniter는 테이블 및 열 이름에 점( |
DBDriver |
데이터베이스 드라이버 이름입니다. 대소문자는 드라이버 이름과 일치해야 합니다. 사용자 정의 드라이버를 사용하려면 완전한 클래스 이름을 지정할 수 있습니다. 지원되는 드라이버: |
DBPrefix |
Query Builder 쿼리를 실행할 때 테이블 이름에 추가되는 선택적 테이블 접두사입니다. 이를 통해 여러 CodeIgniter 설치가 하나의 데이터베이스를 공유할 수 있습니다. |
pConnect |
true/false(부울) - 영구 연결을 사용할지 여부입니다. |
DBDebug |
true/false(부울) - 데이터베이스 오류가 발생할 때 예외를 발생시킬지 여부입니다. |
charset |
데이터베이스와 통신하는 데 사용되는 문자 집합입니다. |
DBCollat |
( |
swapPre |
|
schema |
( |
encrypt |
( |
compress |
( |
strictOn |
( |
port |
데이터베이스 포트 번호 - 기본 포트(또는 |
foreignKeys |
( 중요 SQLite3 외래 키 제약 조건은 기본적으로 비활성화되어 있습니다. SQLite 문서를 참조하세요. 외래 키 제약 조건을 적용하려면 이 구성 항목을 true로 설정하세요. |
busyTimeout |
( |
synchronous |
( |
numberNative |
( |
foundRows |
( |
dateFormat |
기본 날짜/시간 형식은 PHP의 DateTime 형식입니다. * |
참고
사용 중인 데이터베이스 드라이버(MySQLi, Postgre 등)에 따라 모든 값이 필요한 것은 아닙니다. 예를 들어, SQLite3을 사용하는 경우 사용자 이름이나 비밀번호를 제공할 필요가 없으며 데이터베이스 이름이 데이터베이스 파일의 경로가 됩니다.
MySQLi
hostname
소켓 연결 구성
파일 시스템 소켓을 통해 MySQL 서버에 연결하려면 'hostname' 설정에 소켓 경로를 지정해야 합니다. CodeIgniter의 MySQLi 드라이버는 이를 인지하고 연결을 적절하게 구성합니다.
// MySQLi over a socket
public array $default = [
// ...
'hostname' => '/cloudsql/toolbox-tests:europe-north1:toolbox-db',
// ...
'DBDriver' => 'MySQLi',
// ...
];
encrypt
MySQLi 드라이버는 다음 옵션이 포함된 배열을 허용합니다.
ssl_key- 개인 키 파일의 경로ssl_cert- 공개 키 인증서 파일의 경로ssl_ca- 인증 기관 파일의 경로ssl_capath- PEM 형식의 신뢰할 수 있는 CA 인증서가 포함된 디렉터리 경로ssl_cipher- 암호화에 사용되는 허용된 암호 목록(콜론(:)으로 구분)ssl_verify- true/false (boolean) - 서버 인증서를 확인할지 여부