소개
Django는 파이썬으로 작성된 무료 및 오픈 소스 웹 프레임워크입니다. 이 도구는 확장성, 재사용성 및 빠른 개발을 가능하게 합니다.
이 튜토리얼에서는 MySQL 데이터베이스와 연결된 블로그 웹 사이트의 초기 기반을 설정하는 방법을 배우게 됩니다. 이 과정에는 django-admin
을 사용하여 블로그 웹 애플리케이션의 뼈대 구조를 생성하고, MySQL 데이터베이스를 생성하고, 웹 애플리케이션을 데이터베이스에 연결하는 작업이 포함됩니다.
Django는 블로그 웹 애플리케이션을 개발할 수 있는 개발 환경을 제공하지만, 블로그를 인터넷에서 실제로 사용하기 위해 더 많은 단계를 거쳐야 합니다.
필수 조건
이 튜토리얼을 따라가려면 다음이 필요합니다:
- 루트가 아닌
sudo
권한이 있는 Ubuntu 22.04 서버 및 방화벽. 이를 설정하려면 우분투 22.04 초기 서버 설정 가이드를 따르십시오. - MySQL가 데이터베이스로 설치되었습니다. 우분투 22.04에 MySQL을 설치하는 방법 튜토리얼을 따라 설치할 수 있습니다.
- A Python environment set up. For this, follow our tutorial on How To Install Python 3 and Set Up a Programming Environment on Ubuntu 22.04
.
모든 것이 설치되고 설정되면 첫 번째 단계로 넘어갈 수 있습니다.
단계 1 — 데이터베이스 생성
Django는 여러 인기있는 데이터베이스 관리 시스템을 지원하지만, 이 가이드는 Django를 MySQL 데이터베이스에 연결하는 데 초점을 맞춥니다. 이를 위해 MySQL 인스턴스에 데이터베이스를 생성하고 Django가 데이터베이스에 연결하는 데 사용할 MySQL 사용자 프로필을 생성해야 합니다.
이를 설정하려면 다음 명령을 사용하여 root MySQL 사용자로 MySQL 데이터베이스에 연결합니다:
MySQL 서버에 있음을 확인하려면 프롬프트가 변경됩니다:
다음 명령을 사용하여 현재 데이터베이스를 검사합니다:
아직 데이터베이스를 생성하지 않았다고 가정하면 다음과 유사한 출력이 표시됩니다:
Output+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| sys |
+--------------------+
4 rows in set (0.00 sec)
기본적으로 이미 4개의 데이터베이스가 생성되어 있습니다: information_schema
, MySQL
, performance_schema
, sys
. 이러한 데이터베이스를 건드릴 필요는 없습니다. 이들은 MySQL 서버 자체에 중요한 정보를 포함하고 있습니다.
대신, 블로그 데이터를 저장할 초기 데이터베이스를 생성합니다.
MySQL에서 데이터베이스를 만들려면 다음 명령을 실행하고 데이터베이스에 의미 있는 이름을 사용하십시오:
데이터베이스가 성공적으로 생성되면 출력은 다음과 같아야 합니다:
OutputQuery OK, 1 row affected (0.00 sec)
데이터베이스가 이제 사용 가능한 데이터베이스 중 하나로 표시되는지 확인하십시오:
blog_data
데이터베이스가 출력에 포함된 데이터베이스 중 하나로 표시되어야 합니다:
Output+--------------------+
| Database |
+--------------------+
| information_schema |
| blog_data |
| mysql |
| performance_schema |
| sys |
+--------------------+
5 rows in set (0.00 sec)
다음으로, Django가 새 데이터베이스를 작동하는 데 사용할 별도의 MySQL 사용자 계정을 만듭니다. 특정 데이터베이스 및 계정을 만드는 것은 관리 및 보안 측면에서 지원할 수 있습니다. 이 안내서에서는 djangouser라는 이름을 사용합니다. 원하는 이름을 사용할 수 있지만 설명적인 이름을 선택하는 것이 도움이 될 수 있습니다.
이 계정을 만들고 비밀번호를 설정하고 데이터베이스에 액세스 권한을 부여하기 위해 다음 명령을 입력하여 사용자와 비밀번호를 설정합니다. 이 예제에서 password
를 교체하여 데이터베이스에 강력한 암호를 선택하십시오:
djangouser가 설정한 데이터베이스에 대한 완전한 액세스 권한을 갖도록 데이터베이스에 알려주세요:
이제 Django용으로 특별히 만든 데이터베이스와 사용자 계정이 있습니다. 최근에 한 변경 사항을 현재 MySQL 인스턴스가 인식하도록 권한을 플러시합니다:
이 작업이 완료되면 MySQL 서버를 종료하려면 EXIT;
를 입력하거나 CTRL + D
를 누릅니다.
단계 2 — MySQL 옵션 파일 생성
Django 구성 파일에 MySQL 연결 세부 정보를 지정하는 대신, 이를 옵션 파일에 저장할 수 있습니다. 많은 MySQL 프로그램이 시작 옵션이나 연결 세부 정보와 같은 정보를 읽을 수 있는 옵션 파일(구성 파일로도 알려짐)을 사용할 수 있습니다. 이렇게 하면 데이터베이스 로그인 자격 증명을 한 곳에만 저장하면 되므로 편리합니다.
선호하는 텍스트 편집기를 사용하여 my.cnf
구성 파일을 열어 MySQL 자격 증명을 업데이트합니다. 여기에서는 nano
를 사용할 것입니다:
다음 줄을 추가하고 관련 정보를 포함하십시오:
…
[client]
database = blog_data
user = djangouser
password = your_actual_password
default-character-set = utf8
utf8
가 기본 인코딩으로 설정되어 있음에 유의하십시오. 이는 MySQL에서 유니코드 데이터를 인코딩하는 일반적인 방법입니다. 세부 정보가 올바른지 확실하면 파일을 저장하고 닫으십시오. 파일 편집에 nano
를 사용했다면 파일을 저장하려면 CTRL + O
를 누르고 편집기를 닫으려면 CTRL + X
를 누르면 됩니다.
파일을 편집한 후 MySQL을 다시 시작하여 변경 사항이 적용되도록 합니다:
MySQL을 다시 시작하는 데는 몇 초가 걸릴 수 있으므로 잠시 기다려 주십시오.
단계 3 — 초기 Django 프로젝트 뼈대 생성
이 단계에서는 django-admin
명령을 사용하여 프로젝트 뼈대를 생성하여 애플리케이션에 대한 기본 작업을 설정합니다.
블로그 앱을 구축하려는 디렉터리로 이동합니다. 해당 디렉터리 내에서 앱을 구축하기 위한 특정 디렉터리를 생성합니다. 구축 중인 앱에 의미 있는 이름으로 디렉터리를 지정합니다. 예를 들어, 저희는 my_blog_app
라고 이름 지을 것입니다:
이제 새로 생성한 디렉터리로 이동합니다:
다음으로 Django에서 작업할 프로그래밍 환경으로 이동합니다. 기존 환경을 사용하거나 새로운 환경을 생성할 수 있습니다. 다음 명령은 env
라는 새 환경을 생성하지만, 의미 있는 이름을 사용하시기 바랍니다:
생성한 환경을 활성화합니다:
이제 아직 설치하지 않았다면 Django를 이 환경에 설치합니다:
my_blog_app
디렉터리에 있는 동안 다음 명령을 실행하여 프로젝트를 생성합니다:
작업이 잘 되었는지 확인하기 위해 blog/
디렉터리로 이동합니다:
그런 다음 ls
를 실행하여 프로젝트 폴더 내에 필요한 파일과 디렉터리가 생성되었는지 확인합니다:
출력에는 blog
디렉터리와 manage.py
파일이 표시됩니다:
Outputblog manage.py
이제 블로그 응용 프로그램의 초기 시작을 포함하는 프로젝트 디렉토리를 생성했으므로 다음 단계로 진행할 수 있습니다.
단계 4 — MySQL 데이터베이스 커넥터 설치
프로젝트에서 MySQL을 사용하려면 Django와 호환되는 Python 3 데이터베이스 커넥터 라이브러리가 필요합니다. 이 단계에서는 mysqlclient
라는 하나의 데이터베이스 커넥터를 설치하는 방법을 개요로 설명합니다. 이는 MySQLdb
의 포크 버전입니다.
먼저 필요한 MySQL 개발 헤더 및 라이브러리를 설치하십시오:
다음으로, pip
를 사용하여 wheel
패키지를 설치하십시오. Wheel은 Python에서 Python Package Index에서 모듈을 설치하는 데 사용되는 패키지 형식입니다. 휠 패키지에서 Python 프로그램을 설치하는 것이 일반적으로 소스 코드에서 패키지를 빌드하는 것보다 더 빠르고 리소스를 효율적으로 사용합니다. 휠로 패키지화된 프로그램을 설치하고 사용하려면 먼저 wheel
패키지가 설치되어 있는지 확인해야 합니다:
그런 다음 mysqlclient
를 설치하십시오:
다음은 클라이언트가 올바르게 설치되었음을 확인하는 출력입니다:
Output...
Successfully installed mysqlclient-2.1.1
이제 PyPi mysqlclient
커넥터 라이브러리를 사용하여 MySQL 클라이언트를 성공적으로 설치했습니다.
단계 5 — 설정 편집
...
LANGUAGE_CODE = 'en-us'
TIME_ZONE = 'UTC'
USE_I18N = True
USE_L10N = True
USE_TZ = True
...
...
LANGUAGE_CODE = 'en-us'
TIME_ZONE = 'America/New_York'
USE_I18N = True
...
정적 파일
…
STATIC_URL = '/static/'
STATIC_ROOT = os.path.join(BASE_DIR, 'static')
...
이제 시간대와 정적 파일 경로를 추가했으니 허용된 호스트 목록에 IP를 추가하세요. settings.py
파일에서 ALLOWED_HOSTS
라는 줄로 이동하면 됩니다. 이 줄은 settings.py
파일의 상단쯤에 있을 것입니다. 대괄호 사이에 서버의 IP 주소를 작은따옴표로 둘러싸서 추가하세요:
...
ALLOWED_HOSTS = ['your_server_IP_address']
...
다음으로, 디렉터리에 대한 다양한 기능을 제공하는 Python OS 모듈을 추가하세요. 이 모듈을 추가하지 않으면 Django 인터페이스를 시작하기 위해 관리 사용자를 설정할 때 오류가 발생합니다. 이를 위해 해당 운영 체제에서 작동할 os
모듈을 가져와야 합니다. from pathlib import Path
줄 위에 import os
줄을 추가하세요:
...
import os
from pathlib import Path
...
지금까지 settings.py
파일을 편집하여 올바른 시간대가 구성되었습니다. 정적 파일의 경로를 추가하고, 애플리케이션에 대한 ip 주소
를 ALLOWED_HOST
로 설정하고, 나중에 관리 사용자를 설정하는 데 도움이 되도록 Python OS 모듈을 가져왔습니다.
파일에 추가해야 할 마지막 스니펫은 MySQL에 Django 블로그 애플리케이션을 연결하는 데이터베이스 연결 자격 증명입니다. 이를 위해 파일 내에서 DATABASES
사전을 찾으세요. 기본적으로 다음과 같이 보일 것입니다:
…
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.sqlite3',
'NAME': BASE_DIR / 'db.sqlite3',
}
}
...
DATABASES
사전의 ENGINE
및 NAME
옵션을 다음 줄로 바꾸세요:
...
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'OPTIONS': {
'read_default_file': '/etc/mysql/my.cnf',
},
}
}
...
'ENGINE': 'django.db.backends.mysql'
라인은 Django가 내장 MySQL 데이터베이스 백엔드를 사용하도록 지시합니다. read_default_file
옵션은 이전에 편집한 MySQL 옵션 파일인 /etc/mysql/my.cnf
을 가리킵니다. 이는 Django에게 단계 1에서 생성한 MySQL 데이터베이스에 연결할 때 관련 연결 세부 정보를 찾을 수 있는 위치를 알려줍니다.
Django는 다음과 같은 순서로 데이터베이스 연결 설정을 읽습니다:
OPTIONS
NAME
,USER
,PASSWORD
,HOST
,PORT
- MySQL 옵션 파일
이 예제와 같이 OPTIONS
설정 내에서 Django를 MySQL 옵션 파일로 지정하면, 그것은 그 외의 경우에는 옵션 파일을 무시하게 될 NAME
설정보다 우선합니다. 그렇지 않으면 OPTIONS
설정 외부에서 그것을 가리킬 경우 옵션 파일을 무시하게 됩니다.
이 시점에서 파일을 저장하고 닫을 수 있습니다.
다음으로, 다음을 실행하여 마이그레이션 변경 사항을 확인합니다:
그런 다음 변경 사항이 적용되도록 migrate
를 실행하세요:
이제 변경 사항이 마이그레이션되었으므로, Django 관리자 인터페이스를 사용할 관리자 사용자를 생성할 수 있습니다. 이것은 createsuperuser
명령을 사용하여 수행합니다:
사용자 이름, 이메일 주소 및 사용자의 비밀번호를 입력하라는 메시지가 표시됩니다.
이 정보를 입력한 후에는 테스트를 위해 방화벽 설정을 조정할 차례입니다.
단계 6 — 방화벽 설정 조정
장고 웹 애플리케이션을 테스트하기 전에 방화벽 설정을 조정해야 합니다. 먼저 ufw
설정을 변경하여 포트 8000
에 대한 액세스를 허용하세요:
이 허가 설정이 성공적으로 업데이트되었는지 확인하기 위해 상태를 확인하세요:
OutputStatus: active
To Action From
-- ------ ----
OpenSSH ALLOW Anywhere
8000 ALLOW Anywhere
OpenSSH (v6) ALLOW Anywhere (v6)
8000 (v6) ALLOW Anywhere (v6)
이제 방화벽 설정이 올바르게 조정되어 다음 단계에서 연결을 테스트할 수 있습니다.
단계 7 — 애플리케이션에 대한 MySQL 연결 테스트
이제 Django 구성이 MySQL 서버를 올바르게 감지하는지 확인할 수 있습니다. 이를 위해 서버를 실행해 보세요. 실패하면 연결이 제대로 작동하지 않는 것입니다. 그렇지 않으면 연결이 유효합니다.
먼저 다음 디렉터리로 이동하세요:
그런 다음 다음 명령을 실행하세요:
다음과 유사한 출력을 받게 될 것입니다:
OutputPerforming system checks...
System check identified no issues (0 silenced).
July 19, 2022 - 13:26:08
Django version 4.0.6, using settings 'blog.settings'
Starting development server at http://your-server-ip:8000/
Quit the server with CONTROL-C.
참고: 출력에서 미적용된 마이그레이션이 있음을 알 수 있습니다. 걱정하지 마세요. 이것은 애플리케이션의 초기 설정에 영향을 미치지 않으며 계속 진행할 수 있습니다.
출력에서 지시 사항을 따르고 제안된 링크, http://your-server-ip:8000/
로 이동하여 웹 애플리케이션을 확인하고 올바르게 작동하는지 확인하십시오.
페이지가 위의 스크린샷과 유사하게 나타나면 Django 애플리케이션이 예상대로 작동합니다.
앱 테스트를 완료하면 CTRL + C
를 눌러 runserver
명령을 중지하십시오. 이렇게 하면 프로그래밍 환경으로 돌아갑니다.
파이썬 환경을 종료할 준비가 되면 deactivate
명령을 실행할 수 있습니다:
프로그래밍 환경 비활성화를 통해 터미널 명령 프롬프트로 돌아갑니다.
결론
이 튜토리얼에서는 Django 블로그의 초기 기초를 작성했습니다. MySQL을 설치, 구성 및 Django 백엔드에 연결했습니다. 또한 Django 애플리케이션을 MySQL에 연결하기 위한 데이터베이스 자격 증명과 함께 중요한 정보를 애플리케이션의 settings.py
파일에 추가했습니다. 또한 테스트가 원활하게 진행되도록 방화벽 설정을 조정했습니다.
이러한 기본 설정 및 구성이 완료되면 Django 애플리케이션에서 모델을 개발하고 마이그레이션을 적용할 수 있습니다.