데이터베이스 설정¶
CodeIgniter에는 데이터베이스 연결 값(사용자 이름, 비밀번호, 데이터베이스 이름 등)을 저장할 수 있는 config 파일이 있습니다. config 파일은 application/config/database.php에 위치합니다. 특정 환경에 대한 데이터베이스 연결 값을 해당 환경의 config 폴더에 database.php를 배치하여 설정할 수도 있습니다.
config 설정은 다음 프로토타입을 가진 다차원 배열에 저장됩니다:
$db['default'] = array(
'dsn' => '',
'hostname' => 'localhost',
'username' => 'root',
'password' => '',
'database' => 'database_name',
'dbdriver' => 'mysqli',
'dbprefix' => '',
'pconnect' => TRUE,
'db_debug' => TRUE,
'cache_on' => FALSE,
'cachedir' => '',
'char_set' => 'utf8',
'dbcollat' => 'utf8_general_ci',
'swap_pre' => '',
'encrypt' => FALSE,
'compress' => FALSE,
'stricton' => FALSE,
'failover' => array()
);
일부 데이터베이스 드라이버(예: PDO, PostgreSQL, Oracle, ODBC)는 전체 DSN 문자열을 제공해야 할 수 있습니다. 그런 경우 드라이버의 기본 PHP 확장을 사용하는 것처럼 ‘dsn’ config 설정을 사용해야 합니다:
// PDO
$db['default']['dsn'] = 'pgsql:host=localhost;port=5432;dbname=database_name';
// Oracle
$db['default']['dsn'] = '//localhost/XE';
참고
필요한 드라이버에 대해 DSN 문자열을 지정하지 않으면 CodeIgniter가 나머지 제공된 설정으로 DSN을 구성하려고 시도합니다.
참고
DSN 문자열을 제공하고 나머지 config 필드에 있는 일부 유효한 설정(예: 데이터베이스 문자 집합)이 누락된 경우 CodeIgniter가 이를 추가합니다.
주 연결이 어떤 이유로 연결할 수 없을 때를 위해 장애 조치를 지정할 수도 있습니다. 연결에 대한 장애 조치를 다음과 같이 설정하여 지정할 수 있습니다:
$db['default']['failover'] = array(
array(
'hostname' => 'localhost1',
'username' => '',
'password' => '',
'database' => '',
'dbdriver' => 'mysqli',
'dbprefix' => '',
'pconnect' => TRUE,
'db_debug' => TRUE,
'cache_on' => FALSE,
'cachedir' => '',
'char_set' => 'utf8',
'dbcollat' => 'utf8_general_ci',
'swap_pre' => '',
'encrypt' => FALSE,
'compress' => FALSE,
'stricton' => FALSE
),
array(
'hostname' => 'localhost2',
'username' => '',
'password' => '',
'database' => '',
'dbdriver' => 'mysqli',
'dbprefix' => '',
'pconnect' => TRUE,
'db_debug' => TRUE,
'cache_on' => FALSE,
'cachedir' => '',
'char_set' => 'utf8',
'dbcollat' => 'utf8_general_ci',
'swap_pre' => '',
'encrypt' => FALSE,
'compress' => FALSE,
'stricton' => FALSE
)
);
원하는 만큼 장애 조치를 지정할 수 있습니다.
더 단순한 것 대신 다차원 배열을 사용하는 이유는 선택적으로 여러 연결 값 세트를 저장할 수 있기 때문입니다. 예를 들어 단일 설치에서 여러 환경(개발, 프로덕션, 테스트 등)을 실행하는 경우 각 환경에 대한 연결 그룹을 설정한 다음 필요에 따라 그룹 간에 전환할 수 있습니다. 예를 들어 “test” 환경을 설정하려면 다음과 같이 합니다:
$db['test'] = array(
'dsn' => '',
'hostname' => 'localhost',
'username' => 'root',
'password' => '',
'database' => 'database_name',
'dbdriver' => 'mysqli',
'dbprefix' => '',
'pconnect' => TRUE,
'db_debug' => TRUE,
'cache_on' => FALSE,
'cachedir' => '',
'char_set' => 'utf8',
'dbcollat' => 'utf8_general_ci',
'swap_pre' => '',
'compress' => FALSE,
'encrypt' => FALSE,
'stricton' => FALSE,
'failover' => array()
);
그런 다음 시스템이 해당 그룹을 사용하도록 전역으로 지시하려면 config 파일에 있는 이 변수를 설정합니다:
$active_group = 'test';
참고
‘test’라는 이름은 임의적입니다. 원하는 것으로 지정할 수 있습니다. 기본적으로 주 연결에 “default”라는 단어를 사용했지만 이것도 프로젝트에 더 적합한 것으로 이름을 변경할 수 있습니다.
값 설명:¶
이름 |
설명 |
|---|---|
dsn |
DSN 연결 문자열 (올인원 설정 시퀀스). |
hostname |
데이터베이스 서버의 호스트명. 종종 ‘localhost’입니다. |
username |
데이터베이스에 연결하는 데 사용되는 사용자 이름. |
password |
데이터베이스에 연결하는 데 사용되는 비밀번호. |
database |
연결하려는 데이터베이스 이름. |
dbdriver |
데이터베이스 유형. 예: mysqli, postgre, odbc 등. 소문자로 지정해야 합니다. |
dbprefix |
Query Builder 쿼리를 실행할 때 테이블 이름에 추가되는 선택적 테이블 접두사. 여러 CodeIgniter 설치가 하나의 데이터베이스를 공유할 수 있습니다. |
pconnect |
TRUE/FALSE (불리언) - 영구 연결을 사용할지 여부. |
db_debug |
TRUE/FALSE (불리언) - 데이터베이스 에러를 표시할지 여부. |
cache_on |
TRUE/FALSE (불리언) - 데이터베이스 쿼리 캐싱을 활성화할지 여부. 데이터베이스 캐싱 클래스도 참조하세요. |
cachedir |
데이터베이스 쿼리 캐시 디렉터리의 절대 서버 경로. |
char_set |
데이터베이스와 통신할 때 사용되는 문자 집합. |
dbcollat |
데이터베이스와 통신할 때 사용되는 문자 정렬 순서. 참고 ‘mysql’과 ‘mysqli’ 드라이버에서만 사용됩니다. |
swap_pre |
dbprefix로 교체해야 하는 기본 테이블 접두사. 수동으로 작성된 쿼리를 실행할 수 있는 분산 애플리케이션에서 유용하며, 최종 사용자가 여전히 접두사를 커스터마이즈할 수 있어야 합니다. |
schema |
데이터베이스 스키마, 기본값은 ‘public’. PostgreSQL 및 ODBC 드라이버에서 사용됩니다. |
encrypt |
암호화된 연결을 사용할지 여부.
|
compress |
클라이언트 압축을 사용할지 여부 (MySQL만 해당). |
stricton |
TRUE/FALSE (불리언) - “Strict Mode” 연결을 강제할지 여부. 애플리케이션 개발 중 엄격한 SQL을 보장하는 데 좋습니다. |
port |
데이터베이스 포트 번호. 이 값을 사용하려면 database config 배열에 줄을 추가해야 합니다. $db['default']['port'] = 5432;
|
참고
사용 중인 데이터베이스 플랫폼(MySQL, PostgreSQL 등)에 따라 모든 값이 필요한 것은 아닙니다. 예를 들어 SQLite를 사용할 때는 사용자 이름이나 비밀번호를 제공할 필요가 없으며 데이터베이스 이름은 데이터베이스 파일 경로가 됩니다. 위 정보는 MySQL을 사용한다고 가정합니다.