Django 와 Tibero 연동 방법에 대한 자료입니다.
테스트 환경 사전 준비 사항
테스트를 하기위해서는 파이썬과 파이썬 개발 툴을 설치 해야 합니다.
그리고 Django Framework 과 Tibero 를 연결하기 위해서는 Tibero odbc 설치가 되어야 하며
django 와 Tibero 연결을 위한 tibero 용 connector 가 준비 되어야 합니다.
- 파이썬
- 파이참
- Tibero odbc 연결
- Tibero 연동 django Connector
연결 되는 방식은 아래의 그림과 같습니다.
파이썬 개발툴 (PyCharm) 다운로드
테스트를 진행 하기위해 파이썬 개발 도구 툴인 PyCharm 을 다운로드 받습니다.
아래 경로에서 파이참을 다운로드 받습니다.
Professional 버전과 Community 버전이 있는데 무료 버전인 Community 버전으로 연동 테스트를 진행 하겠습니다.
https://www.jetbrains.com/ko-kr/pycharm/download/#section=windows
PyCharm 샘플 프로젝트 오픈
PyCharm 을 실행후 File -> open -> DjangoSample 프로젝트를 오픈합니다.
파이썬 가상 환경 생성
파이썬 가상 환경은 파이썬 프로젝트를 진행할 때 독립된 환경을 제공해주는 도구 입니다.
각각의 어플리케이션마다 구동 환경이 다를 경우 별도의 환경을 개별 적으로 만들어 줄수 있습니다. 예를 들어 첫번째 어플리케이션은 파이썬 2.7 버전 + Django3.x 환경으로 구성하고 두번째 어플리케이션은 파이썬 3.7 버전 + Django4.x 버전으로 환경으로 독립적으로 구성해서 개발을 진행 할수 있습니다.
- app1 : venv1(파이썬 2.7 버전 + Django3.x)
- app2 : venv2(파이썬 3.7 버전 + Django4.x )
가상환경을 만드는 방법에 대해 알아보겠습니다.
파이참을 실행하면 화면 하단에 Terminal 이란 창이 있습니다.
해당 창은 윈도우 CMD 창에서 작업을 진행 하는 내용과 동일 하게 수행 할수 있는 기능 입니다.
D:\ 에 가상환경을 만들어 보겠습니다.
python -m venv samples 명령을 통해 가상 환경을 만듭니다.
cd D:\
mkdir venvs
cd venvs
python -m venv samples
python -m venv samples 수행 후 samples 라는 디렉 토리가 생기고 samples 디렉토리 내에는 가상화 할수 있는 환경 파일들이 추가 생성 되게 됩니다.
activate 명령을 통해 가상환경에 진입합니다. 반대로 빠져 나오고자 할때는 deactivate 명령을 수행 합니다.
- activate :가상환경 진입
- deactivate : 가상환경 나오기
D:\venvs\samples\Scripts>activate
(samples) D:\venvs\samples\Scripts>deactivate
D:\venvs\samples\Scripts>
Django 팩키지 설치
Tibero 와 연동하기 위해서는 pyodbc 가 설치 되어 있어야 합니다.
그리고 Django 버전은 2.2.x 버전을 설치 해야 합니다. django 3.x 버전을 지원하는 Tibero adapter 가 현재는 없는것으로 보입니다.
파이썬 에서 팩키지 설치는 pip 명령으로 설치가 가능합니다.
python -m pip install --upgrade pip
pip install Django==2.2.24
pip install pyodbc==4.0.31
- pip list 를 통해 설치된 팩키지 리스트를 확인해볼수 있습니다.
Package Version
---------- -------
Django 2.2.24
pip 22.0.4
pyodbc 4.0.31
pytz 2022.1
setuptools 41.2.0
sqlparse 0.4.2
[윈도우]DJango Tibero 연동 테스트
테스트를 하기 위한 개발 환경 준비가 끝났습니다.
이제 Django 와 Tibero 연동 테스트를 진행 하겠습니다.
Tibero ODBC 설치 및 접속 설정
Tibero ODBC 설치 관련한 내용은 Tibero 매뉴얼을 참고 하세요
https://technet.tmaxsoft.com/upload/download/online/tibero/pver-20180723-000001/index2.html
Tibero ODBC 설치 | Django Tibero 연결 정보 수정 (settings.py) |
Django Sample 프로젝트 실행
가상환경 진입 상태에서 다운로드 받은 샘플 프로 젝트를 수행 합니다.
수행 명령은 python manage.py runserver 입니다.
python manage.py runserver
해당 명령을 수행하면 에러가 발생합니다.
Tibero 와 연동을 하기위한 Django db adapter 가 없어서 에러가 발생합니다.
D:\venvs\samples\lib\site-packages\django\db\__init__.py
Watching for file changes with StatReloader
Exception in thread django-main-thread:
Traceback (most recent call last):
File "D:\venvs\samples\lib\site-packages\django\db\utils.py", line 110, in load_backend
return import_module('%s.base' % backend_name)
File "C:\Users\jungki\AppData\Local\Programs\Python\Python37\lib\importlib\__init__.py", line 127, in import_module
return _bootstrap._gcd_import(name[level:], package, level)
File "<frozen importlib._bootstrap>", line 1006, in _gcd_import
File "<frozen importlib._bootstrap>", line 983, in _find_and_load
File "<frozen importlib._bootstrap>", line 965, in _find_and_load_unlocked
ModuleNotFoundError: No module named 'django.db.backends.tibero'
....................
..............
...........
중략
...........
...........
class AbstractBaseUser(models.Model):
File "D:\venvs\samples\lib\site-packages\django\db\models\base.py", line 117, in __new__
new_class.add_to_class('_meta', Options(meta, app_label))
File "D:\venvs\samples\lib\site-packages\django\db\models\base.py", line 321, in add_to_class
value.contribute_to_class(cls, name)
File "D:\venvs\samples\lib\site-packages\django\db\models\options.py", line 204, in contribute_to_class
self.db_table = truncate_name(self.db_table, connection.ops.max_name_length())
File "D:\venvs\samples\lib\site-packages\django\db\__init__.py", line 28, in __getattr__
return getattr(connections[DEFAULT_DB_ALIAS], item)
File "D:\venvs\samples\lib\site-packages\django\db\utils.py", line 201, in __getitem__
backend = load_backend(db['ENGINE'])
File "D:\venvs\samples\lib\site-packages\django\db\utils.py", line 125, in load_backend
) from e_user
django.core.exceptions.ImproperlyConfigured: 'django.db.backends.tibero' isn't an available database backend.
Try using 'django.db.backends.XXX', where XXX is one of:
'mysql', 'oracle', 'postgresql', 'sqlite3'
Django 연동 Tibero adapter 다운로드 및 디렉 토리 복사
아래 경로에서 Django 와 연동할수 있는 아답터를 다운로드 받습니다.
다운로드 받은 파일을 에러가 발생한 디렉토리로 복사합니다.
- 파일 이름 변경: DjangoAdapter-main -> tibero
D:\venvs\samples\Lib\site-packages\django\db\backends 경로에 이름 변경한 tibero 폴더 복사
* D:\venvs\samples\lib\site-packages\django\db\backends\tibero
https://github.com/TiberoClient/DjangoAdapter
Django migrate
python manage.py runserver 을 다시 수행 합니다.
Starting development server at http://127.0.0.1:8000/ 라는 메시지가 나오면 정상 적으로 어플리케이션이 구동한 상태입니다.
웹에서 http://127.0.0.1:8000/admin 접속 합니다.
에러가 발생 할 것입니다.
Django FrameWork 에서 사용 되는 Table 들이 없어서 발생하는 문제입니다.
어플리케이션 수행시 (python manage.py runserver ) 내용을 좀더 자세히 보겠습니다.
친절하게 python manage.py migrate 수행하라고 설명해 주고 있습니다.
Watching for file changes with StatReloader
Performing system checks...
System check identified no issues (0 silenced).
You have 18 unapplied migration(s). Your project may not work properly until you apply the migrations for app(s): admin, auth, contenttypes, polls, sessions.
Run 'python manage.py migrate' to apply them.
April 06, 2022 - 20:38:15
- python manage.py migrate 수행
- 해당 명령을 수행하면 django framework 에서 필요로 하는 여러 테이블들을 Tibero 서버에 자동으로 생성을 해주게 됩니다.
Operations to perform:
Apply all migrations: admin, auth, contenttypes, polls, sessions
Running migrations:
Applying contenttypes.0001_initial... OK
Applying auth.0001_initial... OK
Applying admin.0001_initial... OK
Applying admin.0002_logentry_remove_auto_add... OK
Applying admin.0003_logentry_add_action_flag_choices... OK
Applying contenttypes.0002_remove_content_type_name... OK
Applying auth.0002_alter_permission_name_max_length... OK
Applying auth.0003_alter_user_email_max_length... OK
Applying auth.0004_alter_user_username_opts... OK
Applying auth.0005_alter_user_last_login_null... OK
Applying auth.0006_require_contenttypes_0002... OK
Applying auth.0007_alter_validators_add_error_messages... OK
Applying auth.0008_alter_user_username_max_length... OK
Applying auth.0009_alter_user_last_name_max_length... OK
Applying auth.0010_alter_group_name_max_length... OK
Applying auth.0011_update_proxy_permissions... OK
Applying polls.0001_initial... OK
Applying sessions.0001_initial... OK
- Tibero 계정 생성된 테이블 확인
NAME SUBNAME TYPE
---------------------------------- ------------------------ --------------------
AUTH_GROUP_GROUP_ID_B120CBF9 INDEX
AUTH_GROUP_PERMISSION_84C5C92E INDEX
AUTH_GROU_GROUP_ID__0CD325B0_U INDEX
AUTH_PERMI_CONTENT_TY_2F476E4B INDEX
AUTH_PERM_CONTENT_T_01AB375A_U INDEX
AUTH_USER_USER_ID_G_94350C0C_U INDEX
AUTH_USER_USER_ID_P_14A6B632_U INDEX
AUTH_USER__GROUP_ID_97559544 INDEX
AUTH_USER__PERMISSION_1FBB5F2C INDEX
AUTH_USER__USER_ID_6A12ED8B INDEX
AUTH_USER__USER_ID_A95EAD1B INDEX
DJANGO_ADM_CONTENT_TY_C4BCE8EB INDEX
DJANGO_ADM_USER_ID_C564EBA6 INDEX
DJANGO_CO_APP_LABEL_76BD3D3B_U INDEX
DJANGO_SES_EXPIRE_DAT_A5C62663 INDEX
POLLS_CHOI_QUESTION_I_C5B4B260 INDEX
_TIBERO_CON58500778 INDEX
_TIBERO_CON58800226 INDEX
_TIBERO_CON59100508 INDEX
_TIBERO_CON59400665 INDEX
_TIBERO_CON59500888 INDEX
_TIBERO_CON59700316 INDEX
_TIBERO_CON60100546 INDEX
_TIBERO_CON60500165 INDEX
_TIBERO_CON61200100 INDEX
_TIBERO_CON61600781 INDEX
_TIBERO_CON63100670 INDEX
_TIBERO_CON63900727 INDEX
_TIBERO_CON64200758 INDEX
_TIBERO_CON64700708 INDEX
_TIBERO_LIDX344900 INDEX
_TIBERO_LIDX345100 INDEX
_TIBERO_LIDX346800 INDEX
AUTH_GROUP_PERMISSIONS_SQ SEQUENCE
AUTH_GROUP_SQ SEQUENCE
AUTH_PERMISSION_SQ SEQUENCE
AUTH_USER_GROUPS_SQ SEQUENCE
AUTH_USER_SQ SEQUENCE
AUTH_USER_USER_PERMISSIONS_SQ SEQUENCE
DJANGO_ADMIN_LOG_SQ SEQUENCE
DJANGO_CONTENT_TYPE_SQ SEQUENCE
DJANGO_MIGRATIONS_SQ SEQUENCE
POLLS_CHOICE_SQ SEQUENCE
POLLS_QUESTION_SQ SEQUENCE
AUTH_GROUP TABLE
AUTH_GROUP_PERMISSIONS TABLE
AUTH_PERMISSION TABLE
AUTH_USER TABLE
AUTH_USER_GROUPS TABLE
AUTH_USER_USER_PERMISSIONS TABLE
DJANGO_ADMIN_LOG TABLE
DJANGO_CONTENT_TYPE TABLE
DJANGO_MIGRATIONS TABLE
DJANGO_SESSION TABLE
POLLS_CHOICE TABLE
POLLS_QUESTION TABLE
AUTH_GROUP_PERMISSIONS_TR TRIGGER
AUTH_GROUP_TR TRIGGER
AUTH_PERMISSION_TR TRIGGER
AUTH_USER_GROUPS_TR TRIGGER
AUTH_USER_TR TRIGGER
AUTH_USER_USER_PERMISSIONS_TR TRIGGER
DJANGO_ADMIN_LOG_TR TRIGGER
DJANGO_CONTENT_TYPE_TR TRIGGER
DJANGO_MIGRATIONS_TR TRIGGER
POLLS_CHOICE_TR TRIGGER
POLLS_QUESTION_TR TRIGGER
Django admin(테스트 계정 생성)
- Django admin 에 접속 하려면 user 를 만들어 줘야 합니다.
- admin 유저를 생성 하겠습니다.
- python manage.py createsuperuser 명령을 통해 admin 유저의 계정과 비번을 생성 하겠습니다.
- testuser1 이라는 계정을 만들겠습니다.
Username (leave blank to use ''): testuser1
Email address: testuser1@example.com
Password:
Password (again):
Superuser created successfully.
생성된 user 로 접속 - URL (http://127.0.0.1:8000/admin)
user 미생성 시 접속 불가 | user 생성후 접속 |
Django Admin 설문 작성(Polls) 테스트
- Questions: 설문지 제목
- Choices : 설문지 선택 내용 작성
- Questions 버튼을 눌러서 설문할 주제를 작성합니다.
- Choices 버튼을 눌러서 선택지를 작성합니다
- 테스를 위해 3개은 선택지를 만들었습니다.
설문 작성이 완료 되었고 이제 설문 페이지에 접속 해서 등록된 내용이 잘 나오는지 확인해 보겠습니다.
http://127.0.0.1:8000/polls/ 페이지로 접속을 합니다.
등록한 설문지가 정상적으로 나오고 있습니다.
마지막으로 설문 투표 테스트를 진행해 보시기 바랍니다.
[리눅스]DJango Tibero 연동 테스트
Centos7 기준으로 설명 합니다.
UnixODBC설치
unixODBC 와 연동 테스트 진행 예정으로 unixODBC를 설치 합니다.
unixODBC 다운로드
아래 경로에서 다운로드 받습니다.
http://www.unixodbc.org/download.html
unixODBC install
- 환경변수를 설정 합니다.
#ODBC 환경변수 설정
export UNIXODBC_HOME=/home/django/unixODBC-2.3.9
export LD_LIBRARY_PATH=$UNIXODBC_HOME/lib:$LD_LIBRARY_PATH
export PATH=$UNIXODBC_HOME/bin:$PATH
- 설치를 진행 합니다.
./configure --prefix=$UNIXODBC_HOME --sysconfdir=$UNIXODBC_HOME/etc --with-iodbc-inidir=$UNIXODBC_HOME/etc --disable-gui
&& make
&& make install
- odbc 연동 환경설정을 합니다.
#위치 : HOME/.odbc.ini
vi .odbc.ini
[ODBC Data Sources]
Tibero7 = Tibero7 ODBC driver
[ODBC]
Trace = 1
TraceFile = /home/django/unixODBC/unixODBC-2.3.9/trace/odbc.trace
[Tibero7]
Driver = /home/django/tibero7/client/lib/libtbodbc.so
Description = Tibero ODBC driver for Tibero
server = xxx.xxx.xxx.xxx
#server는(ip,hostname 둘다가능)
port = 17000
#port 는 tibero port
database = tibero
#database 는 DB_NAME 입력
User =tibero
Password = tmax
unixODBC 테스트
+---------------------------------------+
| Connected! |
| |
| sql-statement |
| help [tablename] |
| quit |
| |
+---------------------------------------+
SQL> select * from dual;
+------+
| DUMMY|
+------+
| X |
+------+
SQLRowCount returns 1
1 rows fetched
SQL>
리눅스 파이썬 Dajngo 환경 설정
윈도우에서 테스트 했던 방식과 동일 합니다.
가상 화경을 셋팅 합니다.
mkdir venvs
#경로이동
python -m venv djangoenv
#파이썬 가상 환경진입
. djangoenv/bin/activate
#압축 해제
unzip DjangoAdapter-main.zip
unzip dqaDjangoSample.zip
# tibero django adapter 복사
cp -Rf DjangoAdapter-main /home/django/venvs/djangoenv/lib/python3.7/site-packages/django/db/backends/tibero
- 디렉 토리 구조 입니다.
venvs/
|-- djangoenv
| |-- bin
| |-- include
| |-- lib
| |-- lib64 -> lib
| |-- pip-selfcheck.json
| |-- pyodbc.pyi
| `-- pyvenv.cfg
|-- dqaDjangoSample
| |-- __init__.py
| |-- __pycache__
| |-- settings.py
| |-- urls.py
| `-- wsgi.py
|-- dqaDjangoSample.zip
|-- manage.py
`-- polls
|-- __init__.py
|-- __pycache__
|-- admin.py
|-- apps.py
|-- migrations
|-- models.py
|-- templates
|-- tests.py
|-- urls.py
|-- views.py
`-- views2.py
파이썬 Dajngo Tibero 연동 필요 팩키지 설치
- 설치 리스트를 파일로 관리 해서 설치 하도록 하겠습니다.
- 윈도우에서 설치했던 패키지와 동일 합니다.
python -m pip install --upgrade pip
pip install Django==2.2.24
pip install pyodbc==4.0.31
Django 샘플 소스 ,Django Tibero Adapter 다운로드 및 압축 해제
Django 실행 및 테스트
- python manage.py runserver 0.0.0.0:8000
(djangoenv) [django@centos7:/home/django/venvs]$ python manage.py runserver 0.0.0.0:8000
Watching for file changes with StatReloader
Performing system checks...
System check identified no issues (0 silenced).
April 08, 2022 - 07:53:32
Django version 2.2.24, using settings 'dqaDjangoSample.settings'
Starting development server at http://0.0.0.0:8000/
Quit the server with CONTROL-C.
[08/Apr/2022 07:53:34] "GET /admin/ HTTP/1.1" 200 7031
[08/Apr/2022 07:53:35] "GET /static/admin/css/responsive.css HTTP/1.1" 200 17944
[08/Apr/2022 07:53:35] "GET /static/admin/css/base.css HTTP/1.1" 200 16378
[08/Apr/2022 07:53:35] "GET /static/admin/css/dashboard.css HTTP/1.1" 200 412
[08/Apr/2022 07:53:35] "GET /static/admin/css/fonts.css HTTP/1.1" 200 423
[08/Apr/2022 07:53:35] "GET /static/admin/img/icon-deletelink.svg HTTP/1.1" 200 392
[08/Apr/2022 07:53:35] "GET /static/admin/img/icon-addlink.svg HTTP/1.1" 200 331
[08/Apr/2022 07:53:35] "GET /static/admin/img/icon-changelink.svg HTTP/1.1" 200 380
[08/Apr/2022 07:53:35] "GET /static/admin/fonts/Roboto-Light-webfont.woff HTTP/1.1" 200 85692
[08/Apr/2022 07:53:35] "GET /static/admin/fonts/Roboto-Bold-webfont.woff HTTP/1.1" 200 86184
[08/Apr/2022 07:53:35] "GET /static/admin/fonts/Roboto-Regular-webfont.woff HTTP/1.1" 200 85876
- 윈도우에서 테스트 했던 방법과 동일 하게 테스트를 진행해 볼수 있습니다.
'05.DB > Tibero' 카테고리의 다른 글
Tibero JDBC Clob 조회 예제 (0) | 2022.07.18 |
---|---|
[TDP.net] Tibero TDP.net 테스트 방법 (0) | 2022.04.28 |
[Tibero-Django] Django Tibero 연동 방법 (0) | 2022.04.15 |
[Tibero]Tibero ODBC 연동 (0) | 2022.04.11 |
[Tibero-Utility] UTL_SMTP 팩키지를 이용한 메일전송 프로시져 (0) | 2022.04.09 |