๐ ์ด ํฌ์คํ ์์๋ query๋ฅผ loggingํ๋ ๋ฐฉ๋ฒ๊ณผ Lazy Loading์ ๋ํด ์ ๋ฆฌํ์์ต๋๋ค.
๐ฅ Logging ๋ค๋ ๋ฐฉ๋ฒ
๐ฅ Lazy Loading ์ด๋?
โ๏ธ settgins.py์ logging์ ๋ฌ๋ฉด, django๊ฐ ์คํ๋๋ ๋์ ๋ฐ์๋๋ query์ ์์ ํ์ธํ ์ ์๋ค.
โ๏ธ ์ฆ, ๋ด๊ฐ ๊ตฌํํ API๊ฐ DB์ ์ด๋ค ์์ฒญ์ ๋ฐ์์ํฌ ๋ ๋ง๋ค ์ด๋ค SQL๋ฌธ์ด ์คํ๋๋์ง ํ์ธํ ์ ์๊ณ , shell์์๋ ์๋ํ๋ค.
โ๏ธ ์ด๋ฅผ ํตํด API์ ์ฑ๋ฅ์ ํ ์คํธํ ์ ์๊ณ , ์ต์ ํ์ ๋ํ ์งํ๋ก ์ฌ์ฉ๋๋ค.
โ๏ธ ์๋ ๋ฐฉ๋ฒ์ ์ฝ๋ ์คํ๋๋ง๋ค ์ฟผ๋ฆฌ๊ฐ ์ฐํ๋ ์ค์ ์ด๋ค.
#settings.py LOGGING = { 'disable_existing_loggers': False, 'version': 1, 'handlers': { 'console': { 'class': 'logging.StreamHandler', 'level': 'DEBUG', }, }, 'loggers': { 'django.db.backends': { 'handlers': ['console'], 'level': 'DEBUG', 'propagate': False, }, }, }
โ๏ธ ์๋ ๋ฐฉ๋ฒ์ ์ฝ๋ ์คํ๋๋ง๋ค ์ฐํ ์ฟผ๋ฆฌ๋ฅผ log ํ์ผ๋ก ์ ์ฅํ๋ ๋ฐฉ๋ฒ์ด๋ค. ์ด ๋ฐฉ๋ฒ์ ์ธ ๋์๋ .gitignore ๋ก๊ทธ ํ์ผ์ด ์ถ์ ๋์ง ์๊ฒ ์ถ๊ฐ์์ผ์ผํ๋ค.
#settings.py LOGGING = { 'disable_existing_loggers': False, 'version': 1, 'formatters': { 'verbose': { 'format': '{asctime} {levelname} {message}', 'style': '{' }, }, 'handlers': { 'console': { 'class' : 'logging.StreamHandler', 'formatter' : 'verbose', 'level' : 'DEBUG', }, 'file': { 'level' : 'DEBUG', 'class' : 'logging.FileHandler', 'formatter' : 'verbose', 'filename' : 'debug.log', }, }, 'loggers': { 'django.db.backends': { 'handlers' : ['console','file'], 'level' : 'DEBUG', 'propagate': False, }, }, }
โ๏ธ Django๋ฟ ์๋๋ผ ๋ค๋ฅธ ORM์์๋ Lazy-loading๋ฐฉ์์ ์ฌ์ฉํ๋ค. Lazy Loading์ CS ์ ๋ฐ์ ๊ฐ๋ ์ผ๋ก generator์ ๊ฐ๋ ๊ณผ ์ ์ฌํ๋ค.
โ๏ธ Lazy-loading์ด๋ ORM์์ ๋ช ๋ น์ ์คํํ ๋๋ง๋ค DB์ ์ ๊ทผํ์ฌ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์ค๋ ๊ฒ์ด ์๋ ์ค์ ๋ฐ์ดํฐ๋ฅผ ๋ถ๋ฌ์์ผํ ๋ Query๋ฌธ์ ์คํํ๋ ๋ฐฉ์์ ์๋ฏธํ๋ค.
โ๏ธ ์ฆ, DB์ ์์ฒญํ๋ ๋ก์ง์ ๋งค๋ฒ ์คํ์์ผ DB์ ๋ฌด๋ฆฌ๋ฅผ ์ฃผ๋๊ฒ ์๋, ์ต์ข ์ ์ผ๋ก Query๋ฌธ์ด ํ๊ฐ๋์ด์ผํ ๋ DB์ ์์ฒญํ๋ ๊ฒ์ผ๋ฅธ ๋ฐฉ์์ด๋ค.
โ๏ธ ์ค์ ๋ก ํธ์ถ(ํ๊ฐ)ํ๋ ์์ : slicing, Iteration(for๋ฌธ), if๋ฌธ, print(), repr(), len(), list(), bool() ๋ฑ
โ๏ธ ์ด์ alll, filter, exclude, annotate๋ฌธ์ด ์กด์ฌํ ๋๋ ๋ฐ๋ก ํธ์ถํ์ง ์์ง๋ง, print()๋ฌธ์ด ์์ ๋๋ query๋ฅผ ์คํ์์ผ DB์ ์์ฒญํ๋ค.
โ๏ธ ์๋ ์ฝ๋๋ query๋ฌธ์ด 4ํ ํธ์ถ๋๋ค.
query = User.objects.filter(name_startswith = "kim") queyry[0] # ๐ 1ํ ํธ์ถ queyry[1] # ๐ 2ํ ํธ์ถ queyry[2] # ๐ 3ํ ํธ์ถ list(queyry) # ๐ 4ํ ํธ์ถ
โ๏ธ ์๋ ์ฝ๋๋ query๋ฌธ์ด 1๋ฒ ์คํ๋๊ธฐ ๋๋ฌธ์ DB์ 1ํ ํธ์ถ๋๋ค. list()๋ฅผ ํ ๋ query๊ฐ ์คํ๋๋๋ฐ list()๊ฐ ์ด๋ฏธ ๋ฆฌ์์ค๋ฅผ ์บ์ํด๋์๊ธฐ ๋๋ฌธ์ ๊ทธ ์๋ slicing์์๋ ์บ์ํ ๋ฆฌ์์ค๋ฅผ ์ฌ์ฉํ๊ณ , ๋ค์ DB๋ฅผ ํธ์ถํ๊ธฐ ์ํด query๋ฌธ์ ์คํ์ํค์ง ์๋๋ค.
query = User.objects.filter(name_startswith = "kim") list(queyry) # ๐ 1ํ ํธ์ถ queyry[0] queyry[1] queyry[2]