Django는 기본적으로 SQLite를 데이터베이스로 사용하도록 설정되어 있지만, 실제 서비스 환경이나 대규모 데이터 처리를 위해서는 MySQL 또는 PostgreSQL과 같은 강력한 관계형 데이터베이스 관리 시스템(RDBMS)을 연동해야 합니다. 각 데이터베이스별 드라이버 설치부터 Django 설정 및 마이그레이션 과정을 설명합니다.
1. MySQL 데이터베이스 구성
MySQL 드라이버 설치
Django에서 MySQL 엔진을 사용하기 위해서는 mysqlclient 라이브러리가 필요합니다. 이 라이브러리는 C로 작성되어 빠른 속도와 높은 호환성을 제공합니다.
pip install mysqlclient
데이터베이스 및 사용자 생성
MySQL 서버에 접속하여 프로젝트에서 사용할 데이터베이스를 생성하고 권한을 부여합니다. 이모지 등 4바이트 문자를 지원하기 위해 utf8mb4 인코딩 설정을 권장합니다.
-- 데이터베이스 생성
CREATE DATABASE app_db_name CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
-- 사용자 생성 및 권한 부여
CREATE USER 'db_admin'@'localhost' IDENTIFIED BY 'complex_password';
GRANT ALL PRIVILEGES ON app_db_name.* TO 'db_admin'@'localhost';
FLUSH PRIVILEGES;
Django settings.py 설정
프로젝트 설정 파일에서 DATABASES 항목을 다음과 같이 수정합니다.
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'app_db_name',
'USER': 'db_admin',
'PASSWORD': 'complex_password',
'HOST': '127.0.0.1',
'PORT': '3306',
'OPTIONS': {
'init_command': "SET sql_mode='STRICT_TRANS_TABLES'",
},
}
}
2. PostgreSQL 데이터베이스 구성
PostgreSQL 드라이버 설치
PostgreSQL 연동을 위해 psycopg2 라이브러리가 필요합니다. 일반적으로 컴파일된 바이너리 버전인 psycopg2-binary를 설치하여 간편하게 구축할 수 있습니다.
pip install psycopg2-binary
데이터베이스 스키마 생성
명령행 도구(psql) 또는 GUI 도구를 사용하여 데이터베이스 환경을 준비합니다.
CREATE DATABASE pg_service_db;
CREATE USER pg_manager WITH PASSWORD 'secure_pass_123';
ALTER ROLE pg_manager SET client_encoding TO 'utf8';
ALTER ROLE pg_manager SET default_transaction_isolation TO 'read committed';
ALTER ROLE pg_manager SET timezone TO 'UTC';
GRANT ALL PRIVILEGES ON DATABASE pg_service_db TO pg_manager;
Django settings.py 설정
PostgreSQL의 엔진 경로와 연결 정보를 입력합니다.
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.postgresql',
'NAME': 'pg_service_db',
'USER': 'pg_manager',
'PASSWORD': 'secure_pass_123',
'HOST': 'localhost',
'PORT': '5432',
}
}
3. 마이그레이션 실행 및 연결 확인
데이터베이스 설정이 완료되면 Django의 모델 정보를 데이터베이스 스키마로 동기화해야 합니다. 다음 명령어를 순차적으로 실행합니다.
# 모델 변경 사항 탐지 및 마이그레이션 파일 생성
python manage.py makemigrations
# 데이터베이스에 실제 테이블 생성
python manage.py migrate
연결 상태 테스트
설정이 올바르게 되었는지 확인하기 위해 Django 셸을 이용해 데이터베이스 연결을 시도해 볼 수 있습니다.
python manage.py shell
>>> from django.db import connection
>>> cursor = connection.cursor()
>>> print(connection.ensure_connection()) # None이 출력되면 연결 성공
4. 보안 및 운영 팁
- 환경 변수 활용: 데이터베이스 비밀번호와 같은 민감 정보는
settings.py에 직접 작성하지 말고os.environ또는python-dotenv라이브러리를 사용하여 환경 변수로 관리하십시오. - 문자 인코딩: MySQL을 사용한다면 반드시
utf8mb4를 사용하여 다국어 지원 및 특수 문자 저장 문제를 방지해야 합니다. - 포트 개방: 외부 데이터베이스 서버를 사용하는 경우 방화벽 설정에서 MySQL(3306) 또는 PostgreSQL(5432) 포트가 허용되어 있는지 확인해야 합니다.