본문 바로가기

주식 공부

[주식거래자동화] 04. Django 에 PostgreSQL 연동

반응형

Django 설치 후 증권데이터를 수집/관리하기 위해 PostgreSQL 을 설치하여 연동한다.

PostgreSQL 은 Django 에서 사용 권장하며 최적화되어있다고 명시되어 있는 DB라서 선택하였다.

PostgreSQL은 확장 가능성 및 표준 준수를 강조하는 객체-관계형 데이터베이스 관리 시스템(ORDBMS)의 하나이다. BSD 허가권으로 배포되며 오픈소스 개발자 및 관련 회사들이 개발에 참여하고 있다. 데이터베이스 서버로서 주요 기능은 데이터를 안전하게 저장하고 다른 응용 소프트웨어로부터의 요청에 응답할 때 데이터를 반환하는 것이이다. 소규모의 단일 머신 애플리케이션에서부터 수많은 동시 접속 사용자가 있는 대형의 인터넷 애플리케이션(또는 데이터 웨어하우스용)에 이르기까지 여러 부하를 관리할 수 있으며 macOS 서버의 경우 PostgreSQL은 기본 데이터베이스이다.마이크로소프트 윈도우, 리눅스(대부분의 배포판에서 제공됨)용으로도 이용 가능하다.

참고 : https://ko.wikipedia.org/wiki/PostgreSQL

PostgreSQL 을 사용해본 적은 없지만 다른 RDBMS 의 기능들은 거의 다 갖추고 있다고 한다.

PostgreSQL 설치하기

https://www.postgresql.org/download/ 링크에 접속하여 각 운영체제에 맞는 설치 파일을 다운로드 한다. 나는 WIndows Server 를 사용 중이기 때문에 Windows 버전으로 다운받아 설치한다. 버전은 최신버전인 13으로 하였다.

Installer 의 Default 설정으로 우선 설치를 완료한 후 Windows 키를 눌러 SQL Shell 창을 띄운다.

 

 

이후 SQL Shell Prompt 에서 localhost, Database 등을 설정할 수 있다. 원하는 설정을 해도 되지만 아무런 입력값을 주지 않으면 "[]" 안의 기본 값들로 설정이 된다. 나는 기본 값들로 DB 설정을 했다.

 

 

Database 구성

PostgreSQL 설치가 끝났다면 DB 생성을 해 주어야 한다. 실행하고 설정한 SQL Shell 에서 다음과 같은 명령들을 입력한다.

1. Database 생성

create database django_test;

create user django_test with password 'django_test';

alter role django_test set client_encoding to 'utf-8';

alter role django_test set timezone to 'Asia/Seoul';

grant all privileges on all tables in schema public to django_test;

 

2. PostgreSQL 라이브러리 설치

VSCode 의 터미널에서 psycopg2 를 설치한다.

pip install psycopg2

 

 

 

3. Django 설정

생성한 프로젝트인 mysite의 settings.py 파일을 열어 Database 를 설정한다.
우선 DB 설정 전 TIME_ZONE 을 설정한다.

TIME_ZONE = 'Asia/Seoul'

 

Database 를 설정한다.

 

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.postgresql',
        'NAME': 'django_test',
        'USER': 'django_test',
        'PASSWORD': 'django_test',
        'HOST': 'localhost',
        'PORT': 5432,
    }
}

 

BASE_DIR, TEMPLATES 를 설정한다. 설정하기 전 settings.py 상단에 import os 를 추가한다.

 

import os

...

BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))

...

TEMPLATES = [
    {
        ...
        'DIRS': [ os.path.join(BASE_DIR, 'templates') ],
        ...
    },
]

 

project 최상단 mysite 디렉터리 아래 templates 디렉터리를 생성한다.

마지막으로 VSCode Terminal 에서 migrate 를 수행한다.

 

python ./manage.py migrate

 

 

 

4. App 생성

이제 설정한 PostgreSQL 을 Django App 을 통해 DB Control을 테스트해본다.

mysite 경로에서 아래 명령어로 polls 라는 이름의 app 을 생성한다.

 

python manage.py startapp polls

 

생성된 polls 디렉터리의 views.py 파일을 수정하여 View 를 작성한다.

 

# polls/views.py
from django.http import HttpResponse


def index(request):
    return HttpResponse("Hello, world. You're at the polls index.")

 

polls 디렉터리 아래 urls.py 파일을 생성하여 routing 경로를 잡아준다.

 

# polls/urls.py
from django.urls import path

from . import views

urlpatterns = [
    path('', views.index, name='index'),
]

 

mysite 아래 urls.py 를 수정하여 polls routing 을 설정한다.

 

# mysite/urls.py
from django.contrib import admin
from django.urls import include, path

urlpatterns = [
    path('polls/', include('polls.urls')),
    path('admin/', admin.site.urls),
]

 

polls 아래 경로의 models.py 를 수정하여 모델을 생성한다.

 

# polls/models.py
from django.db import models

class Question(models.Model):
    question_text = models.CharField(max_length=200)
    pub_date = models.DateTimeField('date published')


class Choice(models.Model):
    question = models.ForeignKey(Question, on_delete=models.CASCADE)
    choice_text = models.CharField(max_length=200)
    votes = models.IntegerField(default=0)

 

현재 mysite 프로젝트에 polls app 이 생성된 것을 알리기 위해 settings.py 를 수정한다.

 

#mysite/settings.py
INSTALLED_APPS = [
    'polls.apps.PollsConfig',
    ...
]

 

이제, Django는 polls 앱이 포함된 것을 알게 되었고 아래 명령을 수행시킨다.

 

python manage.py makemigrations polls

 

 

 

명령 수행 결과 polls 경로 아래 migrations 디렉터리가 생성되었고 그 아래 0001_initial.py 파일이 생성된 것을 확인할 수 있다.

아래 명령으로 생성된 0001_initail.py 스크립트가 SQL 문장으로 어떻게 표현되는지 확인한다.

 

python manage.py sqlmigrate polls 0001

 

 

 

이제 마지막으로 migrate 를 실행하여 DB 모델과 관련된 테이블을 생성한다.

 

python manage.py migrate

 

 

 

migrate 명령은 명령은 아직 적용되지 않은 마이그레이션을 모두 수집해 이를 실행하며 이 과정을 통해 모델에서이 변경 사항들과 DB 의 스키마의 동기화가 이루어진다.

migration 결과는 SQL Shell 을 통해서 확인할 수 있다.

 

\c django_test

 

 

 

 

\dt

 

 

 

migration 결과로 테이블이 생성된 것을 확인할 수 있다.

 

5. PostgreSQL 관리앱

PostgreSQL 설치 시 기본으로 제공되는 앱 중 pgAdmin4 앱을 통하면 Shell 명령이 아닌 Web UI로 관리를 할 수 있다.

Windows 키를 눌러 pgadmin4 를 입력하면 다음과 같은 App 을 찾을 수 있다.

 

 

해당 앱을 실행 후 설정한 패스워드로 접속 시 Databsae 를 UI로 확인할 수 있다.

 

 

정리

우선 Django 에서 제공하는 튜토리얼과 아래 참고 링크의 블로그들을 참조하여 PostgreSQL 설치와 Django 연동을해 보았다.
우선 migration 과 DB 사용을 위한 기초 워밍업을 위해 정리를 해 보았지만 자세한 내용들은 Django 튜토리얼 문서에 기재되어 있다.
Table 생성 되는 것을 확인하였으니 다음은 주식정보를 획득하기 위한 DB 설계와 주식 데이터 수집을 위한 API 연동을 하려 한다.

 

참고링크

 
반응형