์ฐ๋ฆฌ์๊ฒ ์ต์ํ ๋ชจ๋ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ผ๋ฐ์ ์ธ ์๋๋ฆฌ์ค ์ค ํ๋๋ ํน์ ๊ธฐ์ค์ ๋ฐ๋ผ ๋ฐ์ดํฐ๋ฅผ ๊ฒ์ํ๊ณ ์ด๋ฅผ ์ฝ๊ธฐ ์ฌ์ด ํ์์ผ๋ก ํ์ํ๋ ๊ฒ์ ๋๋ค. ์ ๋ ฌ, ๊ทธ๋ฃนํ ๋ฐ ํ์ด์ง์ ์ํ ์ถ๊ฐ ์ต์ ์ด ์์ ์๋ ์์ต๋๋ค. ์ด๋ก ์ ์ผ๋ก ์์ ์ ์ฌ์ํ ๊ฒ์ด์ง๋ง ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ ๋ ๋ง์ ๊ฐ๋ฐ์๊ฐ ๋ง์ ์ค์๋ฅผ ์ ์ง๋ฅด๋ฉฐ ๋์ค์ ์์ฐ์ฑ์ด ์ ํ๋ฉ๋๋ค. ์ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํ ๋ค์ํ ์ต์ ์ ๊ณ ๋ คํ๊ณ ๊ฐ์ฅ ํจ๊ณผ์ ์ธ ๊ตฌํ์ ์ ํํ๊ธฐ ์ํ ๊ถ์ฅ ์ฌํญ์ ์์ฑํด ๋ณด๊ฒ ์ต๋๋ค.
ํ์ด์ง ์ต์ #1
๋ง์์์ ๋ ์ค๋ฅด๋ ๊ฐ์ฅ ๊ฐ๋จํ ์ต์ ์ ๊ฐ์ฅ ๊ณ ์ ์ ์ธ ํํ๋ก ๊ฒ์ ๊ฒฐ๊ณผ๋ฅผ ํ์ด์ง๋ณ๋ก ํ์ํ๋ ๊ฒ์ ๋๋ค.
์ ํ๋ฆฌ์ผ์ด์
์ด ๊ด๊ณํ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ์ฌ์ฉํ๋ค๊ณ ๊ฐ์ ํด ๋ณด๊ฒ ์ต๋๋ค. ์ด ๊ฒฝ์ฐ ์ด ํ์์ผ๋ก ์ ๋ณด๋ฅผ ํ์ํ๋ ค๋ฉด ๋ ๊ฐ์ง SQL ์ฟผ๋ฆฌ๋ฅผ ์คํํด์ผ ํฉ๋๋ค.
- ํ์ฌ ํ์ด์ง์ ๋ํ ํ์ ๊ฐ์ ธ์ต๋๋ค.
- ๊ฒ์ ๊ธฐ์ค์ ํด๋นํ๋ ์ด ์ค ์๋ฅผ ๊ณ์ฐํฉ๋๋ค. ์ด๋ ํ์ด์ง๋ฅผ ํ์ํ๋ ๋ฐ ํ์ํฉ๋๋ค.
ํ
์คํธ MS SQL ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ์๋ก ๋ค์ด ์ฒซ ๋ฒ์งธ ์ฟผ๋ฆฌ๋ฅผ ์ดํด๋ณด๊ฒ ์ต๋๋ค.
SELECT * FROM Sales.SalesOrderHeader
ORDER BY OrderDate DESC
OFFSET 0 ROWS
FETCH NEXT 50 ROWS ONLY
์ ์ฟผ๋ฆฌ๋ ๋ชฉ๋ก์์ ์ฒ์ 50๊ฐ์ ์ฃผ๋ฌธ์ ์ถ๊ฐ ๋ ์ง๋ฅผ ๊ธฐ์ค์ผ๋ก ๋ด๋ฆผ์ฐจ์์ผ๋ก ์ ๋ ฌํ์ฌ ๋ฐํํฉ๋๋ค. ์ฆ, ๊ฐ์ฅ ์ต๊ทผ ์ฃผ๋ฌธ 50๊ฐ๋ฅผ ๋ฐํํฉ๋๋ค.
ํ ์คํธ ๊ธฐ๋ฐ์์๋ ๋น ๋ฅด๊ฒ ์คํ๋์ง๋ง ์คํ ๊ณํ๊ณผ I/O ํต๊ณ๋ฅผ ์ดํด๋ณด๊ฒ ์ต๋๋ค.
Table 'SalesOrderHeader'. Scan count 1, logical reads 698, physical reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.
์ฟผ๋ฆฌ ๋ฐํ์์์ SET STATISTICS IO ON ๋ช ๋ น์ ์คํํ์ฌ ๊ฐ ์ฟผ๋ฆฌ์ ๋ํ I/O ํต๊ณ๋ฅผ ์ป์ ์ ์์ต๋๋ค.
์คํ ๊ณํ์์ ๋ณผ ์ ์๋ฏ์ด ๋ฆฌ์์ค๋ฅผ ๊ฐ์ฅ ๋ง์ด ์ฌ์ฉํ๋ ์ต์ ์ ์์ค ํ ์ด๋ธ์ ๋ชจ๋ ํ์ ์ถ๊ฐ๋ ๋ ์ง๋ณ๋ก ์ ๋ ฌํ๋ ๊ฒ์ ๋๋ค. ๋ฌธ์ ๋ ํ ์ด๋ธ์ ๋ ๋ง์ ํ์ด ๋ํ๋ ์๋ก ์ ๋ ฌ์ด "๋ ์ด๋ ค์์ง๋ค"๋ ๊ฒ์ ๋๋ค. ์ค์ ๋ก๋ ์ด๋ฐ ์ํฉ์ ํผํด์ผ ํ๋ฏ๋ก ์ถ๊ฐ ๋ ์ง์ ์ธ๋ฑ์ค๋ฅผ ์ถ๊ฐํ์ฌ ๋ฆฌ์์ค ์๋น๊ฐ ๋ณ๊ฒฝ๋์๋์ง ์ดํด๋ณด๊ฒ ์ต๋๋ค.
Table 'SalesOrderHeader'. Scan count 1, logical reads 165, physical reads 0, read-ahead reads 5, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.
ํ์คํ ๋ง์ด ์ข์์ก์ต๋๋ค. ๊ทธ๋ฐ๋ฐ ๋ฌธ์ ๊ฐ ๋ค ํด๊ฒฐ๋๋์? ์ด ์ํ ๋น์ฉ์ด $100๋ฅผ ์ด๊ณผํ๋ ์ฃผ๋ฌธ์ ๊ฒ์ํ๋๋ก ์ฟผ๋ฆฌ๋ฅผ ๋ณ๊ฒฝํด ๋ณด๊ฒ ์ต๋๋ค.
SELECT * FROM Sales.SalesOrderHeader
WHERE SubTotal > 100
ORDER BY OrderDate DESC
OFFSET 0 ROWS
FETCH NEXT 50 ROWS ONLY
Table 'SalesOrderHeader'. Scan count 1, logical reads 1081, physical reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.
์ฌ๋ฏธ์๋ ์ํฉ์ด ์์ต๋๋ค. ์ฟผ๋ฆฌ ๊ณํ์ ์ด์ ๊ณํ๋ณด๋ค ํฌ๊ฒ ๋์์ง๋ ์์ง๋ง ์ค์ ๋ ผ๋ฆฌ์ ์ฝ๊ธฐ ์๋ ์ ์ฒด ํ ์ด๋ธ ์ค์บ์ ๊ฑฐ์ ๋ ๋ฐฐ์ ๋๋ค. ํ์ถ๊ตฌ๊ฐ ์์ต๋๋ค. ๊ธฐ์กด ์ธ๋ฑ์ค์์ ๋ณตํฉ ์ธ๋ฑ์ค๋ฅผ ๋ง๋ค๊ณ ์ํ์ ์ด ๊ฐ๊ฒฉ์ ๋ ๋ฒ์งธ ํ๋๋ก ์ถ๊ฐํ๋ฉด ๋ค์ 165๊ฐ์ ๋ ผ๋ฆฌ์ ์ฝ๊ธฐ๋ฅผ ์ป๊ฒ ๋ฉ๋๋ค.
CREATE INDEX IX_SalesOrderHeader_OrderDate_SubTotal on Sales.SalesOrderHeader(OrderDate, SubTotal);
์ด ์ผ๋ จ์ ์๋ ์ค๋ซ๋์ ๊ณ์๋ ์ ์์ง๋ง ์ฌ๊ธฐ์ ํํํ๊ณ ์ถ์ ๋ ๊ฐ์ง ์ฃผ์ ์๊ฐ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
- ๊ฒ์ ์ฟผ๋ฆฌ์ ์๋ก์ด ๊ธฐ์ค์ด๋ ์ ๋ ฌ ์์๋ฅผ ์ถ๊ฐํ๋ฉด ๊ฒ์ ์ฟผ๋ฆฌ ์๋์ ์๋นํ ์ํฅ์ ๋ฏธ์น ์ ์์ต๋๋ค.
- ๊ทธ๋ฌ๋ ๊ฒ์์ด์ ์ผ์นํ๋ ๋ชจ๋ ๊ฒฐ๊ณผ๊ฐ ์๋ ๋ฐ์ดํฐ์ ์ผ๋ถ๋ง ๋นผ์ผ ํ๋ ๊ฒฝ์ฐ ์ด๋ฌํ ์ฟผ๋ฆฌ๋ฅผ ์ต์ ํํ๋ ๋ฐฉ๋ฒ์ ์ฌ๋ฌ ๊ฐ์ง๊ฐ ์์ต๋๋ค.
์ด์ ์ฒ์์ ์ธ๊ธํ ๋ ๋ฒ์งธ ์ฟผ๋ฆฌ, ์ฆ ๊ฒ์ ๊ธฐ์ค์ ์ถฉ์กฑํ๋ ๋ ์ฝ๋ ์๋ฅผ ๊ณ์ฐํ๋ ์ฟผ๋ฆฌ๋ก ๋์ด๊ฐ๊ฒ ์ต๋๋ค. ๋์ผํ ์๋ฅผ ๋ค์ด๋ณด๊ฒ ์ต๋๋ค. ์ฆ, $100๊ฐ ๋๋ ์ฃผ๋ฌธ์ ๊ฒ์ํฉ๋๋ค.
SELECT COUNT(1) FROM Sales.SalesOrderHeader
WHERE SubTotal > 100
์์ ํ์๋ ์ข ํฉ ์ง์๋ฅผ ๊ณ ๋ คํ๋ฉด ๋ค์์ ์ป์ต๋๋ค.
Table 'SalesOrderHeader'. Scan count 1, logical reads 698, physical reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.
์ฟผ๋ฆฌ๊ฐ ์ ์ฒด ์ธ๋ฑ์ค๋ฅผ ํต๊ณผํ๋ค๋ ์ฌ์ค์ ๋๋ผ์ด ์ผ์ด ์๋๋๋ค. ์๋ํ๋ฉด SubTotal ํ๋๊ฐ ์ฒซ ๋ฒ์งธ ์์น์ ์์ง ์์ ์ฟผ๋ฆฌ๊ฐ ์ด๋ฅผ ์ฌ์ฉํ ์ ์๊ธฐ ๋๋ฌธ์ ๋๋ค. SubTotal ํ๋์ ๋ค๋ฅธ ์ธ๋ฑ์ค๋ฅผ ์ถ๊ฐํ๋ฉด ๋ฌธ์ ๊ฐ ํด๊ฒฐ๋๋ฉฐ ๊ฒฐ๊ณผ์ ์ผ๋ก 48๊ฐ์ ๋ ผ๋ฆฌ์ ์ฝ๊ธฐ๋ง ์ ๊ณต๋ฉ๋๋ค.
์๋ ๊ณ์ฐ ์์ฒญ์ ๋ํ ๋ช ๊ฐ์ง ์๋ฅผ ๋ ์ ์ํ ์ ์์ง๋ง ๋ณธ์ง์ ๋์ผํ๊ฒ ์ ์ง๋ฉ๋๋ค. ๋ฐ์ดํฐ ์กฐ๊ฐ์ ์์ ํ๊ณ ์ด ๊ธ์ก์ ๊ณ์ฐํ๋ ๊ฒ์ ๊ทผ๋ณธ์ ์ผ๋ก ๋ค๋ฅธ ๋ ๊ฐ์ง ์์ฒญ์ ๋๋ค., ๊ฐ๊ฐ์ ์ต์ ํ๋ฅผ ์ํ ์์ฒด ์กฐ์น๊ฐ ํ์ํฉ๋๋ค. ์ผ๋ฐ์ ์ผ๋ก ๋ ์ฟผ๋ฆฌ ๋ชจ๋์ ๋ํด ๋์ผํ๊ฒ ์๋ํ๋ ์ธ๋ฑ์ค ์กฐํฉ์ ์ฐพ์ ์ ์์ต๋๋ค.
๋ฐ๋ผ์ ์ด๋ฌํ ๊ฒ์ ์๋ฃจ์ ์ ๊ฐ๋ฐํ ๋ ๋ช ํํ ํด์ผ ํ ์ค์ํ ์๊ตฌ ์ฌํญ ์ค ํ๋๋ ๋ฐ๊ฒฌ๋ ๊ฐ์ฒด์ ์ด ๊ฐ์๋ฅผ ํ์ธํ๋ ๊ฒ์ด ๋น์ฆ๋์ค์ ์ ๋ง ์ค์ํ์ง ์ฌ๋ถ์ ๋๋ค. ๊ทธ๋ ์ง ์์ ๊ฒฝ์ฐ๊ฐ ์ข ์ข ์์ต๋๋ค. ๊ทธ๋ฆฌ๊ณ ์ ์๊ฐ์๋ ํน์ ํ์ด์ง ๋ฒํธ๋ก ํ์ํ๋ ๊ฒ์ ๋ฒ์๊ฐ ๋งค์ฐ ์ข์ ์๋ฃจ์ ์ ๋๋ค. ๋๋ถ๋ถ์ ํ์ด์ง ์๋๋ฆฌ์ค๊ฐ "๋ค์ ํ์ด์ง๋ก ์ด๋"์ฒ๋ผ ๋ณด์ด๊ธฐ ๋๋ฌธ์ ๋๋ค.
ํ์ด์ง ์ต์ #2
์ฌ์ฉ์๊ฐ ๋ฐ๊ฒฌ๋ ๊ฐ์ฒด์ ์ด ๊ฐ์๋ฅผ ์๋ ๋ฐ ๊ด์ฌ์ด ์๋ค๊ณ ๊ฐ์ ํด ๋ณด๊ฒ ์ต๋๋ค. ๊ฒ์ ํ์ด์ง๋ฅผ ๋จ์ํํด ๋ณด๊ฒ ์ต๋๋ค.
์ค์ ๋ก ๋ณ๊ฒฝ๋ ์ ์ผํ ์ ์ ํน์ ํ์ด์ง ๋ฒํธ๋ก ์ด๋ํ ์ ์๋ ๋ฐฉ๋ฒ์ด ์๋ค๋ ์ ์ด๋ฉฐ, ์ด์ ์ด ํ
์ด๋ธ์ ์ด๋ฅผ ํ์ํ๊ธฐ ์ํด ํ์ด์ง ๋ฒํธ๊ฐ ๋ช ๊ฐ์ธ์ง ์ ํ์๊ฐ ์์ต๋๋ค. ๊ทธ๋ฌ๋ ์ง๋ฌธ์ด ์๊น๋๋ค. (โ๋ค์โ ๋งํฌ๋ฅผ ์ฌ๋ฐ๋ฅด๊ฒ ํ์ํ๊ธฐ ์ํด) ๋ค์ ํ์ด์ง์ ๋ํ ๋ฐ์ดํฐ๊ฐ ์๋์ง ํ
์ด๋ธ์ด ์ด๋ป๊ฒ ์ ์ ์์ต๋๊น?
๋๋ต์ ๋งค์ฐ ๊ฐ๋จํฉ๋๋ค. ํ์์ ํ์ํ ๊ฒ๋ณด๋ค ํ๋ ๋ ๋ง์ ๋ ์ฝ๋๋ฅผ ๋ฐ์ดํฐ๋ฒ ์ด์ค์์ ์ฝ์ ์ ์์ผ๋ฉฐ, ์ด "์ถ๊ฐ" ๋ ์ฝ๋๊ฐ ์์ผ๋ฉด ๋ค์ ๋ถ๋ถ์ด ์๋์ง ์ฌ๋ถ๊ฐ ํ์๋ฉ๋๋ค. ์ด๋ ๊ฒ ํ๋ฉด ํ ํ์ด์ง์ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์ค๊ธฐ ์ํด ํ๋์ ์์ฒญ๋ง ์คํํ๋ฉด ๋๋ฏ๋ก ์ฑ๋ฅ์ด ํฌ๊ฒ ํฅ์๋๊ณ ํด๋น ๊ธฐ๋ฅ์ ๋ ์ฝ๊ฒ ์ง์ํ ์ ์์ต๋๋ค. ์ค์ ๋ก๋ ์ด ๋ ์ฝ๋ ์ ๊ณ์ฐ์ ๊ฑฐ๋ถํ๋ฉด ๊ฒฐ๊ณผ ์ ๋ฌ ์๋๊ฐ 4~5๋ฐฐ ๋นจ๋ผ์ง ๊ฒฝ์ฐ๊ฐ ์์์ต๋๋ค.
์ด ์ ๊ทผ ๋ฐฉ์์๋ ์ฌ๋ฌ ๊ฐ์ง ์ฌ์ฉ์ ์ธํฐํ์ด์ค ์ต์ ์ด ์์ต๋๋ค. ์์ ์์์์ ๊ฐ์ด "๋ค๋ก" ๋ฐ "์์ผ๋ก" ๋ช ๋ น, ํ์๋ ๊ฒฐ๊ณผ์ ๋จ์ํ ์ ๋ถ๋ถ์ ์ถ๊ฐํ๋ "๋ ๋ณด๊ธฐ" ๋ฒํผ, ์๋ํ๋ "๋ฌดํ ์คํฌ๋กค" "๋ ๋ก๋"๋ผ๋ ์์น์ ๋ฐ๋ผ ๋ค์ ๋ถ๋ถ์ ๊ฐ์ ธ์ค๋ผ๋ ์ ํธ๋ ์ฌ์ฉ์๊ฐ ํ์๋ ๋ชจ๋ ๊ฒฐ๊ณผ๋ฅผ ๋๊น์ง ์คํฌ๋กคํ๋ผ๋ ๊ฒ์ ๋๋ค. ์๊ฐ์ ์๋ฃจ์ ์ด ๋ฌด์์ด๋ ๋ฐ์ดํฐ ์ํ๋ง์ ์์น์ ๋์ผํ๊ฒ ์ ์ง๋ฉ๋๋ค.
ํ์ด์ง ๊ตฌํ์ ๋์์ค
์์ ์ ๊ณต๋ ๋ชจ๋ ์ฟผ๋ฆฌ ์์ ๋ ์ฟผ๋ฆฌ ์์ฒด์์ ๊ฒฐ๊ณผ ํ์ ์์์ ๋ฐํํด์ผ ํ๋ ํ ์๋ฅผ ์ง์ ํ๋ ๊ฒฝ์ฐ "์คํ์ + ๊ฐ์" ์ ๊ทผ ๋ฐฉ์์ ์ฌ์ฉํฉ๋๋ค. ๋จผ์ , ์ด ๊ฒฝ์ฐ ๋งค๊ฐ๋ณ์ ์ ๋ฌ์ ๊ตฌ์ฑํ๋ ๊ฐ์ฅ ์ข์ ๋ฐฉ๋ฒ์ ์ดํด๋ณด๊ฒ ์ต๋๋ค. ์ค์ ๋ก ์ ๋ ์ฌ๋ฌ ๊ฐ์ง ๋ฐฉ๋ฒ์ ์ ํ์ต๋๋ค.
- ์์ฒญ๋ ํ์ด์ง์ ์ผ๋ จ๋ฒํธ(pageIndex), ํ์ด์ง ํฌ๊ธฐ(pageSize).
- ๋ฐํ๋ ์ฒซ ๋ฒ์งธ ๋ ์ฝ๋์ ์ผ๋ จ ๋ฒํธ(startIndex), ๊ฒฐ๊ณผ์ ์ต๋ ๋ ์ฝ๋ ์(count)์ ๋๋ค.
- ๋ฐํ๋ ์ฒซ ๋ฒ์งธ ๋ ์ฝ๋์ ์ํ์ค ๋ฒํธ(startIndex), ๋ฐํ๋ ๋ง์ง๋ง ๋ ์ฝ๋์ ์ํ์ค ๋ฒํธ(endIndex)์ ๋๋ค.
์ธ๋ป ๋ณด๋ฉด ์ด๋ ๋๋ฌด ์ด๋ณด์ ์ด์ด์ ์ฐจ์ด๊ฐ ์๋ ๊ฒ์ฒ๋ผ ๋ณด์ผ ์ ์์ต๋๋ค. ๊ทธ๋ฌ๋ ์ด๊ฒ์ ๊ทธ๋ ์ง ์์ต๋๋ค. ๊ฐ์ฅ ํธ๋ฆฌํ๊ณ ๋ณดํธ์ ์ธ ์ต์ ์ ๋ ๋ฒ์งธ ์ต์ (startIndex, count)์ ๋๋ค. ์ฌ๊ธฐ์๋ ๋ช ๊ฐ์ง ์ด์ ๊ฐ ์์ต๋๋ค.
- ์์ ์ ๊ณต๋ +1 ํญ๋ชฉ ๊ต์ ์ ๊ทผ ๋ฐฉ์์ ๊ฒฝ์ฐ pageIndex ๋ฐ pageSize๋ฅผ ์ฌ์ฉํ๋ ์ฒซ ๋ฒ์งธ ์ต์ ์ ๋งค์ฐ ๋ถํธํฉ๋๋ค. ์๋ฅผ ๋ค์ด ํ์ด์ง๋น 50๊ฐ์ ๊ฒ์๋ฌผ์ ํ์ํ๋ ค๊ณ ํฉ๋๋ค. ์์ ์๊ณ ๋ฆฌ์ฆ์ ๋ฐ๋ฅด๋ฉด ํ์ํ ๊ฒ๋ณด๋ค ํ๋ ๋ ๋ง์ ๋ ์ฝ๋๋ฅผ ์ฝ์ด์ผ ํฉ๋๋ค. ์ด "+1"์ด ์๋ฒ์ ๊ตฌํ๋์ง ์์ ๊ฒฝ์ฐ ์ฒซ ๋ฒ์งธ ํ์ด์ง์์๋ 1๋ถํฐ 51๊น์ง, ๋ ๋ฒ์งธ ํ์ด์ง์์๋ 51๋ถํฐ 101๊น์ง์ ๋ ์ฝ๋๋ฅผ ์์ฒญํด์ผ ํฉ๋๋ค. ํ์ด์ง ํฌ๊ธฐ๋ฅผ 51๋ก ์ง์ ํ๊ณ pageIndex๋ฅผ ๋๋ฆฌ๋ฉด ๋ ๋ฒ์งธ ํ์ด์ง๋ 52์์ 102๋ก ๋ฐํ๋ฉ๋๋ค. ๋ฐ๋ผ์ ์ฒซ ๋ฒ์งธ ์ต์ ์์ ๋ค์ ํ์ด์ง๋ก ์ด๋ํ๋ ๋ฒํผ์ ์ ์ ํ๊ฒ ๊ตฌํํ๋ ์ ์ผํ ๋ฐฉ๋ฒ์ ์๋ฒ๊ฐ "์ถ๊ฐ" ์ค์ ๊ต์ ํ๋๋ก ํ๋ ๊ฒ์ธ๋ฐ, ์ด๋ ๋งค์ฐ ์๋ฌต์ ์ธ ๋์์ค๊ฐ ๋ ๊ฒ์ ๋๋ค.
- ์ธ ๋ฒ์งธ ์ต์ ์ ์ ํ ์๋ฏธ๊ฐ ์์ต๋๋ค. ๋๋ถ๋ถ์ ๋ฐ์ดํฐ๋ฒ ์ด์ค์์ ์ฟผ๋ฆฌ๋ฅผ ์คํํ๋ ค๋ฉด ๋ง์ง๋ง ๋ ์ฝ๋์ ์ธ๋ฑ์ค ๋์ ๊ฐ์๋ฅผ ์ ๋ฌํด์ผ ํ๊ธฐ ๋๋ฌธ์ ๋๋ค. endIndex์์ startIndex๋ฅผ ๋นผ๋ ๊ฒ์ ๊ฐ๋จํ ์ฐ์ ์ฐ์ฐ์ผ ์ ์์ง๋ง ์ฌ๊ธฐ์๋ ๋ถํ์ํ ์์ ์ ๋๋ค.
์ด์ "์คํ์ + ์๋"์ ํตํด ํ์ด์ง์ ๊ตฌํํ ๋์ ๋จ์ ์ ์ค๋ช ํด์ผ ํฉ๋๋ค.
- ๊ฐ ํ์ ํ์ด์ง๋ฅผ ๊ฒ์ํ๋ ๊ฒ์ ์ด์ ํ์ด์ง๋ณด๋ค ๋น์ฉ์ด ๋ง์ด ๋ค๊ณ ๋๋ฆฝ๋๋ค. ์๋ํ๋ฉด ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ ์ฌ์ ํ ๊ฒ์ ๋ฐ ์ ๋ ฌ ๊ธฐ์ค์ ๋ฐ๋ผ "์ฒ์๋ถํฐ" ๋ชจ๋ ๋ ์ฝ๋๋ฅผ ๊ฒ์ํ ๋ค์ ์ํ๋ ์กฐ๊ฐ์์ ์ค์งํด์ผ ํ๊ธฐ ๋๋ฌธ์ ๋๋ค.
- ๋ชจ๋ DBMS๊ฐ ์ด ์ ๊ทผ ๋ฐฉ์์ ์ง์ํ ์ ์๋ ๊ฒ์ ์๋๋๋ค.
๋์์ด ์์ง๋ง ๋ถ์์ ํ๊ธฐ๋ ํฉ๋๋ค. ์ด๋ฌํ ์ ๊ทผ ๋ฐฉ์ ์ค ์ฒซ ๋ฒ์งธ๋ "ํค ์ธํธ ํ์ด์ง" ๋๋ "ํ์ ๋ฐฉ๋ฒ"์ด๋ผ๊ณ ํ๋ฉฐ ๋ค์๊ณผ ๊ฐ์ต๋๋ค. ๋ถ๋ถ์ ๋ฐ์ ํ ํ์ด์ง์ ๋ง์ง๋ง ๋ ์ฝ๋์ ์๋ ํ๋ ๊ฐ์ ๊ธฐ์ตํ ๋ค์ ์ด๋ฅผ ์ฌ์ฉํ์ฌ ์ป์ ์ ์์ต๋๋ค. ๋ค์ ๋ถ๋ถ. ์๋ฅผ ๋ค์ด ๋ค์ ์ฟผ๋ฆฌ๋ฅผ ์คํํ์ต๋๋ค.
SELECT * FROM Sales.SalesOrderHeader
ORDER BY OrderDate DESC
OFFSET 0 ROWS
FETCH NEXT 50 ROWS ONLY
๊ทธ๋ฆฌ๊ณ ๋ง์ง๋ง ๋ ์ฝ๋์์๋ ์ฃผ๋ฌธ ๋ ์ง ๊ฐ '2014-06-29'๋ฅผ ์ป์์ต๋๋ค. ๊ทธ๋ฐ ๋ค์ ๋ค์ ํ์ด์ง๋ฅผ ์ป์ผ๋ ค๋ฉด ๋ค์์ ์ํํ์ญ์์ค.
SELECT * FROM Sales.SalesOrderHeader
WHERE OrderDate < '2014-06-29'
ORDER BY OrderDate DESC
OFFSET 0 ROWS
FETCH NEXT 50 ROWS ONLY
๋ฌธ์ ๋ OrderDate๊ฐ ๊ณ ์ ํ์ง ์์ ํ๋์ด๊ณ ์์ ์ง์ ๋ ์กฐ๊ฑด์์ ๋ง์ ํ์ ํ์ด ๋๋ฝ๋ ๊ฐ๋ฅ์ฑ์ด ์๋ค๋ ๊ฒ์ ๋๋ค. ์ด ์ฟผ๋ฆฌ์ ๋ช ํ์ฑ์ ์ถ๊ฐํ๋ ค๋ฉด ์กฐ๊ฑด์ ๊ณ ์ ํ๋๋ฅผ ์ถ๊ฐํด์ผ ํฉ๋๋ค(75074๊ฐ ์ฒซ ๋ฒ์งธ ๋ถ๋ถ์ ๊ธฐ๋ณธ ํค์ ๋ง์ง๋ง ๊ฐ์ด๋ผ๊ณ ๊ฐ์ ).
SELECT * FROM Sales.SalesOrderHeader
WHERE (OrderDate = '2014-06-29' AND SalesOrderID < 75074)
OR (OrderDate < '2014-06-29')
ORDER BY OrderDate DESC, SalesOrderID DESC
OFFSET 0 ROWS
FETCH NEXT 50 ROWS ONLY
์ด ์ต์ ์ ์ฌ๋ฐ๋ฅด๊ฒ ์๋ํ์ง๋ง ์ผ๋ฐ์ ์ผ๋ก ์กฐ๊ฑด์ OR ์ฐ์ฐ์๊ฐ ํฌํจ๋์ด ์์ผ๋ฏ๋ก ์ต์ ํํ๊ธฐ๊ฐ ์ด๋ ต์ต๋๋ค. OrderDate๊ฐ ์ฆ๊ฐํจ์ ๋ฐ๋ผ ๊ธฐ๋ณธ ํค ๊ฐ์ด ์ฆ๊ฐํ๋ ๊ฒฝ์ฐ SalesOrderID๋ฅผ ๊ธฐ์ค์ผ๋ก ํํฐ๋ง ๋จ๊ฒจ๋๋ฉด ์กฐ๊ฑด์ด ๋จ์ํ๋ ์ ์์ต๋๋ค. ๊ทธ๋ฌ๋ ๊ธฐ๋ณธ ํค ๊ฐ๊ณผ ๊ฒฐ๊ณผ๊ฐ ์ ๋ ฌ๋๋ ํ๋ ์ฌ์ด์ ์๊ฒฉํ ์๊ด ๊ด๊ณ๊ฐ ์์ผ๋ฉด ๋๋ถ๋ถ์ DBMS์์๋ ์ด OR์ ํผํ ์ ์์ต๋๋ค. ๋ด๊ฐ ์๋ ์์ธ๋ ํํ ๋น๊ต๋ฅผ ์๋ฒฝํ๊ฒ ์ง์ํ๋ PostgreSQL์ด๋ฉฐ, ์์ ์กฐ๊ฑด์ "WHERE (OrderDate, SalesOrderID) < ('2014-06-29', 75074)"๋ก ์์ฑํ ์ ์์ต๋๋ค. ์ด ๋ ํ๋๊ฐ ํฌํจ๋ ๋ณตํฉ ํค๊ฐ ์ฃผ์ด์ง๋ฉด ์ด์ ๊ฐ์ ์ฟผ๋ฆฌ๋ ๋งค์ฐ ์ฝ์ต๋๋ค.
๋ ๋ฒ์งธ ๋์ฒด ์ ๊ทผ๋ฒ์ ์๋ฅผ ๋ค์ด ๋ค์์์ ์ฐพ์ ์ ์์ต๋๋ค.
๋ณต์กํ ํํฐ๋ง
์์ ์ ๋์ฑ ๋ณต์กํ๊ฒ ๋ง๋ค์ด ๋ณด๊ฒ ์ต๋๋ค. ์จ๋ผ์ธ ์์ ์ ๋ชจ๋ ์ฌ๋์๊ฒ ๋งค์ฐ ์น์ํ ์์ ํจ์ฏ ๊ฒ์์ ๊ตฌํํด์ผ ํ๋ค๋ ์๊ตฌ ์ฌํญ์ด ์๋ค๊ณ ๊ฐ์ ํฉ๋๋ค. ์ฃผ๋ฌธ ํ ์ด๋ธ์ ๊ธฐ๋ฐ์ผ๋ก ํ ์์ ์๋ ์ด ๊ฒฝ์ฐ์๋ ๊ทธ๋ค์ง ์ค๋ช ์ ์ด์ง ์์ผ๋ฏ๋ก AdventureWorks ๋ฐ์ดํฐ๋ฒ ์ด์ค์์ Product ํ ์ด๋ธ๋ก ์ ํํด ๋ณด๊ฒ ์ต๋๋ค.
ํจ์ฏ ๊ฒ์์ ์์ด๋์ด๋ ๋ฌด์์
๋๊น? ์ฌ์ค์ ๊ฐ ํํฐ ์์์ ๋ํด ์ด ๊ธฐ์ค์ ์ถฉ์กฑํ๋ ๋ ์ฝ๋ ์๊ฐ ํ์๋๋ค๋ ๊ฒ์
๋๋ค. ๋ค๋ฅธ ๋ชจ๋ ์นดํ
๊ณ ๋ฆฌ์์ ์ ํ๋ ํํฐ๋ฅผ ๊ณ ๋ คํฉ๋๋ค..
์๋ฅผ ๋ค์ด, ์ด ์์์ ์์ ๊ฑฐ ์นดํ ๊ณ ๋ฆฌ์ ๊ฒ์์ ์์์ ์ ํํ๋ฉด ํ ์ด๋ธ์๋ ๊ฒ์์ ์์ ๊ฑฐ๋ง ํ์๋์ง๋ง ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
- ์นดํ ๊ณ ๋ฆฌ ๊ทธ๋ฃน์ ๊ฐ ๊ธฐ์ค์ ๋ํด ํด๋น ์นดํ ๊ณ ๋ฆฌ์ ์ ํ ์๊ฐ ๊ฒ์์์ผ๋ก ํ์๋ฉ๋๋ค.
- "์์" ๊ทธ๋ฃน์ ๊ฐ ๊ธฐ์ค์ ๋ํด ํด๋น ์์์ ์์ ๊ฑฐ ์๊ฐ ํ์๋ฉ๋๋ค.
๋ค์์ ์ด๋ฌํ ์กฐ๊ฑด์ ๋ํ ๊ฒฐ๊ณผ ์ถ๋ ฅ์ ์์ ๋๋ค.
'์๋ฅ' ์นดํ
๊ณ ๋ฆฌ๋ ์ฒดํฌํ๋ฉด, ์ฌ๊ณ ๊ฐ ์๋ ๊ฒ์์ ์ท๋ ํ์ ํ์๋ฉ๋๋ค. "์์" ์น์
์ ๊ฒ์ ์ ์ ํ ์๋ ์ ์กฐ๊ฑด์ ๋ฐ๋ผ ๋ค์ ๊ณ์ฐ๋๋ฉฐ "์นดํ
๊ณ ๋ฆฌ" ์น์
์์๋ง ์๋ฌด๊ฒ๋ ๋ณ๊ฒฝ๋์ง ์์ต๋๋ค... ์ด๋ฌํ ์๊ฐ ์ผ๋ฐ์ ์ธ ํจ์ฏ ๊ฒ์ ์๊ณ ๋ฆฌ์ฆ์ ์ดํดํ๋ ๋ฐ ์ถฉ๋ถํ๊ธฐ๋ฅผ ๋ฐ๋๋๋ค.
์ด์ ์ด๊ฒ์ด ๊ด๊ณํ ๊ธฐ๋ฐ์์ ์ด๋ป๊ฒ ๊ตฌํ๋ ์ ์๋์ง ์์ํด ๋ด ์๋ค. ์นดํ ๊ณ ๋ฆฌ ๋ฐ ์์๊ณผ ๊ฐ์ ๊ฐ ๊ธฐ์ค ๊ทธ๋ฃน์๋ ๋ณ๋์ ์ฟผ๋ฆฌ๊ฐ ํ์ํฉ๋๋ค.
SELECT pc.ProductCategoryID, pc.Name, COUNT(1) FROM Production.Product p
INNER JOIN Production.ProductSubcategory ps ON p.ProductSubcategoryID = ps.ProductSubcategoryID
INNER JOIN Production.ProductCategory pc ON ps.ProductCategoryID = pc.ProductCategoryID
WHERE p.Color = 'Black'
GROUP BY pc.ProductCategoryID, pc.Name
ORDER BY COUNT(1) DESC
SELECT Color, COUNT(1) FROM Production.Product p
INNER JOIN Production.ProductSubcategory ps ON p.ProductSubcategoryID = ps.ProductSubcategoryID
WHERE ps.ProductCategoryID = 1 --Bikes
GROUP BY Color
ORDER BY COUNT(1) DESC
์ด ์๋ฃจ์
์ ์ด๋ค ๋ฌธ์ ๊ฐ ์๋์? ๋งค์ฐ ๊ฐ๋จํฉ๋๋ค. ํ์ฅ์ด ์ ๋์ง ์์ต๋๋ค. ๊ฐ ํํฐ ์น์
์๋ ์๋์ ๊ณ์ฐํ๊ธฐ ์ํ ๋ณ๋์ ์ฟผ๋ฆฌ๊ฐ ํ์ํ๋ฉฐ ์ด๋ฌํ ์ฟผ๋ฆฌ๋ ๊ฐ์ฅ ์ฝ์ง ์์ต๋๋ค. ์จ๋ผ์ธ ์์ ์์๋ ์ผ๋ถ ์นดํ
๊ณ ๋ฆฌ์ ์์ญ ๊ฐ์ ํํฐ ์น์
์ด ์์ ์ ์์ผ๋ฉฐ ์ด๋ ์ฌ๊ฐํ ์ฑ๋ฅ ๋ฌธ์ ๊ฐ ๋ ์ ์์ต๋๋ค.
์ผ๋ฐ์ ์ผ๋ก ์ด๋ฌํ ์ง์ ํ์๋ ๋ค์๊ณผ ๊ฐ์ ๋ช ๊ฐ์ง ํด๊ฒฐ์ฑ ์ด ์ ๊ณต๋ฉ๋๋ค.
- ๋ชจ๋ ์๋ ๊ฐ์๋ฅผ ํ๋์ ์ฟผ๋ฆฌ๋ก ๊ฒฐํฉํฉ๋๋ค. ๊ธฐ์ ์ ์ผ๋ก ์ด๋ UNION ํค์๋๋ฅผ ์ฌ์ฉํ์ฌ ๊ฐ๋ฅํ์ง๋ง ์ฑ๋ฅ์ ํฐ ๋์์ด ๋์ง ์์ต๋๋ค. ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ ์ฌ์ ํ ๊ฐ ์กฐ๊ฐ์ ์ฒ์๋ถํฐ ์คํํด์ผ ํฉ๋๋ค.
- ์บ์ ์๋. ์ด๊ฒ์ ๋ด๊ฐ ๋ฌธ์ ๋ฅผ ์ค๋ช ํ ๋๋ง๋ค ๊ฑฐ์ ์ ์๋ฉ๋๋ค. ์ฃผ์ํ ์ ์ ์ด๊ฒ์ด ์ผ๋ฐ์ ์ผ๋ก ๋ถ๊ฐ๋ฅํ๋ค๋ ๊ฒ์ ๋๋ค. 10๊ฐ์ "ํจ์ฏ"์ด ์๊ณ ๊ฐ ํจ์ฏ์๋ 5๊ฐ์ ๊ฐ์ด ์๋ค๊ณ ๊ฐ์ ํด ๋ณด๊ฒ ์ต๋๋ค. ์ด๋ ๋์ผํ ์จ๋ผ์ธ ์์ ์์ ๋ณผ ์ ์๋ ๊ฒ๊ณผ ๋น๊ตํ๋ฉด ๋งค์ฐ "๋ณดํต" ์ํฉ์ ๋๋ค. ํ๋์ ํจ์ฏ ์์๋ฅผ ์ ํํ๋ฉด ๋ค๋ฅธ 9๊ฐ ์์์ ์๋์ ์ํฅ์ ๋ฏธ์นฉ๋๋ค. ์ฆ, ๊ฐ ๊ธฐ์ค ์กฐํฉ์ ๋ํด ์๋์ ๋ค๋ฅผ ์ ์์ต๋๋ค. ์ด ์์์๋ ์ฌ์ฉ์๊ฐ ์ ํํ ์ ์๋ ๊ธฐ์ค์ด ์ด 50๊ฐ์ด๋ฏ๋ก ๊ฐ๋ฅํ ์กฐํฉ์ 250๊ฐ์ ๋๋ค. ์ด๋ฌํ ๋ฐ์ดํฐ ๋ฐฐ์ด์ ์ฑ์ธ ๋ฉ๋ชจ๋ฆฌ๋ ์๊ฐ์ด ๋ถ์กฑํฉ๋๋ค. ์ฌ๊ธฐ์์ ๋ชจ๋ ์กฐํฉ์ด ์ค์ ๋ ์๋๋ฉฐ ์ฌ์ฉ์๊ฐ 5~10๊ฐ ์ด์์ ๊ธฐ์ค์ ๊ฑฐ์ ์ ํํ์ง ์๋๋ค๊ณ ์ด์๋ฅผ ์ ๊ธฐํ๊ณ ๋งํ ์ ์์ต๋๋ค. ์, ์ง์ฐ ๋ก๋ฉ์ ์ํํ๊ณ ์ ํํ ํญ๋ชฉ๋ง ์บ์ํ๋ ๊ฒ์ด ๊ฐ๋ฅํฉ๋๋ค. ๊ทธ๋ฌ๋ ์ ํ ํญ๋ชฉ์ด ๋ง์์๋ก ์บ์์ ํจ์จ์ฑ์ด ๋จ์ด์ง๊ณ ์๋ต ์๊ฐ ๋ฌธ์ ๊ฐ ๋ ๋์ ๋๊ฒ ๋ฉ๋๋ค(ํนํ ๋ค์๊ณผ ๊ฐ์ ๊ฒฝ์ฐ). ๋ฐ์ดํฐ ์ธํธ๋ ์ ๊ธฐ์ ์ผ๋ก ๋ณ๊ฒฝ๋ฉ๋๋ค).
๋คํ์ค๋ฝ๊ฒ๋ ์ด๋ฌํ ๋ฌธ์ ๋ ์ค๋ซ๋์ ๋์ฉ๋ ๋ฐ์ดํฐ์์ ์์ธก ๊ฐ๋ฅํ๊ฒ ์๋ํ๋ ๋งค์ฐ ํจ๊ณผ์ ์ธ ์๋ฃจ์ ์ ์ ๊ณตํด ์์ต๋๋ค. ์ด๋ฌํ ์ต์ ์ ๊ฒฝ์ฐ ํจ์ฏ ์ฌ๊ณ์ฐ๊ณผ ๊ฒฐ๊ณผ ํ์ด์ง ์์ ์ ์๋ฒ์ ๋ํ ๋ ๊ฐ์ ๋ณ๋ ฌ ํธ์ถ๋ก ๋๋๊ณ ํจ์ฏ๋ณ๋ก ๋ฐ์ดํฐ๋ฅผ ๋ก๋ํ๋ ๊ฒ์ด ๋์คํ๋ ์ด๋ฅผ "๋ฐฉํดํ์ง ์๋" ๋ฐฉ์์ผ๋ก ์ฌ์ฉ์ ์ธํฐํ์ด์ค๋ฅผ ๊ตฌ์ฑํ๋ ๊ฒ์ด ํฉ๋ฆฌ์ ์ ๋๋ค. ๊ฒ์ ๊ฒฐ๊ณผ.
- ๊ฐ๋ฅํ ํ ๋๋ฌผ๊ฒ "ํจ์ฏ"์ ์์ ํ ์ฌ๊ณ์ฐ์ ํธ์ถํ์ญ์์ค. ์๋ฅผ ๋ค์ด ๊ฒ์ ๊ธฐ์ค์ด ๋ณ๊ฒฝ๋ ๋๋ง๋ค ๋ชจ๋ ๊ฒ์ ๋ค์ ๊ณ์ฐํ์ง ๋ง๊ณ ๋์ ํ์ฌ ์กฐ๊ฑด๊ณผ ์ผ์นํ๋ ์ด ๊ฒฐ๊ณผ ์๋ฅผ ์ฐพ์ ์ฌ์ฉ์์๊ฒ "1425๊ฐ์ ๋ ์ฝ๋๋ฅผ ์ฐพ์์ต๋๋ค. ํ์ํ์๊ฒ ์ต๋๊น?"๋ผ๋ ๋ฉ์์ง๋ฅผ ํ์ํ๋๋ก ์์ฒญํฉ๋๋ค. ์ฌ์ฉ์๋ ๊ณ์ํด์ ๊ฒ์์ด๋ฅผ ๋ณ๊ฒฝํ๊ฑฐ๋ "ํ์" ๋ฒํผ์ ํด๋ฆญํ ์ ์์ต๋๋ค. ๋ ๋ฒ์งธ ๊ฒฝ์ฐ์๋ง ๊ฒฐ๊ณผ๋ฅผ ์ป๊ณ ๋ชจ๋ "ํจ์ฏ"์ ์๋์ ๋ค์ ๊ณ์ฐํ๊ธฐ ์ํ ๋ชจ๋ ์์ฒญ์ด ์คํ๋ฉ๋๋ค. ์ด ๊ฒฝ์ฐ ์ฝ๊ฒ ์ ์ ์๋ฏ์ด ์ด ๊ฒฐ๊ณผ ์์ ์ต์ ํ๋ฅผ ์ป๊ธฐ ์ํ ์์ฒญ์ ์ฒ๋ฆฌํด์ผ ํฉ๋๋ค. ์ด ๋ฐฉ๋ฒ์ ๋ง์ ์๊ท๋ชจ ์จ๋ผ์ธ ์์ ์์ ์ฐพ์ ์ ์์ต๋๋ค. ๋ถ๋ช ํ ์ด๊ฒ์ด ์ด ๋ฌธ์ ์ ๋ํ ๋ง๋ณํต์น์ฝ์ ์๋์ง๋ง ๊ฐ๋จํ ๊ฒฝ์ฐ์๋ ์ข์ ์ ์ถฉ์์ด ๋ ์ ์์ต๋๋ค.
- ๊ฒ์ ์์ง์ ์ฌ์ฉํ์ฌ Solr, ElasticSearch, Sphinx ๋ฑ๊ณผ ๊ฐ์ ๊ฒฐ๊ณผ๋ฅผ ์ฐพ๊ณ ์ธก๋ฉด์ ๊ณ์ฐํฉ๋๋ค. ์ด๋ค ๋ชจ๋๋ "ํจ์ฏ"์ ๊ตฌ์ถํ๋๋ก ์ค๊ณ๋์์ผ๋ฉฐ ๋ฐ์ ๋ ์ธ๋ฑ์ค๋ก ์ธํด ์ด๋ฅผ ๋งค์ฐ ํจ์จ์ ์ผ๋ก ์ํํฉ๋๋ค. ๊ฒ์ ์์ง์ ์๋ ๋ฐฉ์, ์ด๋ฌํ ๊ฒฝ์ฐ ๋ฒ์ฉ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ณด๋ค ๋ ํจ๊ณผ์ ์ธ ์ด์ , ๊ดํ ๋ฐ ํจ์ ์ ๋ฌด์์
๋๊น? ์ด๊ฒ์ ๋ณ๋์ ๊ธฐ์ฌ์ ๋ํ ์ฃผ์ ์
๋๋ค. ์ฌ๊ธฐ์๋ ๊ฒ์ ์์ง์ด ๊ธฐ๋ณธ ๋ฐ์ดํฐ ์ ์ฅ์๋ฅผ ๋์ฒดํ ์ ์์ผ๋ฉฐ ์ถ๊ฐ๋ก ์ฌ์ฉ๋๋ค๋ ์ฌ์ค์ ์ฃผ๋ชฉํ๊ณ ์ถ์ต๋๋ค. ๊ฒ์๊ณผ ๊ด๋ จ๋ ๊ธฐ๋ณธ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๋ชจ๋ ๋ณ๊ฒฝ ์ฌํญ์ ๊ฒ์ ์์ธ์ ๋๊ธฐํ๋ฉ๋๋ค. ๊ฒ์ ์์ง์ ์ผ๋ฐ์ ์ผ๋ก ๊ฒ์ ์์ง๊ณผ๋ง ์ํธ ์์ฉํ๋ฉฐ ๊ธฐ๋ณธ ๋ฐ์ดํฐ๋ฒ ์ด์ค์๋ ์ก์ธ์คํ์ง ์์ต๋๋ค. ์ฌ๊ธฐ์ ๊ฐ์ฅ ์ค์ํ ์ ์ค ํ๋๋ ์ด ๋๊ธฐํ๋ฅผ ์์ ์ ์ผ๋ก ๊ตฌ์ฑํ๋ ๋ฐฉ๋ฒ์
๋๋ค. ๊ทธ๊ฒ์ ๋ชจ๋ "๋ฐ์ ์๊ฐ" ์๊ตฌ ์ฌํญ์ ๋ฐ๋ผ ๋ค๋ฆ
๋๋ค. ๊ธฐ๋ณธ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๋ณ๊ฒฝ ์ฌํญ๊ณผ ๊ฒ์ ์ "ํ์" ์ฌ์ด์ ์๊ฐ์ด ์ค์ํ์ง ์์ ๊ฒฝ์ฐ ์ต๊ทผ ๋ณ๊ฒฝ๋ ๊ธฐ๋ก์ ๋ช ๋ถ๋ง๋ค ๊ฒ์ํ๊ณ ์์ธํํ๋ ์๋น์ค๋ฅผ ๋ง๋ค ์ ์์ต๋๋ค. ๊ฐ๋ฅํ ๊ฐ์ฅ ์งง์ ์๋ต ์๊ฐ์ ์ํ๋ค๋ฉด ๋ค์๊ณผ ๊ฐ์ ๊ฒ์ ๊ตฌํํ ์ ์์ต๋๋ค.
๊ฑฐ๋ ๋ฐ์ ํจ ๊ฒ์ ์๋น์ค์ ์ ๋ฐ์ดํธ๋ฅผ ๋ณด๋ ๋๋ค.
์กฐ์ฌ ๊ฒฐ๊ณผ
- ์๋ฒ ์ธก ํ์ด์ง์ ๊ตฌํํ๋ ๊ฒ์ ์๋นํ ๋ณต์กํ๋ฉฐ ๋น ๋ฅด๊ฒ ์ฑ์ฅํ๊ฑฐ๋ ๋จ์ํ ๋๊ท๋ชจ ๋ฐ์ดํฐ ์ธํธ์๋ง ์ ํฉํฉ๋๋ค. "ํฐ" ๋๋ "๋น ๋ฅธ ์ฑ์ฅ"์ ํ๊ฐํ๋ ๋ฐฉ๋ฒ์ ๋ํ ์ ํํ ๋ฐฉ๋ฒ์ ์์ง๋ง ๋ค์ ์ ๊ทผ ๋ฐฉ์์ ๋ฐ๋ฆ
๋๋ค.
- ์๋ฒ ์๊ฐ๊ณผ ๋คํธ์ํฌ ์ ์ก์ ๊ณ ๋ คํ์ฌ ์์ ํ ๋ฐ์ดํฐ ์์ง์ ์์ ํ์ฌ ์ผ๋ฐ์ ์ผ๋ก ์ฑ๋ฅ ์๊ตฌ ์ฌํญ์ ๋ง๋ ๊ฒฝ์ฐ ์๋ฒ ์ธก์์ ํ์ด์ง์ ๊ตฌํํ๋ ๊ฒ์ ์๋ฏธ๊ฐ ์์ต๋๋ค.
- ๋ฐ์ดํฐ๊ฐ ์ ์ง๋ง ์์ง๋๋ ๋ฐ์ดํฐ๊ฐ ์ง์์ ์ผ๋ก ๋์ด๋๊ณ ์๊ธฐ ๋๋ฌธ์ ๊ฐ๊น์ด ์์ผ ๋ด์ ์ฑ๋ฅ ๋ฌธ์ ๊ฐ ์์ ๊ฒ์ผ๋ก ์์๋๋ ์ํฉ์ด ์์ ์ ์์ต๋๋ค. ๋ฏธ๋์ ์ผ๋ถ ๋ฐ์ดํฐ ์งํฉ์ด ๋ ์ด์ ์ด์ ์ง์ ์ ์ถฉ์กฑํ์ง ๋ชปํ ๊ฒฝ์ฐ ์ฆ์ ํ์ด์ง์ ์์ํ๋ ๊ฒ์ด ์ข์ต๋๋ค.
- ์ ์ฒด ๊ฒฐ๊ณผ ์ ๋๋ ํ์ด์ง ๋ฒํธ ํ์์ ๋ํ ๋น์ฆ๋์ค ์ธก์ ์๊ฒฉํ ์๊ตฌ ์ฌํญ์ด ์๊ณ ์์คํ ์ ๊ฒ์ ์์ง์ด ์๋ ๊ฒฝ์ฐ ์ด๋ฌํ ์ฌํญ์ ๊ตฌํํ์ง ์๊ณ ์ต์ #2๋ฅผ ๊ณ ๋ คํ๋ ๊ฒ์ด ์ข์ต๋๋ค.
- ํจ์ฏ ๊ฒ์์ ๋ํ ๋ช
ํํ ์๊ตฌ ์ฌํญ์ด ์๋ ๊ฒฝ์ฐ ์ฑ๋ฅ ์ ํ ์์ด ๋ ๊ฐ์ง ์ต์
์ด ์์ต๋๋ค.
- ๊ฒ์ ๊ธฐ์ค์ด ๋ณ๊ฒฝ๋ ๋๋ง๋ค ๋ชจ๋ ์๋์ ๋ค์ ๊ณ์ฐํ์ง ๋ง์ญ์์ค.
- Solr, ElasticSearch, Sphinx ๋ฑ๊ณผ ๊ฐ์ ๊ฒ์ ์์ง์ ์ฌ์ฉํ์ญ์์ค. ๊ทธ๋ฌ๋ ์ด๋ ๊ธฐ๋ณธ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ๋์ฒดํ ์ ์์ผ๋ฉฐ ๊ฒ์ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด ๊ธฐ๋ณธ ์ ์ฅ์์ ์ถ๊ฐ๋ก ์ฌ์ฉํด์ผ ํ๋ค๋ ์ ์ ์ดํดํด์ผ ํฉ๋๋ค.
- ๋ํ ํจ์ฏ ๊ฒ์์ ๊ฒฝ์ฐ ๊ฒ์ ๊ฒฐ๊ณผ ํ์ด์ง ๊ฒ์๊ณผ ๊ณ์ฐ์ ๋ ๊ฐ์ ๋ณ๋ ฌ ์์ฒญ์ผ๋ก ๋ถํ ํ๋ ๊ฒ์ด ํฉ๋ฆฌ์ ์ ๋๋ค. ์๋์ ๊ณ์ฐํ๋ ๊ฒ์ ๊ฒฐ๊ณผ๋ฅผ ์ป๋ ๊ฒ๋ณด๋ค ๋ ์ค๋ ๊ฑธ๋ฆด ์ ์์ง๋ง ๊ฒฐ๊ณผ๋ ์ฌ์ฉ์์๊ฒ ๋ ์ค์ํฉ๋๋ค.
- ๊ฒ์์ ์ํด SQL ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ ์ด ๋ถ๋ถ๊ณผ ๊ด๋ จ๋ ๋ชจ๋ ์ฝ๋ ๋ณ๊ฒฝ์ ์ ์ ํ ๋ฐ์ดํฐ ์(๋ผ์ด๋ธ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๋ณผ๋ฅจ ์ด๊ณผ)์ ๋ํ ์ฑ๋ฅ์ ์ ํ ์คํธํด์ผ ํฉ๋๋ค. ๋ํ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๋ชจ๋ ์ธ์คํด์ค, ํนํ "๋ผ์ด๋ธ" ์ธ์คํด์ค์์ ์ฟผ๋ฆฌ ์คํ ์๊ฐ์ ๋ชจ๋ํฐ๋งํ๋ ๊ฒ์ด ์ข์ต๋๋ค. ๊ฐ๋ฐ ๋จ๊ณ์์๋ ์ฟผ๋ฆฌ ๊ณํ์ผ๋ก ๋ชจ๋ ๊ฒ์ด ๊ด์ฐฎ์๋๋ผ๋ ๋ฐ์ดํฐ์ ์์ด ์ฆ๊ฐํจ์ ๋ฐ๋ผ ์ํฉ์ด ๋์ ๋๊ฒ ๋ฐ๋ ์ ์์ต๋๋ค.
์ถ์ฒ : habr.com