๊ฒ์ํ ์กฐํ๊ฐ ๋๋ฆด ๋: SQLite ์คํ ๊ณํ์ผ๋ก ์ธ๋ฑ์ค ํจ๊ณผ ํ์ธํ๊ธฐ
๊ฒ์ํ์ ๊ธ์ด ์์ด๋ฉด์ ๋ชฉ๋ก์ด ๋๋ ค์ง๋ฉด ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ ํ์ ๋ฐ๊พธ๊ฑฐ๋ ์๋ฒ๋ฅผ ๋๋ ค์ผ ํ๋ค๊ณ ์๊ฐํ๊ธฐ ์ฝ์ต๋๋ค. ๊ทธ๋ฌ๋ ๋จผ์ ๊ฐ์ ์กฐ๊ฑด์ ์กฐํ๊ฐ ๋ฌด์์ ์ฝ๊ณ ์ด๋ป๊ฒ ์ ๋ ฌํ๋์ง ํ์ธํด์ผ ํฉ๋๋ค. ํ ํ์ด์ง์ ํ์๋๋ ๊ธ์ด ์ ์ด๋ ๊ทธ ๊ธ์ ์ฐพ๋ ๊ณผ์ ์์ ๋ง์ ๋ฐ์ดํฐ๋ฅผ ๋ณผ ์ ์์ต๋๋ค.
์ด ๊ธ์ ์ด์ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ๊ฑด๋๋ฆฌ์ง ์๊ณ ๋ฉ๋ชจ๋ฆฌ ์์ ๊ฐ์ ๊ฒ์๊ธ 1๋ง ๊ฑด์ ๋ง๋ญ๋๋ค. ์นดํ ๊ณ ๋ฆฌ๋ณ ์ต์ ๊ธ 10๊ฐ๋ฅผ ์กฐํํ๋ SQL์ ๊ณ ์ ํ๊ณ ์ธ๋ฑ์ค ์ ํ์ ์คํ ๊ณํ๊ณผ ๊ฒฐ๊ณผ๋ฅผ ๋น๊ตํฉ๋๋ค. ์ค์ ์ฌ์ดํธ๊ฐ PostgreSQL์ด๋ MySQL์ ์ฌ์ฉํ๋ค๋ฉด ์๋ SQLite ๊ฒฐ๊ณผ๋ฅผ ๊ทธ๋๋ก ์ฑ๋ฅ ์์น๋ก ์ ์ฉํ์ง ๋ง์ธ์.
2. ์คํ ๊ณํ๊ณผ ์คํ ์๊ฐ์ ๋ค๋ฆ ๋๋ค
EXPLAIN QUERY PLAN์ SQLite๊ฐ ์กฐํ๋ฅผ ์ฒ๋ฆฌํ ๊ฒฝ๋ก๋ฅผ ์ค๋ช ํฉ๋๋ค. SCAN์ ์ ์ฒด ์ค์บ์, SEARCH๋ ์กฐ๊ฑด์ ์ด์ฉํ ํ์์ ๋ํ๋ด๋ ํํ์ผ๋ก ๋ณผ ์ ์์ต๋๋ค. ๋ค๋ง ํํ ๋ฌธ์์ด๊ณผ ์ถ๋ ฅ ํ์์ ๋ฒ์ ์ ๋ฐ๋ผ ๋ฌ๋ผ์ง ์ ์์ต๋๋ค. ๋ฌธ์์ด์ ๊ณ ์ ํด ํ๋ก๊ทธ๋จ ๋ก์ง์ ๋ง๋๋ ๊ฒ๋ณด๋ค ์ง๋จ ์๋ฃ๋ก ์ฌ์ฉํ๋ ํธ์ด ์ ํฉํฉ๋๋ค.
์คํ ๊ณํ์ด ๋ฐ๋์๋ค๊ณ ๋ฌด์กฐ๊ฑด ์ฒด๊ฐ ์๋๊ฐ ๋ช ๋ฐฐ ์ข์์ก๋ค๊ณ ๋งํ ์๋ ์์ต๋๋ค. ๋ฐ์ดํฐ ๊ท๋ชจ, ์บ์ ์ํ, ์ ์ฅ ์ฅ์น, ๋์ ์์ฒญ์ด ๋ค๋ฆ ๋๋ค. ์ด๋ฒ ์ค์ต์์๋ ์ค์ ๋ก ํ์ธํ ๊ณํ ๋ณํ์ ๊ฒฐ๊ณผ ์ผ์น๋ง ๊ธฐ๋กํฉ๋๋ค. ์๊ฐ ์์น๋ฅผ ์ฃผ์ฅํ๋ ค๋ฉด ๊ฐ์ ์กฐ๊ฑด์์ ๋ฐ๋ณต ์ธก์ ํ ๋ฐฉ๋ฒ๊ณผ ํธ์ฐจ๋ ํจ๊ป ์ ์ํด์ผ ํฉ๋๋ค.
3. ์กฐํ ์กฐ๊ฑด์ ๋ง๋ ๋ณตํฉ ์ธ๋ฑ์ค๋ฅผ ์๊ฐํฉ๋๋ค
์์ ๋ category๊ฐ it์ธ ํ์ ์ฐพ๊ณ id๋ฅผ ๋ด๋ฆผ์ฐจ์์ผ๋ก ์ ๋ ฌํ ๋ค 10๊ฐ๋ฅผ ๊ฐ์ ธ์ต๋๋ค. category์ id๋ฅผ ํฌํจํ ๋ณตํฉ ์ธ๋ฑ์ค๊ฐ ์ด ์กฐํ์ ์ด๋ค ์ํฅ์ ์ฃผ๋์ง ํ์ธํฉ๋๋ค. ์ธ๋ฑ์ค ์ค๊ณ๋ ์ด ์ด๋ฆ๋ง ๋ณด๊ณ ํ๋ ๊ฒ์ด ์๋๋ผ ์์ฃผ ์ฌ์ฉํ๋ WHERE์ ORDER BY๋ฅผ ํจ๊ป ์ดํด๋ณด๋ ์์ ์ ๋๋ค.
์ค์ ๊ฒ์ํ์ด created_at์ผ๋ก ์ ๋ ฌํ๊ฑฐ๋ ์์ฝ ๋ฐํ, ๊ณต์ง, ๊ณต๊ฐ ๋ฒ์๋ฅผ ํํฐ๋งํ๋ค๋ฉด ์ฟผ๋ฆฌ๊ฐ ๋ฌ๋ผ์ง๋๋ค. ์์ ์ ์ธ๋ฑ์ค๋ฅผ ๊ทธ ์ฌ์ดํธ์ ๋ฐ๋ก ์ถ๊ฐํ์ง ๋ง์ธ์. ๊ธฐ์กด ์ธ๋ฑ์ค์ ์กฐํ ์กฐ๊ฑด์ ํ์ธํ๊ณ ํ๋ณด ํ๋๋ฅผ ๊ฒ์ฆ์ฉ ํ๊ฒฝ์์ ๋น๊ตํฉ๋๋ค. ๋น์ทํ ์ด๋ฆ์ ์ค๋ณต ์ธ๋ฑ์ค๋ฅผ ์ฌ๋ฌ ๊ฐ ๋ง๋๋ ๊ฒ์ ๊ด๋ฆฌ ๋น์ฉ์ ๋๋ฆด ์ ์์ต๋๋ค.
4. ๊ฒฐ๊ณผ๋ฅผ ๋จผ์ ๊ณ ์ ํ ๋ค ๊ณํ์ ๋น๊ตํฉ๋๋ค
์๋ ์ฝ๋๋ ์ ํด์ง ๊ท์น์ผ๋ก 1๋ง ๊ฐ์ ํ์ ์ฝ์ ํฉ๋๋ค. ๋งค ์ด ๋ฒ์งธ ํ๋ง it๋ก ์ง์ ํด ๊ฒฐ๊ณผ๋ฅผ ์ฌํํ๊ธฐ ์ฝ๊ฒ ๋ง๋ค์์ต๋๋ค. ์ธ๋ฑ์ค๋ฅผ ์ถ๊ฐํ๊ธฐ ์ ๊ฒฐ๊ณผ๋ฅผ ๋ณด๊ดํ๊ณ , ์ถ๊ฐ ํ ๊ฐ์ ๊ฒฐ๊ณผ์ธ์ง assert๋ก ํ์ธํฉ๋๋ค. ์ด ๊ฒ์ฌ๋ ๋น ๋ฅธ ์กฐํ๊ฐ ์ฌ๋ฐ๋ฅธ ์กฐํ์ด๊ธฐ๋ ํ์ง ํ์ธํ๋ ์ต์ ์ ์ฐจ์ ๋๋ค.
์กฐํ ๊ฐ์ SQL ๋ฌธ์์ด์ ์ง์ ์ฐ๊ฒฐํ์ง ์๊ณ ๋งค๊ฐ๋ณ์๋ก ์ ๋ฌํฉ๋๋ค. ์์ ์์ ์ ๋ ฅ์ ๊ณ ์ ๋ผ ์์ง๋ง ์ค์ ๊ฒ์ ์กฐ๊ฑด์์๋ ๊ฐ์ ์ต๊ด์ ์ ์งํ๋ ํธ์ด ์ข์ต๋๋ค. in-memory ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ ํ๋ก๊ทธ๋จ์ด ๋๋๋ฉด ์ฌ๋ผ์ง๋๋ค. ๋ก์ปฌ์ ์ค์ DB ํ์ผ์ ์ค์ต ๋์๊ณผ ํผ๋ํ์ง ์๋๋ก ์คํ ์ ์ ์ฐ๊ฒฐ ๋ฌธ์์ด์ ํ์ธํ์ธ์.
5. ์ธ๋ฑ์ค๋ฅผ ๋๋ฆฌ๋ฉด ์๊ธฐ๋ ๋น์ฉ๋ ์์ต๋๋ค
์ธ๋ฑ์ค๋ ์ฝ๊ธฐ ์์ ์ ๋์ง๋ง ์ฝ์ ๊ณผ ์์ ๋๋ ๊ด๋ฆฌํด์ผ ํฉ๋๋ค. ๊ธ์ ์์ฃผ ์์งํ๋ ์ฌ์ดํธ์์๋ ์ฐ๊ธฐ๋๊ณผ ์ธ๋ฑ์ค ์ ์ฅ ๊ณต๊ฐ์ ํจ๊ป ๊ณ ๋ คํด์ผ ํฉ๋๋ค. ์กฐํ๊ฐ ๋๋ฆฌ๋ค๋ ์ด์ ๋ง์ผ๋ก ๋ชจ๋ ์ด์ ์ธ๋ฑ์ค๋ฅผ ์ถ๊ฐํ๋ฉด ์ฐ๊ธฐ์ ์ ์ง ๊ด๋ฆฌ์ ๋ถ๋ด์ด ์๊ธธ ์ ์์ต๋๋ค.
ํนํ ๋ณธ๋ฌธ ๊ฒ์, ์ผ๋ถ ๋ฌธ์์ด ๊ฒ์, ๋ค๋ฅธ ์ ๋ ฌ ๊ธฐ์ค์ ๊ฐ์ ์ธ๋ฑ์ค์ ํจ๊ณผ๋ฅผ ๊ธฐ๋ํ๊ธฐ ์ด๋ ต์ต๋๋ค. ํจ์ ์ ์ฉ์ด๋ ์กฐ๊ฑด ํํ๋ ์ค์ํฉ๋๋ค. ์ด๋ฒ ์์ ์ category ๋๋ฑ ์กฐ๊ฑด๊ณผ ์ผ๋ฐ ์ ๋ชฉ ๊ฒ์์ ๋ค๋ฅธ ๋ฌธ์ ์ ๋๋ค. ๋ชฉ๋ก ์กฐํ๋ฅผ ๊ฐ์ ํ ๊ฒฐ๊ณผ๋ฅผ ์ ์ฒด ๊ฒ์ ์ฑ๋ฅ ๊ฐ์ ์ผ๋ก ํ๋ํด ์ค๋ช ํ์ง ๋ง์ธ์.
6. ์ด์์ ์ ์ฉํ๊ธฐ ์ ์ ํ์ธํ ํญ๋ชฉ
์ค์ ์กฐํ SQL๊ณผ ์คํ ๊ณํ์ ํ๋ณดํ๊ณ , ์์ฃผ ์ฌ์ฉํ๋ ์กฐ๊ฑด๊ณผ ๋๋ฆฐ ์กฐ๊ฑด์ ๋ฐ๋ก ๋น๊ตํฉ๋๋ค. ๋ฐ์ดํฐ๊ฐ ์ ์ ๊ฐ๋ฐ ํ๊ฒฝ์์๋ง ์ํํ๋ฉด ์ด์ ๊ท๋ชจ์ ๋น์ฉ์ ๋์น ์ ์์ต๋๋ค. ๊ฐ์ธ์ ๋ณด๋ฅผ ์ ๊ฑฐํ ๋ํ ๋ฐ์ดํฐ๋ ๋ณ๋ ์ํ ํ๊ฒฝ์ ์ฌ์ฉํ๊ณ ๊ฒฐ๊ณผ ํ์ ์์์ ๊ณต๊ฐ ๋ฒ์๋ ํ์ธํ์ธ์.
๋ณ๊ฒฝ์ ๊ธฐ์กด ์ธ๋ฑ์ค ๋ชฉ๋ก๊ณผ ๋๋๋ฆด ๋ฐฉ๋ฒ์ ๊ธฐ๋กํ ๋ค ์งํํฉ๋๋ค. ์ฌ์ฉ ์ค์ธ DB ์ ํ์ ๋ฐ๋ผ ์ธ๋ฑ์ค ์์ฑ ์ค์ ์ ๊ธ์ด๋ ๋ถํ๊ฐ ๋ค๋ฅผ ์ ์์ต๋๋ค. SQLite ์ค์ต๋ง์ผ๋ก ๊ทธ ์ด์ ์ํฅ์ ํ๋จํ ์๋ ์์ต๋๋ค. ์ฑ ๋ด๋ถ ์บ์์ DB ์ธ๋ฑ์ค์ ํจ๊ณผ๋ ๊ตฌ๋ถํด ์ธก์ ํด์ผ ์ค์ ๋ณ๋ชฉ์ด ๋จ์ ์๋์ง ์ ์ ์์ต๋๋ค.
7. ์กฐํ ์กฐ๊ฑด์ ๋ฐ๊พธ์ด ํ๊ณ๋ฅผ ํ์ธํ๊ธฐ
์์ ์์ ๋ฐํ ์ด์ id ๋์ title๋ก ๋ฐ๊พธ๊ณ ๊ณํ์ด ์ด๋ป๊ฒ ๋ฌ๋ผ์ง๋์ง ์ดํด๋ณผ ์ ์์ต๋๋ค. ์ธ๋ฑ์ค๊ฐ ํ์์ ์ฌ์ฉ๋ผ๋ ํ์ํ ๋ฐ์ดํฐ๋ฅผ ์ป๋ ๊ฒฝ๋ก๋ ๋ฌ๋ผ์ง ์ ์์ต๋๋ค. ์ด ๋ณํ๋ ๊ฒฐ๊ณผ๊ฐ ํ๋ ธ๋ค๋ ๋ป์ด ์๋๋ผ ๋น์ฉ์ ์ฝ์ ํญ๋ชฉ์ด ๋ฌ๋ผ์ก๋ค๋ ๋ป์ ๋๋ค. ์๋ณธ ์์ ์ covering ๊ฒฐ๊ณผ๋ฅผ ๋ชจ๋ ๋ฐํ ์ด์ ํ๋ํ์ง ๋ง์ธ์.
์นดํ ๊ณ ๋ฆฌ๊ฐ free์ธ ๊ฒฝ์ฐ๋ ๋น๊ตํฉ๋๋ค. ๋ฐ์ดํฐ ๋ถํฌ๊ฐ ๋ค๋ฅด๋ฉด ์ ํํ ์กฐ๊ฑด์ด ์ ์ฒด ํ์ ์ด๋ ์ ๋๋ฅผ ํฌํจํ๋์ง ๋ฌ๋ผ์ง๋๋ค. ๊ฐ์ SQL์ด๋ผ๊ณ ๋ชจ๋ ๊ฐ์์ ๋น์ฉ์ด ๊ฐ๋ค๊ณ ๋ณด๊ธฐ ์ด๋ ต์ต๋๋ค. ์ด์ ํ๊ฒฝ์์๋ ๋ฐฉ๋ฌธ์๊ฐ ์์ฃผ ์ ํํ๋ ๊ฒ์ํ๊ณผ ๋๋ฌธ ๊ฒ์ํ์ ๊ตฌ๋ถํด ์ ๊ฒํ๋ฉด ๊ฐ์ ์ ํจ๊ณผ๋ฅผ ๋ ํ์ค์ ์ผ๋ก ์ดํดํ ์ ์์ต๋๋ค.
ํ์ด์ง ๋ฒํธ๊ฐ ์ปค์ง ๋์ ๋ชฉ๋ก ์กฐํ๋ ๋ณ๋ ์ฃผ์ ์ ๋๋ค. ์ด๋ฒ SQL์ ์ต์ 10๊ฐ๋ง ๊ฐ์ ธ์ค๋ฉฐ ์์ฃผ ๊น์ OFFSET ์กฐํ๋ฅผ ์ํํ์ง ์์ต๋๋ค. ์ต์ ๊ธ ์กฐํ๊ฐ ๊ฐ์ ๋๋ค๋ ๊ฒฐ๊ณผ๋ฅผ ์ค๋๋ ๋ชจ๋ ๋ชฉ๋ก์ ์๋ ๊ฐ์ ์ผ๋ก ์ค๋ช ํ์ง ๋ง์ธ์. ์ค์ ์๋น์ค๊ฐ ์ฌ์ฉํ๋ ํ์ด์ง ๋ฐฉ์๊ณผ ํ์ฉ ๋ฒ์๋ฅผ ํจ๊ป ํ์ธํด์ผ ํฉ๋๋ค. ๊ฒ์๊ณผ ์ ๋ ฌ ์ต์ ๋ ๊ฐ์ ์ด์ ๋ก ๊ตฌ๋ถํฉ๋๋ค.
์ธก์ ๊ธฐ๋ก์๋ SQLite ๋ฒ์ , ํ ์, ๋ฐ์ดํฐ ์์ฑ ๊ท์น, ์กฐํ ์กฐ๊ฑด๊ณผ ๋ฐํ ์ด์ ์ ์ต๋๋ค. ์ ์ฉ ์ ํ์ ๊ณํ๊ณผ ๊ฒฐ๊ณผ ๊ฐ์๋ ์ ์ฅํ์ธ์. ์คํ ์๊ฐ ์ธก์ ์ ์ถ๊ฐํ๋ค๋ฉด ์ค๋น์ ์ฝ์ ์๊ฐ์ ์ ์ธํ๊ณ ์กฐํ ๊ตฌ๊ฐ์ ๋ฐ๋ณตํด์ ์ธก์ ํด์ผ ํฉ๋๋ค. ๊ฒฐ๊ณผ๋ฅผ ํ ๋ฒ ์ฝ์ ๋ค์ ์บ์ ํจ๊ณผ๋ ๊ณ ๋ คํ๊ณ ์ธก์ ํ๊ฒฝ์ ๊ณต๊ฐํ๋ฉด ๋ค๋ฅธ ์ฌ๋์ด ๋น๊ตํ๊ธฐ ์ฌ์์ง๋๋ค.
์ธ๋ฑ์ค ํ๋ณด๋ฅผ ์ด์์ ์ ์ํ ๋๋ ์ฝ๊ธฐ ๊ฐ์ ๋ฟ ์๋๋ผ ๊ธ ์ฝ์ ๊ณผ ์์ ๋น๋๋ฅผ ์ ์ต๋๋ค. ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๊ฐํด์ง๋ ์ค์ ๋ถํ๋ฅผ ์์ง ๋ชปํ๋ฉด ๋จ์ ์ ์ธ ๋น์ฉ ์ ๊ฐ์ ์ฃผ์ฅํ์ง ์์ต๋๋ค. ์ด๋ฒ์ฒ๋ผ ์๊ฒ ์ฌํํ ์ฌ๋ก๋ ๊ฐ์ค์ ํ์ธํ๋ ์ถ๋ฐ์ ์ด๋ฉฐ ์ด์ ๋ณ๊ฒฝ์ ์ต์ข ๊ฒ์ฆ์ ์๋๋๋ค. ๊ฒฐ๊ณผ์ ๋ฒ์๋ฅผ ์ ํํ๊ฒ ์ ๋ฌํ๋ ํธ์ด ์ ์ง ๊ด๋ฆฌ์ ๋์์ด ๋ฉ๋๋ค.
8. ๋ฐ๋ผ ํ๋ ์์
๋ช ๋ น๊ณผ ์ฝ๋๋ ํ์ต์ฉ์ ๋๋ค. ์ค๋ช ์ ํ์๋ ์คํ ํ๊ฒฝ์ ๊ตฌ๋ถํ๊ณ ์ ์ํ ํด๋ ๋๋ ๋ชจ์ ์ ๋ ฅ์ผ๋ก ์์ํ์ธ์.
์์ ์ฝ๋
import sqlite3
con = sqlite3.connect(':memory:')
con.execute('CREATE TABLE posts(id INTEGER PRIMARY KEY, category TEXT, title TEXT)')
con.executemany('INSERT INTO posts(category,title) VALUES (?,?)',
[('it' if i % 10 == 0 else 'free', f'post {i}') for i in range(10000)])
sql = 'SELECT id FROM posts WHERE category=? ORDER BY id DESC LIMIT 10'
args = ('it',)
print('before:', con.execute('EXPLAIN QUERY PLAN ' + sql, args).fetchall())
expected = con.execute(sql, args).fetchall()
con.execute('CREATE INDEX idx_posts_category_id ON posts(category,id)')
print('after:', con.execute('EXPLAIN QUERY PLAN ' + sql, args).fetchall())
assert con.execute(sql, args).fetchall() == expected
con.close()9. ๊ฒ์ฆ ๊ฒฐ๊ณผ์ ํด์
| ํ์ธ ํญ๋ชฉ | ๊ฒฐ๊ณผ ๋๋ ๊ฒ์ฆ ๋ฒ์ |
|---|---|
| ํ ์ | 10,000 |
| ์ ์ฉ ์ | SCAN posts |
| ์ ์ฉ ํ | SEARCH posts USING COVERING INDEX idx_posts_category_id (category=?) |
| ์กฐํ ๊ฒฐ๊ณผ | ์ ์ฉ ์ ํ ๋์ผ |
| ์๋ ๋ฐฐ์ | ์ธก์ ยท์ฃผ์ฅํ์ง ์์ |
Python 3.12 ๋ด์ฅ SQLite๋ก ์คํ ๊ณํ๊ณผ ๊ฒฐ๊ณผ ์ผ์น๋ฅผ ํ์ธํ์ต๋๋ค. ์ด์ DB์ ๋์ ์ ์ ์ํฉ์ ์๋ต ์๊ฐ์ ์ธก์ ํ ๊ฒฐ๊ณผ๋ ์๋๋๋ค.
10. ์์ฃผ ๋ฌป๋ ์ง๋ฌธ
SCAN์ด ๋์ค๋ฉด ํญ์ ๋์๊ฐ์?
์๋๋๋ค. ์์ ํ ์ด๋ธ์ด๋ ๋ง์ ํ์ ์ฝ๋ ์ฟผ๋ฆฌ์์๋ ์ ์ ํ ์ ํ์ผ ์ ์์ต๋๋ค. ์ค์ ๋น์ฉ๊ณผ ๋ฐํ ์กฐ๊ฑด์ ํจ๊ป ํ๋จํฉ๋๋ค.
COVERING INDEX๋ ๋ฌด์์ธ๊ฐ์?
์ด๋ฒ ์กฐํ์ ํ์ํ category์ id๋ฅผ ์ธ๋ฑ์ค์์ ์ฒ๋ฆฌํ ์ ์๋ ๊ณํ์ ๋๋ค. ๋ณธ๋ฌธ ๋ฑ ๋ค๋ฅธ ์ด์ ์ถ๊ฐํ๋ฉด ๊ฐ์ ๊ณํ์ ๊ธฐ๋ํ ์ ์์ต๋๋ค.
์ค์ ์ฌ์ดํธ์ ๊ทธ๋๋ก ์ถ๊ฐํด๋ ๋๋์?
์ฌ์ฉ DB, ์ฟผ๋ฆฌ, ๊ธฐ์กด ์ธ๋ฑ์ค์ ์์ฑ ์ํฅ์ ํ์ธํด์ผ ํฉ๋๋ค. ์ด ๊ธ์ ํ์ต์ฉ SQLite ์์ ์ ๋๋ค.
11. ๊ณต์ ์ฐธ๊ณ ์๋ฃ
๋์ ์ ์์ ์ต์ ์ ์๋ ์ ์์ ๋ฌธ์์์ ํ์ธํ ์ ์์ต๋๋ค. ๋ณธ๋ฌธ์ ์ฌ๋ก์ ์์ ๋ ํ์ต์ ์ํด ๋ ๋ฆฝ์ ์ผ๋ก ๊ตฌ์ฑํ์ต๋๋ค.
์์ ์ ๋ ฅ์ ํ์ต์ฉ ๋ชจ์ ์๋ฃ์ ๋๋ค. ์ค์ ํ๊ฒฝ์ ์ ์ฉํ ๋๋ ๋ณธ๋ฌธ์ ์๋ดํ ๊ฒ์ฆ ๋ฒ์์ ์กฐ๊ฑด์ ํ์ธํ์ธ์.
๐ฌ ๋๊ธ 0๊ฐ