Windows ํ๊ฒฝ Django Oracle ์ฐ๋
Django๋ฅผ ์ด์ฉํด์ ๊ฐ๋ฐํ ๋... ์๊ทผํ ํ๋ฒ๋ ํด๋ณด์ง ์์ผ๋ฉด ์๊ฐ์ ๊ฝค ์์ํ๋ ๋ถ๋ถ์ด Oracle ์ฐ๋์ด๋ค. ์ค์ ๋ฐฐํฌํ๊ฒฝ์ด๋ ํ ์คํธํ๊ฒฝ์ด ๋ฆฌ๋ ์ค๋ก๋์ด ์์ด Django DB ์ฐ๋๊ณผ ๊ด๋ จ๋ ๊ธ์ ๋๋ถ๋ถ์ด Linux๊ธฐ๋ฐ์ด๋ค. ๊ทธ๋ฐ๋ฐ ๋ง์ ๊ฐ๋ฐํ ๋ ์ฌ์ฉํ๋ PC๋ Django๋ฅผ ๋ฐฐ์ฐ๋ ์ ์ฅ์์๋ Windows ํ๊ฒฝ์์ Django๋ฅผ ๋ค๋ฃจ๋ ๊ฒฝ์ฐ๊ฐ ๋ง๋ค. ์ด๋ฒ ๊ธ์์๋ Windows ํ๊ฒฝ์์ Django์ Oracle์ ์ฐ๋ํ๋ ๋ฐฉ๋ฒ์ ๋ํด์ ๋ฐฐ์ธ ๊ฒ์ด๋ค.
๊ฐ๋ฐ ํ๊ฒฝ
Django Oracle ์ฐ๋ ๊ด๋ จํด์ ๋ฒ์ ์ ๋ํ ์์กด์ฑ์ด ์กด์ฌํ์ฌ ๋งค์ฐ ์ค์ํ๋ค. ํด๋น ์ค์ต์์๋ ์๋ ๋ฒ์ ์ผ๋ก ์ฐ๋ ์ฑ๊ณต๋์๋ค.
- Python 3.9.6
- Oracle12c
- Oracle Client 19.12.0.0.0 Basic Light Package
- Django 3.2.7
- cx-Oracle 8.2.1
Oracle Settings
> pip install cx_Oracle
django์์ Oracle ์ฐ๋ํ๊ธฐ ์ํด ํ์ํ ๋ชจ๋์ด๋ค. "cx_Oracle" ๋ชจ๋์ ๋ฐ์์ค๋ค.
settings.py
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.oracle',
'NAME': 'SID',
'USER': '์ ์ ID',
'PASSWORD': '๋น๋ฐ๋ฒํธ',
'HOST': 'ํธ์คํธ',
'PORT': '1521',
}
}
django settings.py์ DATABASE ์ค์ ์ Oracle DB ์ ๋ณด์ ๋ง๊ฒ ์์ ํด์ค๋ค.
DPI-1047 Cannot locate a 64-bit Oracle Client library ์ค๋ฅ
์ด ์ํ๋ก django server๋ฅผ ์คํ์์ผ์ฃผ๋ฉด ์๋์ ๊ฐ์ ์ค๋ฅ๊ฐ ๋ฐ์ํ๋ค.
django.db.utils.DatabaseError: DPI-1047: Cannot locate a 64-bit Oracle Client library: "The specified module could not be found". See https://cx-oracle.readthedocs.io/en/latest/user_guide/installation.html for help
ํด๋น ์ค๋ฅ๋ Oracle Client์ ๊ฒฝ๋ก๋ฅผ ์ฐพ์ง ๋ชปํด์ ๋ฐ์ํ๋ ์ค๋ฅ ์ ๋๋ค.
์๋ ๋งํฌ๋ฅผ ํตํด ์ค์น ๊ฐ๋ฅํฉ๋๋ค.
https://www.oracle.com/kr/database/technologies/instant-client/winx64-64-downloads.html
ํด๋น ์ค์ต์์๋ Oracle Client 19.12.0.0.0 Basic Light Package๋ฅผ ์ด์ฉํ์ต๋๋ค. ํจํค์ง๋ฅผ ์ค์นํ๊ณ ์์ถ์ ํ์ด์ ์ ๋นํ ์์น์ ์ด๋์์ผ ์ค๋๋ค.
Django์์ DB Client๋ฅผ ์ธ์์ํฌ ์ ์๋ ๋ฐฉ๋ฒ์ 2๊ฐ์ง๊ฐ ์์ต๋๋ค.
- ํ๊ฒฝ๋ณ์์ DB Client์ ์์น๋ฅผ ๋ฑ๋กํ๋ค.
- ์ฝ๋์์์ ์ง์ DB Client์ ์์น๋ฅผ ์ค์ ํ๋ค.
Django๋ฅผ ์คํํ์ ๋ ์์คํ ์์ ํด๋น ๊ฒฝ๋ก๋ฅผ ์๋์ผ๋ก ์ธ์ํ ์ ์๊ฒ๋ Windows ํ๊ฒฝ์์๋ Path์ ๋ฑ๋กํด์ฃผ๋ฉด ๋ฉ๋๋ค.
๋ด ์ปดํจํฐ ์ฐํด๋ฆญ > ๊ณ ๊ธ ์์คํ ์ค์ > ํ๊ฒฝ ๋ณ์ > ์์คํ ํ๊ฒฝ ๋ณ์ ํธ์ง
ํ๊ฒฝ๋ณ์๋ฅผ ์ค์ ํด์ฃผ๊ณ ์ฌ์ฉํ๋ ํฐ๋ฏธ๋์ด๋ IDE์์ ๊ทธ๋๋ ๋๊ฐ์ด
django.db.utils.DatabaseError: DPI-1047: Cannot locate a 64-bit Oracle Client library: "The specified module could not be found". See https://cx-oracle.readthedocs.io/en/latest/user_guide/installation.html for help
์ค๋ฅ๊ฐ ๋ฐ์ํ๋ ๊ฒฝ์ฐ๊ฐ ์์ต๋๋ค.
์ฌ์ฉํ๋ ํฐ๋ฏธ๋์ด๋ IDE๋ฅผ ์ฌ์์ํด์ฃผ๊ณ ์๋น๋ฅผ ์คํํ๋ฉด ์ ์์ ์ผ๋ก ์คํ๋ ๊ฒ ์ ๋๋ค.
์ฃผ์์ฌํญ
Migration ์ ์ฉ
ํด๋ผ์ด์ธํธ๊น์ง ์ค์น๊ฐ ๋์ด ์์ด ์ฐ๊ฒฐ์ด ๋๋ฉด runserver ๋ช ๋ น์ ํตํ django server๋ฅผ ์คํํ์ ๋ ์๋ฌด๋ฐ ์ค๋ฅ ์์ด ์ ์ฑ๊ณตํ๋ค. ํ์ง๋ง... ์ ์ด๋ DB migrating ์์ ๊น์งํ๊ณ ๋ฐ์ดํฐ๊ฐ ๋์ค๋์ง ๊น์ง๋ ํ์ธํด์ค์ผํ๋ค. ์ฐ๊ฒฐ์ ๋์ง๋ง ์ค์ ๋ก ๋ฐ์ดํฐ๋ฅผ ๊ฐ๊ณ ์ค์ง ๋ชปํ๋ ๋ฒ์ ์์กด์ฑ ๋ฌธ์ ๊ฐ ์กด์ฌํ๋ค.
๋ฒ์ ์์กด์ฑ
Django์ Oracle์ ์ฐ๋ํ ๋ ๋ฒ์ ์ ๋ํ ์์กด์ฑ์ด ์กด์ฌํ๋ค.
https://docs.djangoproject.com/en/2.0/releases/2.0/#dropped-support-for-oracle-11-2
cx_Oracle 8.2 ๋ชจ๋๋ก๋ Oracle 11.2๋ ์ง์ํ์ง๋ง... Django 2.0๋ถํฐ๋ Oracle 12.1 ์ด์์ ์ฌ์ฉํ๋ค๊ณ ๊ณต์๋์ด ์๋ค. ์ฆ, Oracle11g๋ฅผ ์ฌ์ฉํ๊ธฐ ์ํด Django 1์ ๋ ๋ฒ์ ์ ์ฌ์ฉํด์ผํ๋ค.
ํ์ง๋ง... Django 2.0์์ Oracle11g๋ฅผ ์ฌ์ฉํ ์ ์๋ ํธ๋ฒ์ ์กด์ฌํ๋ค.
์๋ ๋งํฌ๋ฅผ ํตํด ํ์ธ ๊ฐ๋ฅํ๋ค.
[Python/Python ๊ฐ๋ฐ] - Django Oracle11g ์ฐ๋ํ๋ ๋ฐฉ๋ฒ
๋๊ธ