inspeep

๊ฒŒ์‹œํŒ ์กฐํšŒ๊ฐ€ ๋А๋ฆด ๋•Œ: SQLite ์‹คํ–‰ ๊ณ„ํš์œผ๋กœ ์ธ๋ฑ์Šค ํšจ๊ณผ ํ™•์ธํ•˜๊ธฐ

์กฐํšŒ ์ˆ˜ 11
์ถ”์ฒœ ์ˆ˜ 0
๋Œ“๊ธ€ 0
1. ๋А๋ฆฐ ๋ชฉ๋ก ์กฐํšŒ๋ฅผ ์–ด๋–ป๊ฒŒ ์ž‘๊ฒŒ ์žฌํ˜„ํ• ๊นŒ์š”?

๊ฒŒ์‹œํŒ์— ๊ธ€์ด ์Œ“์ด๋ฉด์„œ ๋ชฉ๋ก์ด ๋А๋ ค์ง€๋ฉด ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ œํ’ˆ์„ ๋ฐ”๊พธ๊ฑฐ๋‚˜ ์„œ๋ฒ„๋ฅผ ๋Š˜๋ ค์•ผ ํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•˜๊ธฐ ์‰ฝ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๋จผ์ € ๊ฐ™์€ ์กฐ๊ฑด์˜ ์กฐํšŒ๊ฐ€ ๋ฌด์—‡์„ ์ฝ๊ณ  ์–ด๋–ป๊ฒŒ ์ •๋ ฌํ•˜๋Š”์ง€ ํ™•์ธํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ํ•œ ํŽ˜์ด์ง€์— ํ‘œ์‹œ๋˜๋Š” ๊ธ€์ด ์ ์–ด๋„ ๊ทธ ๊ธ€์„ ์ฐพ๋Š” ๊ณผ์ •์—์„œ ๋งŽ์€ ๋ฐ์ดํ„ฐ๋ฅผ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ด ๊ธ€์€ ์šด์˜ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ๊ฑด๋“œ๋ฆฌ์ง€ ์•Š๊ณ  ๋ฉ”๋ชจ๋ฆฌ ์•ˆ์— ๊ฐ€์ƒ ๊ฒŒ์‹œ๊ธ€ 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๊ฐœ

IT ๊ฒŒ์‹œํŒ

๊ณต์ง€
Notice
๊ณต์ง€ inspeep ์ปค๋ฎค๋‹ˆํ‹ฐ ์ด์šฉ ๋ฐ ๊ฒŒ์‹œ๋ฌผ ๊ด€๋ฆฌ ๊ทœ์ • ์•ˆ๋‚ด
๐Ÿ‘ค ๊ด€๋ฆฌ์ž ๐Ÿ“… 2026.04.15 ๐Ÿ‘€ ์กฐํšŒ 57 ๐Ÿ‘ ์ถ”์ฒœ 0
BEST
์ธ๋„ค์ผ
BEST 2. ์ฝ”๋”ฉ ๋ฌธ์™ธํ•œ์˜ ์›Œ๋“œํ”„๋ ˆ์Šค ์ •๋ณต๊ธฐ: VS Code์™€ FTP์˜ ์Šต๊ฒฉ
๐Ÿ‘ค ๊ด€๋ฆฌ์ž ๐Ÿ“… 2026.03.05 ๐Ÿ‘€ ์กฐํšŒ 135 ๐Ÿ‘ ์ถ”์ฒœ 0
Random Pick
์ธ๋„ค์ผ
Random Pick kbs) "์ค‘๊ณ  ์•„์ดํฐ '๊ณต๊ตฌ' ํ•˜์„ธ์š”"..๋ˆ ๋ฐ›๊ณ  ์ž ์ 
๐Ÿ‘ค ๋ฆฌํ† ํƒ€ ๐Ÿ“… 2026.08.15 ๐Ÿ‘€ ์กฐํšŒ 16 ๐Ÿ‘ ์ถ”์ฒœ 0
๊ฐœ๋ฐœ๊ธฐ
No Image
๊ฐœ๋ฐœ๊ธฐ
์ธ๋„ค์ผ
11. ํ•ญ์ƒ ๋งŒ๋“ค๊ณ  ๋‚˜๋ฉด ์กฐ๊ธˆ์”ฉ ์•„์‰ฝ๋‹ค: ๊ณ„์†๋˜๋Š” ๋‹ค๋“ฌ๊ธฐ
๐Ÿ‘ค ๊ด€๋ฆฌ์ž ๐Ÿ“… 2026.03.05 ๐Ÿ‘€ ์กฐํšŒ 114 ๐Ÿ‘ ์ถ”์ฒœ 0
๊ฐœ๋ฐœ๊ธฐ
์ธ๋„ค์ผ
๊ฐœ๋ฐœ๊ธฐ
์ธ๋„ค์ผ
๊ฐœ๋ฐœ๊ธฐ
์ธ๋„ค์ผ
๊ฐœ๋ฐœ๊ธฐ
์ธ๋„ค์ผ
2. ์ฝ”๋”ฉ ๋ฌธ์™ธํ•œ์˜ ์›Œ๋“œํ”„๋ ˆ์Šค ์ •๋ณต๊ธฐ: VS Code์™€ FTP์˜ ์Šต๊ฒฉ
๐Ÿ‘ค ๊ด€๋ฆฌ์ž ๐Ÿ“… 2026.03.05 ๐Ÿ‘€ ์กฐํšŒ 135 ๐Ÿ‘ ์ถ”์ฒœ 0
« ์ฒ˜์Œ ‹ ์ด์ „ 1 2 3 4 5 6 7
โœ๏ธ ๊ธ€์“ฐ๊ธฐ