์์ ๊ฐ์ด ๊ด๊ณํ ๋ฐ์ดํฐ๋ฒ ์ด์ค์์ ์ง์ฐ๋ก๋ฉ์ ์ฌ์ฉํ ๊ฒฝ์ฐ ๊ด๋ จ๋ ๊ฐ์ฒด๋ฅผ ์กฐํํ๊ธฐ ์ํด N๊ฐ์ ์ถ๊ฐ ์ฟผ๋ฆฌ๊ฐ ๋ฐ์ํ๊ณ ์คํ ๋๋ ๋ฌธ์ ์ ๋๋ค. ๋น์ฐํ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๋ง์ ๋ถํ๊ฐ ๊ฑธ๋ฆฌ๊ณ ์๋ต์๊ฐ์ด ๋๋ ค์ง๋ ๋ฑ์ ์ฑ๋ฅ ๋ฌธ์ ๋ฅผ ์ผ๊ธฐํฉ๋๋ค.
select_related
prefetch_related
์ง์ฐ ๋ก๋ฉ(Lazy Loading)์ ํ์ํ ์์ ์ ๊ด๋ จ ๊ฐ์ฒด๋ฅผ ์กฐํํ๊ธฐ ๋๋ฌธ์, ์ฌ๋ฌ ๊ฐ์ ๊ฐ์ฒด๋ฅผ ์์ฐจ์ ์ผ๋ก ํ์ธํ๋ ๊ณผ์ ์์ ๋งค๋ฒ ์ถ๊ฐ ์ฟผ๋ฆฌ๊ฐ ๋ฐ์ํ๊ธฐ ์ฝ์ต๋๋ค. ์๋ฅผ ๋ค์ด, ๊ฒ์๊ธ๊ณผ ์๊ฐ ์ ๋ณด๊ฐ 1๋๋ค(one-to-many) ๊ด๊ณ๋ก ์ฐ๊ฒฐ๋์ด ์๊ณ , ๊ฒ์๊ธ์ ๋ฐ๋ณต๋ฌธ์ผ๋ก ์ํํ๋ฉด์ ์๊ฐ ์ ๋ณด์ ์ ๊ทผํ๋ค๋ฉด, ๋ชจ๋ ๊ฒ์๊ธ์ ๋ํด ์๊ฐ ์ ๋ณด๋ฅผ ๊ฐ์ ธ์ค๋ ์ฟผ๋ฆฌ๊ฐ ๋งค๋ฒ ์คํ๋ฉ๋๋ค. ์ด๋ฅผ N+1 ๋ฌธ์ ๋ผ๊ณ ๋ถ๋ฆ ๋๋ค.
N+1 ๋ฌธ์ ๋ฅผ ์ต์ํํ๋ ค๋ฉด, ํ์ํ ๋ฐ์ดํฐ๋ฅผ ํ ๋ฒ์ ๋ฏธ๋ฆฌ ๋ถ๋ฌ์ค๋ ์ ๋ต์ด ์ข์ต๋๋ค. Django์์๋ select_related
์ prefetch_related
๊ฐ ์ด๋ฅผ ์ง์ํฉ๋๋ค.
select_related
select_related
๋ก ๋๋ถ๋ถ ์ฒ๋ฆฌ ๊ฐ๋ฅprefetch_related
select_related
๋ก ์ฒ๋ฆฌํ ์ ์๋ ๊ฒฝ์ฐselect_related
๊ฐ ์ ๋๋ ๊ด๊ณ์์ ์ฌ์ฉํ๊ธฐ ์ข์ผ๋ฉฐ, ์ฐ๊ด๋ ๊ฐ์ฒด๋ฅผ ํ ๋ฒ์ ์บ์ฑํด๋์ด ์กฐํ ์ฑ๋ฅ์ ๋์select_related
๊ฐ ํจ์ฌ ๊ฐํธํ๊ณ ์ฟผ๋ฆฌ ์๋ ์ค์ผ ์ ์์ prefetch_related
๋ฅผ ์ฌ์ฉํ๋ ํธ์ด ์ ์ฉprefetch_related
๋ ํ ๋ฒ์ ๊ด๋ จ ๋ฐ์ดํฐ๋ฅผ ๋ก๋ํ๊ธฐ ๋๋ฌธ์, ์ฐ๊ด ๊ฐ์ฒด ์๊ฐ ๋ง์ผ๋ฉด ๋ฉ๋ชจ๋ฆฌ์ ๋ถ๋ด์ด ๋ ์๋ ์์ต๋๋ค.