<aside> ๐ก Elasticsearch ๋ฌธ์๋ฅผ ์๋ก ์์ฑํ๋ฉด์ ์๋ก ์์ฑํ document ํด๋์ค๋ฅผ ์ธ์งํ์ง ๋ชปํ๊ณ ๋น๋๊ฐ ๋์ง ์๋ ๋ฌธ์ ๊ฐ ๋ฐ์ํ์๋ค. ๋ฌธ์ ์ ์์ธ์ ๋ถ์ํด๋ณด์
</aside>
Django์ Elasticsearch๋ django_elasticsearch_dsl
์ด๋ผ๋ ํจํค์ง๋ฅผ ํตํด ๋งค์ฐ ๊ฐํธํ๊ฒ ์ธ๋ฑ์ค๋ฅผ ๊ด๋ฆฌํ ์ ์๋ค. Django์ ORM์ ์ฌ์ฉํ๋ฏ์ด ์ธ๋ฑ์ค์ ์ด๋ฆ๊ณผ ๋ฌธ์์ ํ๋๋ฅผ ์ค์ ํ์ฌ Elasticsearch ํด๋ฌ์คํฐ์ DB์ ์๋ ๋ฐ์ดํฐ๋ฅผ ์ฝ๊ฒ ์ ๋ฌ ํ ์ ์๋ค.
๋ชจ์๋
๊ฐ๋จํ๊ฒ ๋ค์๊ณผ ๊ฐ์ ๊ทธ๋ฆผ์ผ๋ก ์ดํดํ ์ ์๋ค.
์ ์์ ์ธ ์ํฉ
๋ฌธ์ ์ํฉ
Django์์ ์๋์ ๊ฐ์ด ์ ์ํ ๋ฌธ์์ ์ค์ ์ ๋ณด๋ฅผ ์ฝ์ง ์๋ ๋ฌธ์ ๊ฐ ๋ฐ์ํจ
โญ์ฐธ๊ณ ๋งํฌโญ โ ์๋ฒฝํ๊ฒ ์ดํดํ์ง๋ ๋ชปํ์ง๋ง ๋์ค์ ๊ผญ ๋ค์ ์ฝ์ด๋ณด์!
๋ฌธ์ ์ ์์ธ์ผ๋ก ๋ค์ด๊ฐ๊ธฐ์ ์ ๋จผ์ django ์๋ฒ๋ฅผ ๋๋ฒ๊น
๋ชจ๋(manage.py runserver
)๋ก ์คํํ์์ ๋, django์์ ์ด๋ค ๋์์ด ์ผ์ด๋๋์ง ์์๋ณด์
apps.populate(settings.INSTALLED_APPS)
django.setup()
์ด ์คํ๋๋ฉด ๋ด๋ถ์์ ์คํ๋๋ ํ์๋ก ์ธํ
์ ๋ฑ๋กํ ์ฑ๋ค์ ๋ก๋ฉํ๋ค.
GIL๊ณผ๋ ๋ณ๊ฐ๋ก ํ์ด์ฌ ๋ด์์ thread๊ฐ ๊ณต์ ํ๋ ๋ฉ๋ชจ๋ฆฌ๋ก ์ธํด์ ํ๋ก๊ทธ๋จ์ด ๊ผฌ์ผ ์ ์๋๋ฐ ์ด๋ฅผ ์ํด์ RLock์ ํตํด thread safe๋ฅผ ๋ณด์ฅํ ์ ์๋ค.
routing ์ค์ ๊ณผ ๊ด๋ จ๋ view๋ก๋๋ ์ด ๋จ๊ณ์์ ์คํ์ด ๋๋ค.
<aside> ๐ก ManagementUtil์ ์คํํ์ฌ django์ ์๋ฒ๊ฐ exception์ ์ ๋์ฒํ๋๋ก ํ๋ ๋จ๊ณ์ด๋ค. ์ฐ๋ฆฌ๊ฐ ํํ ์๋ชป๋ ์ฝ๋๋ฅผ ์ ๋ ฅํ์ฌ๋ django๋ ๋๊ธฐ ์ค์ ์๋ค๊ฐ ํ์ผ ์ฌ๋ฐ๋ฅด๊ฒ ๋ณ๊ฒฝ๋ ๊ฒฝ์ฐ ์ ๋๋ก ์๋ํ๋ ๊ฒฝํ์ ํ์์ ๊ฒ์ด๋ค.
</aside>
django ๋ด๋ถ์๋ ์๋ฒ๋ฅผ ์ฌ์์ํ๋ autoreloader์์ํด ์์๋ ํ๋ก์ธ์ค์ ๋ฌธ์ ๊ฐ ๋ฐ์ํ์์ ๊ฒฝ์ฐ์ ์ฒ๋ฆฌํ๋ ํธ๋ค๋ฌ๊ฐ ๊ฐ์ถฐ์ ธ์๋ค.
โ ๋ฐ๋๋ก --noreload
ํ๋๊ทธ๋ฅผ ํตํด autoreloader๋ฅผ ์คํํ๋ค๋ฉด ๊ด๋ จ ์ฒ๋ฆฌ๋ฅผ ํ ์ ์๋ค.
self.autocomplete()
: bash ๋ช
๋ น์ด์ ์๋์์ฑ๊ธฐ๋ฅ?
self.fetch_command(subcommand).run_from_argv(self.argv)
๋จผ์ , fetch_command
์ ๊ฒฝ์ฐ๋ ์๋ธ ์ปค๋งจ๋(runserver, command dic)๋ฅผ ์ธ์๋ก ๋ฐ์ ๊ฒ์ฆ ํ์ ์ฝ๋ฐฑ ์ฑ๊ณผ command dict๋ฅผ ๋ฐํํ๋ค.
๋ค์์ผ๋ก run_from_argv
๋ argv์ธ์๊ฐ์ ๋ฐ๋ ํจ์์ด๋ค. argv์ ๋ค์ด์๋ ์ธ์๊ฐ์ file location๊ณผ command์ ๋ํ ์ ๋ณด์ด๋ค.
django์ runserver ํด๋์ค๋ฅผ ์คํ
base check/migration check
handle()
: IP ์ฃผ์์ ๊ด๋ จ๋ ์ฒดํฌ๋ฅผ ์งํ, ํฌํธ ํ์ธ
run()
: user_reload ์ต์
์ ๋ฐ๋ผ์ ์ฌ์์ ์ต์
์ ์คํํ๊ฒ ๋๋ค.
INOTIFY๋ฅผ ์ด์ฉํด์ ํ์ผ์ ๋ณํ๋ฅผ ํธ๋ํนํ๊ณ , ์ด๋ฅผ ํตํด์ ์ฌ์์์ ํ๋ ๊ธฐ๋ฅ์ ๊ตฌํํ๋ค. โ ๋๋ฒ๊น ๋ชจ๋์์ ๋ณด๊ฒ๋๋ ํํ