데이터베이스 설정

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

암호화된 연결을 사용할지 여부.

  • ‘mysql’ (deprecated), ‘sqlsrv’, ‘pdo/sqlsrv’ 드라이버는 TRUE/FALSE를 허용합니다.

  • ‘mysqli’, ‘pdo/mysql’ 드라이버는 다음 옵션이 있는 배열을 허용합니다:

    • ‘ssl_key’ - 개인 키 파일 경로

    • ‘ssl_cert’ - 공개 키 인증서 파일 경로

    • ‘ssl_ca’ - 인증 기관 파일 경로

    • ‘ssl_capath’ - PEM 형식의 신뢰할 수 있는 CA 인증서가 포함된 디렉터리 경로

    • ‘ssl_cipher’ - 콜론(‘:’)으로 구분된 암호화에 사용할 허용된 암호 목록

    • ‘ssl_verify’ - TRUE/FALSE; 서버 인증서를 검증할지 여부 (‘mysqli’만 해당)

compress

클라이언트 압축을 사용할지 여부 (MySQL만 해당).

stricton

TRUE/FALSE (불리언) - “Strict Mode” 연결을 강제할지 여부. 애플리케이션 개발 중 엄격한 SQL을 보장하는 데 좋습니다.

port

데이터베이스 포트 번호. 이 값을 사용하려면 database config 배열에 줄을 추가해야 합니다.

$db['default']['port'] = 5432;

참고

사용 중인 데이터베이스 플랫폼(MySQL, PostgreSQL 등)에 따라 모든 값이 필요한 것은 아닙니다. 예를 들어 SQLite를 사용할 때는 사용자 이름이나 비밀번호를 제공할 필요가 없으며 데이터베이스 이름은 데이터베이스 파일 경로가 됩니다. 위 정보는 MySQL을 사용한다고 가정합니다.