ํ์ฌ ์ผ ๋๋ฌธ์ ์ตํ๊ณ ์๋๋ฐ, ์ด์ฐจํผ ์ ๋ฆฌํด์ผ ํ๋ ๊ฑฐ ์กฐ๊ธ๋ง ๋ ์ ์ฑ ๋ค์ฌ์ ์จ ๋ณธ๋ค. ๊นํ ์ ์ฅ์๋ฅผ ํ๋ ์์ฑํด์, ๋งค ํฌ์คํธ๋ง๋ค ๋ธ๋์น๋ฅผ ํ๋์ฉ ๋ง๋ค ๊ฒ์ด๋ค.
- ๋ชฉ์
- ๊ฐ์ ํ๊ฒฝ ๊ตฌ์ฑํ๊ณ ์ง์ ํ๊ธฐ
- ์ ์ฅ๊ณ ํ๋ก์ ํธ๋ฅผ ์์ฑํ ๋ค์ ์คํํ๊ธฐ
- ๊ด๋ฆฌ์ ๊ณ์ ๋ง๋ค๊ณ , ๊ด๋ฆฌ์ ํ์ด์ง์ ๋ค์ด๊ฐ ๋ณด
- pip ํจํค์ง๋ฅผ ํ ์คํธ ํ์ผ๋ก ๋นผ๊ฑฐ๋ ํ ์คํธ ํ์ผ์์ pip ํจํค์ง ์ค์นํ๊ธฐ
- ํ๊ฒฝ
- ์ธํ๋ผ: AWS EC2 ์ธ์คํด์ค. ํธ์๋ฅผ ์ํด Elastic IP ํ๋ ๋ถ์ฌ ๋์๋ค.
- OS: Ubuntu 22.04.3 LTS (Jammy Jellyfish)
- ํธ์ง๊ธฐ: VS Code
- Python: 3.11.0rc1
- 24๋ 1์ ๊ธฐ์ค์ผ๋ก, ์ OS ๋ฒ์ ์์ `sudo apt update` ํ `sudp apt install python3.11` ์คํํ๋ฉด ์ด ๋ฒ์ ์ผ๋ก ์ค์น๋๋ค.
- ์ด์ ๋ฒ์ ๋ ๋์์ ํฐ ์ฐจ์ด๋ ์์ ๊ฒ์ด๋ค. 3.11 ์๋์ ๋ง์ด๋ ๋ฒ์ ์ฐจ์ด๋ ๋ฌด์ํด๋ ๊ด์ฐฎ๋ค.
- Github ๋งํฌ
- ๊ฐ์ ํ๊ฒฝ ๊ตฌ์ฑ
- ๊ฐ์ ํ๊ฒฝ ์ค์น
์ง๊ธ์ ๋ง ์ฐ๊ณ ๋ฒ๋ ค๋ ๋๋ EC2 ์ธ์คํด์ค ์์์ ๋๋ฆฌ์ง๋ง, ์ค์ ๋ก๋ ๊ทธ๋ฆฌ ๋ น๋ก์น๊ฐ ์๋ค. ํนํ ์ฌ๋ฌ ํ๋ก์ ํธ๊ฐ ํ ๊ฐ๋ฐ ์๋ฒ ์์ ์ฌ๋ผ๊ฐ ์์ผ๋ฉด์ ํ๋ก์ ํธ ๋ณ๋ก ์ฐ๋ ํจํค์ง๊ฐ ๋ค๋ฅผ ์ ์์ผ๋ฉฐ, ํนํ ์๋ก ๋ค๋ฅธ ๋ฒ์ ์ ๊ฐ์ ํจํค์ง๋ฅผ ์ฌ์ฉํ๋ฉด ํผ๊ณคํด์ง๋ค.
- ์ฐ์ ๋ฃจํธ ๋๋ ํ ๋ฆฌ ๋ฐ์ `venv`๋ ์ด๋ฆ์ ๋๋ ํ ๋ฆฌ๋ฅผ ํ๋ ๋ง๋ค์ด ์ค๋ค. .git๊ณผ README.md ๊ฐ์ ๊ฑด ๊นํ ์ ์ฅ์ ์์ฑ ์ ๋ธ๋ ค์จ ๋
์๋ค์ด๋ ๋ฌด์ํด๋ ๊ด์ฐฎ๋ค.
- ์ด ์์์ ์๋ ๋ช
๋ น์ ์คํํ์ฌ ๊ฐ์ ํ๊ฒฝ ํ ๊ฐ๋ฅผ ๋ง๋ ๋ค. ๋งจ ์์ python3.11 ๋ถ๋ถ์ ํ๊ฒฝ์ ๋ฐ๋ผ ๋ค๋ฅผ ์ ์๋ค. ๋ณธ์ธ์ ์ค์ ์
๋ฌด ํ๊ฒฝ์์ ์ฐ๋ ๋ฒ์ ์ด 3.11์ด๋ผ, Ubuntu 22.04 ์ค์น ์ ๊ธฐ๋ณธ์ผ๋ก ๋์ค๋ 3.10 ๋ฒ์ ์ ๋ฌด์ํ๊ณ ์๋ก ํ๋ ์ค์นํด์ ์ฐ๊ณ ์๋ค. `-m venv` ๋ถ๋ถ์ ๊ณ ์ ์ด๊ณ , ๋งจ ๋ง์ง๋ง์ ์ํ๋ ๊ฐ์ ํ๊ฒฝ ์ด๋ฆ์ ์ง์ ํด ์ฃผ๋ฉด ๋๋ค.
# ํ์ด์ฌ ๊ฐ์ ํ๊ฒฝ ์ฉ ํจํค์ง ์ค์น $ sudo apt install python3.11-venv # python3.11์ด๋ ์ด๋ฆ์ ๊ฐ์ ํ๊ฒฝ ์์ฑ $ python3.11 -m venv python3.11โ
- ๊ทธ๋ผ ์๋์ฒ๋ผ ํด๋ ํ๋๊ฐ ์์๊ฒ ๋ง๋ค์ด์ง๋ค.
- ์ฐ์ ๋ฃจํธ ๋๋ ํ ๋ฆฌ ๋ฐ์ `venv`๋ ์ด๋ฆ์ ๋๋ ํ ๋ฆฌ๋ฅผ ํ๋ ๋ง๋ค์ด ์ค๋ค. .git๊ณผ README.md ๊ฐ์ ๊ฑด ๊นํ ์ ์ฅ์ ์์ฑ ์ ๋ธ๋ ค์จ ๋
์๋ค์ด๋ ๋ฌด์ํด๋ ๊ด์ฐฎ๋ค.
- ๊ฐ์ ํ๊ฒฝ ์ง์
- ์์์ ์์ฑํ ๊ฐ์ ํ๊ฒฝ ์์ `bin` ๋๋ ํ ๋ฆฌ๊ฐ ์๋ค. ๋ณธ ๊ธ๊ณผ ๋ง์ฐฌ๊ฐ์ง๋ก Ubuntu ํ๊ฒฝ์ด๋ผ๋ฉด, source ๋ช
๋ น์ด๋ก `activate` ํ์ผ์ ์ง์ ํด ์ฃผ๋ฉด ๋๋ค.
# ๊ฐ์ ํ๊ฒฝ ์ง์ $ source ~/dev/django-study/venv/python3.11/bin/activate # ๊ฐ์ ํ๊ฒฝ์์ ๋๊ฐ๊ธฐ $ deactivateโ
์ง์ ํ, CLI์์ ๋งจ ์ผ์ชฝ์ ๊ฐ์ ํ๊ฒฝ ์ด๋ฆ์ด ๊ฐ์ด ํ์๋๋ค! ๊ทธ ๋ค์ `which` ๋ช ๋ น์ ์๋์ ๊ฐ์ด ์ฌ์ฉํด ๋ณด๋ฉด, ์์คํ ์์ฒด์ ํ์ด์ฌ์ด ์๋ ๊ฐ์ ํ๊ฒฝ ๋ด๋ถ์ ๊ฒ์ ์ฌ์ฉํ๋ค๋ ๊ฒ๋ ํจ๊ป ํ์ธ ๊ฐ๋ฅํ๋ค. ๋ง์ฝ ์ฌ๊ธฐ์ `/usr/bin/python3.11` ์ด๋ฐ ๊ฒ ๋์จ๋ค๋ฉด.. ๋ค์ ํด ๋ณด์.
- ํ - ํธํ๊ฒ ๊ฐ์ ํ๊ฒฝ ์ง์
ํ๊ธฐ
- ๋งค๋ฒ source ์ด์ฉ๊ณ ์น๋ ๊ฒ๋ ๊ณ ์ญ์ด๋ผ, `~/.bashrc` ํ์ผ์ ์ด์ด alias๋ฅผ ์ง์ ํด ์ฃผ๋ฉด ๋ก๊ทธ์ธ์ ์์ฃผ ํธํ๊ฒ ํ ์ ์๋ค. venv ๋ถ๋ถ์ ์ํ๋ ๋ช
๋ น์ด๋ฅผ, source ๋ท๋ถ๋ถ์ ๊ฒฝ๋ก๋ ํ๊ฒฝ์ ๋ง๊ฒ ์ง์ ํด ์ฃผ๋ฉด ๋๋ค. ์ฌ์ง์ด ์๋ ven ์น๊ณ ํญ ๋๋ฅด๋ ๊ฒ๋ ๊ทธ๋๋ก ๊ฐ๋ฅํ๋ค. ์ ์ฅ ํ๊ณ ์ ์ฌ์ฉ์ ๋ก๊ทธ์์ ํ๋ค๊ฐ ๋ค์ ๋ค์ด์์ผ ์ ์ฉ๋๋ค.
$ alias venv='source /home/ubuntu/dev/django-study/venv/python3.11/bin/activate'โ
- ๋งค๋ฒ source ์ด์ฉ๊ณ ์น๋ ๊ฒ๋ ๊ณ ์ญ์ด๋ผ, `~/.bashrc` ํ์ผ์ ์ด์ด alias๋ฅผ ์ง์ ํด ์ฃผ๋ฉด ๋ก๊ทธ์ธ์ ์์ฃผ ํธํ๊ฒ ํ ์ ์๋ค. venv ๋ถ๋ถ์ ์ํ๋ ๋ช
๋ น์ด๋ฅผ, source ๋ท๋ถ๋ถ์ ๊ฒฝ๋ก๋ ํ๊ฒฝ์ ๋ง๊ฒ ์ง์ ํด ์ฃผ๋ฉด ๋๋ค. ์ฌ์ง์ด ์๋ ven ์น๊ณ ํญ ๋๋ฅด๋ ๊ฒ๋ ๊ทธ๋๋ก ๊ฐ๋ฅํ๋ค. ์ ์ฅ ํ๊ณ ์ ์ฌ์ฉ์ ๋ก๊ทธ์์ ํ๋ค๊ฐ ๋ค์ ๋ค์ด์์ผ ์ ์ฉ๋๋ค.
- ์์์ ์์ฑํ ๊ฐ์ ํ๊ฒฝ ์์ `bin` ๋๋ ํ ๋ฆฌ๊ฐ ์๋ค. ๋ณธ ๊ธ๊ณผ ๋ง์ฐฌ๊ฐ์ง๋ก Ubuntu ํ๊ฒฝ์ด๋ผ๋ฉด, source ๋ช
๋ น์ด๋ก `activate` ํ์ผ์ ์ง์ ํด ์ฃผ๋ฉด ๋๋ค.
- git์์ ๊ฐ์ ํ๊ฒฝ ๋๋ ํ ๋ฆฌ๋ฅผ ๋ฌด์ํ๋๋ก `.gitignore`์ ์ถ๊ฐ
๊ฐ์ ํ๊ฒฝ์ ๊ตณ์ด ๊นํ์ ์ฌ๋ฆด ํ์๊ฐ ์์ผ๋, `.gitignore` ํ์ผ์ ์ ์ฅ์์ ๋ฃจํธ ๋๋ ํ ๋ฆฌ์ ํ๋ ๋ง๋ค๊ณ ์๋์ ๊ฐ์ด ์ ๋ ฅํ๋ค. venv ์ธ์ ๋ด์ฉ๋ค์ ์ผ๋จ ์ ์ด ๋์. ๋์ค์ ํ์ํ๋ค.
- ๊ฐ์ ํ๊ฒฝ ์ค์น
- ์ ์ฅ๊ณ ํ๋ก์ ํธ ์์ฑํ๊ณ ์คํ
- ์ฅ๊ณ ํ๋ก์ ํธ ๋ฐ ์ฑ ๊ด๋ฆฌ๋ `django-admin`์ด๋ ๋ช
๋ น์ด๋ก ํด๊ฒฐํ๋ค. ์ด ๋ช
๋ น์ด๋ pip ํจํค์ง์ธ Django ๋ด์ ๋ค์ด ์๋ค.
# ๋ฒ์ ์ง์ ํ์ฌ ์ฅ๊ณ ์ค์น $ pip3.11 install Django==5.0 # config๋ ์ด๋ฆ์ ํ๋ก์ ํธ๋ฅผ ์์ฑํ๋ค. ์ ์ด๋ ๊ฒ ํ๋์ง๋ ํ์ . $ django-admin startproject configโ
- ๊ธฐ์ ๋ง์์ผ๋ก ๋๋ ํ ๋ฆฌ๋ฅผ ๊น ๋ณด๋ฉด ์ด๋ ๊ฒ ์๊ฒผ๋ค.
- manage.py
- ์ค์ ์ฅ๊ณ ๊ตฌ๋์ ์ฐ์ด๋ ํ์ผ์ด๋ค. ์ง์ ๊ฑด๋๋ฆด ๊ฒ์ ๋ง์ง ์๋ค.
๊ฐ์ด๋ฐ ์์ฏค์ ์๋ 'config.settings'๊ฐ ์ค์ํ๋ฐ, ์ฌ๊ธฐ์ config๋ ์์ ๋๋ ํ ๋ฆฌ ํธ๋ฆฌ์์ ๋ณด์ด๋ config ์๋์ config์ด๋ค. startproject ๋ช ๋ น์ด๋ก ์์์ ์ด๋ฆ์ ๊ฐ์ง ํ๋ก์ ํธ๋ฅผ ์์ฑํ๋ฉด, ๊ทธ ์ด๋ฆ์ด ์ฌ๊ธฐ์ config ๋์ ๋ค์ด๊ฐ ๊ฒ์ด๋ค. ๊ทธ๋ฐ๋ฐ ์ด์ฐจํผ ๊ธฐ๋ณธ ์ค์ ๋ค์ด ๋ค์ด๊ฐ๋ ์์น์ธ๋ฐ ๊ตณ์ด ๋ค๋ฅธ ์ด๋ฆ์ผ๋ก ๋ ๋์ด ๋ด์ผ ํท๊ฐ๋ฆฌ๊ธฐ๋ง ํ๋๋ผ.
"๊ทธ๋ฌ๋ฉด ๊ทธ๋ฅ ํ๋ก์ ํธ๋ ๋ ์ํ๋ ๋๋ก ํ๊ณ ๊ทธ ์์ ์ ๋๋ ํ ๋ฆฌ ์ด๋ฆ์ ๋ฐ๊พธ๋ฉด ๋๋ ๊ฑฐ ์๋?" ๊ทผ๋ฐ ์๋ ์ฝ๋์ ์๋ 'config.settings'๋ถ๋ถ์ ๋ค์ด๊ฐ ๋ ์๋ถํฐ, settings.py, wsgi.py, asgi.py๊น์ง 'config.settings', 'config.urls', ๋ธ๋ผ๋ธ๋ผ.. ๊ณ ์น ๊ฒ๋ค์ด ์กฐ๊ธ ์์๋ค. ํ๋ ค๋ฉด ํ ์ ์๊ฒ ์ง๋ง, ๊ทธ๋ฅ ํ๋ก์ ํธ ๋ฃจํธ ๋๋ ํ ๋ฆฌ ์ด๋ฆ ํ๋ ๋ฑ ๊ณ ์น๋ ๊ฒ ํธํด์ ์์์ ํ ๋๋ก ํ๋ก์ ํธ ์ด๋ฆ์ config๋ก ํด ๋ฒ๋ ธ๋ค.
#!/usr/bin/env python """Django's command-line utility for administrative tasks.""" import os import sys def main(): """Run administrative tasks.""" os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'config.settings') try: from django.core.management import execute_from_command_line except ImportError as exc: raise ImportError( "Couldn't import Django. Are you sure it's installed and " "available on your PYTHONPATH environment variable? Did you " "forget to activate a virtual environment?" ) from exc execute_from_command_line(sys.argv) if __name__ == '__main__': main()โ
๊ทธ๋์ ๋ฌด์์ ํด ๋ณด๊ณ ์ถ์์ง ์๊ฐ์ ํด ๋ณด์๋๋ฐ, ์ธํ๋ผ ๋ถ์ ์ธ๊ฐ์ผ๋ก์ ITSM ํ์ด์ง๋ฅผ ๋ง๋ค์ด ๋ณด๊ณ ์ถ์ด ๋๋ ํ ๋ฆฌ ์ด๋ฆ์ itsm์ผ๋ก ๊ณ ์ณค๋ค. to-do list๋ ๋ง์ด ํด ๋ณด๊ธฐ๋ ํ๊ณ ๊ทธ๊ฑฐ ํด ๋ณธ ์ฌ๋์ด ํ๊ตญ์๋ง ํด๋ ๋ง ๋ช ๋จ์๋ก ์์ ๊ฒ์ด๋ค.
- ์ค์ ์ฅ๊ณ ๊ตฌ๋์ ์ฐ์ด๋ ํ์ผ์ด๋ค. ์ง์ ๊ฑด๋๋ฆด ๊ฒ์ ๋ง์ง ์๋ค.
- ์ด์ ์ค๋น๊ฐ ๋์๋ค. ์๋ ๋ช
๋ น์ด๋ก ์ฅ๊ณ ๋ฅผ ์คํํด ๋ณด์.
$ python3.11 ~/dev/django-study/itsm/manage.py runserver 0.0.0.0:8000โ 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, sessions. Run 'python manage.py migrate' to apply them. January 03, 2024 - 08:54:09 Django version 5.0, using settings 'config.settings' Starting development server at http://0.0.0.0:8000/ Quit the server with CONTROL-C.
You have๋ก ์์๋๋ ๋ถ๋ถ์ด ๊ฑธ๋ฆด ์ ์๋๋ฐ, ์ฅ๊ณ ์ ๋ํดํธ๋ก ๋ค์ด์๋ Model ์ ๋ณด๊ฐ ๋๋น๋ก ์ ๊ฐ ์๋ ๊ฒ์ด๋ค. ์ง๊ธ ๋น์ฅ 0.0.0.0:8000์ผ๋ก ํ์ธํด ๋ณด์๋ ๋์ง๋ง ์ผ๋จ ์ปจํธ๋กค C ๋๋ฌ์ ๋๊ฐ ๋ค์ ์๋ ๋ช ๋ น์ ๋๋ฆฐ๋ค. ๋์ถฉ ์ค๋ช ํ์๋ฉด, makemigrations๋ ๋์ค์ ์ค๋ช ํ Model์ด๋ผ๊ณ ํ๋ DB ๋น์ทํ ๊ฒ์ ๋ณ๊ฒฝ ์ฌํญ์ ๊ฐ์งํ๋ ์ญํ ์, migrate๋ ๊ทธ ๋ณ๊ฒฝ ๋ด์ญ์ ์ค์ DB์ ๋ฐ์ํ๋ ๊ฒ์ด๋ผ ๋ณด๋ฉด ๋๋ค.
์ดํ์ ๋ค์ ์ฅ๊ณ ๋ฅผ ์คํํด ๋ณด๋ฉด ์ฒ์ ๋์จ migrations ๊ด๋ จ ๊ฒฝ๊ณ ๊ฐ ์ ๋ฐ ๊ฒ์ด๋ค.
- manage.py
- ์ฅ๊ณ ํ๋ก์ ํธ ๋ฐ ์ฑ ๊ด๋ฆฌ๋ `django-admin`์ด๋ ๋ช
๋ น์ด๋ก ํด๊ฒฐํ๋ค. ์ด ๋ช
๋ น์ด๋ pip ํจํค์ง์ธ Django ๋ด์ ๋ค์ด ์๋ค.
- ๊ด๋ฆฌ์ ๊ณ์ ์ ๋ง๋ค์ด ๊ด๋ฆฌ์ ํ์ด์ง์ ๋ค์ด๊ฐ ๋ณด๊ธฐ
- ์ฅ๊ณ ์ ๊ฐ ๊ธฐ๋ฅ์ด๋ค. DB๋ฅผ ์ง์ ์กฐ์ํ๋ ์ง์ ์ด ๊ด๋ฆฌ์ ํ์ด์ง์์๋ ํ ์ ์๋ค .๊ทธ๋ฌ๊ธฐ ์ํด์๋ ์ฐ์ ์ํผ ์ ์ ํ๋๋ฅผ ๋ง๋ค์ด์ผ ํ๋ค. ์๋์ ๋ช
๋ น์ ์คํํ๊ณ , ๊ณ์ ์ ํ๋ ๋ง๋ ๋ค.
- ๊ทธ๋ฆฌ๊ณ ์ฅ๊ณ ๋ฅผ ์คํํ ๋ค์, 0.0.0.0:8000/admin์ ๋ค์ด๊ฐ ๋ณด์.
- ์ด๋ฐ ์ฅ๊ณ ๊ด๋ฆฌ์ ํ์ด์ง ๋ฉ์ธ ํ๋ฉด์ด ๋ฐ ๊ฒ์ด๋ค. ์ด ๋ถ๋ถ๋ถํด ๋ค์ ๊ธ์ ์.
- ์ฅ๊ณ ์ ๊ฐ ๊ธฐ๋ฅ์ด๋ค. DB๋ฅผ ์ง์ ์กฐ์ํ๋ ์ง์ ์ด ๊ด๋ฆฌ์ ํ์ด์ง์์๋ ํ ์ ์๋ค .๊ทธ๋ฌ๊ธฐ ์ํด์๋ ์ฐ์ ์ํผ ์ ์ ํ๋๋ฅผ ๋ง๋ค์ด์ผ ํ๋ค. ์๋์ ๋ช
๋ น์ ์คํํ๊ณ , ๊ณ์ ์ ํ๋ ๋ง๋ ๋ค.
- pip ํจํค์ง ํธํ๊ฒ ๊ด๋ฆฌํ๊ธฐ
- ์ง๊ธ๊น์ง pip์ ์ค์นํ ํจํค์ง๊ฐ Django ํ๋๋ฟ์ด๋ค. ์ฌ์ค ์์กด์ฑ ์๋ ๋ค๋ฅธ ํจํค์ง ๋๋ ๋ ์๊ธด ํ๋ค.
- `pip3.11 freeze > requirements.txt`๋ก ๋นผ ๋๋ฉด, ๊ทธ ํ์ผ์ ๊ทธ๋๋ก ์ฌ์ฉํด์ ๋ค๋ฅธ ์๋ฒ ๋ฑ์ ํ๊ฒฝ์์ ๋์ผํ๊ฒ ํจํค์ง๋ฅผ ์ค์นํ ์ ์๋ค.
$ pip3.11 install -r requirements.txtโ
- ์ง๊ธ๊น์ง pip์ ์ค์นํ ํจํค์ง๊ฐ Django ํ๋๋ฟ์ด๋ค. ์ฌ์ค ์์กด์ฑ ์๋ ๋ค๋ฅธ ํจํค์ง ๋๋ ๋ ์๊ธด ํ๋ค.