๊ฒ€์ƒ‰๊ฒฐ๊ณผ ์ถœ๋ ฅ ๋ฐ ์„ฑ๋Šฅ ๋ฌธ์ œ

์šฐ๋ฆฌ์—๊ฒŒ ์ต์ˆ™ํ•œ ๋ชจ๋“  ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์ผ๋ฐ˜์ ์ธ ์‹œ๋‚˜๋ฆฌ์˜ค ์ค‘ ํ•˜๋‚˜๋Š” ํŠน์ • ๊ธฐ์ค€์— ๋”ฐ๋ผ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฒ€์ƒ‰ํ•˜๊ณ  ์ด๋ฅผ ์ฝ๊ธฐ ์‰ฌ์šด ํ˜•์‹์œผ๋กœ ํ‘œ์‹œํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ •๋ ฌ, ๊ทธ๋ฃนํ™” ๋ฐ ํŽ˜์ด์ง•์„ ์œ„ํ•œ ์ถ”๊ฐ€ ์˜ต์…˜์ด ์žˆ์„ ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋ก ์ ์œผ๋กœ ์ž‘์—…์€ ์‚ฌ์†Œํ•œ ๊ฒƒ์ด์ง€๋งŒ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•  ๋•Œ ๋งŽ์€ ๊ฐœ๋ฐœ์ž๊ฐ€ ๋งŽ์€ ์‹ค์ˆ˜๋ฅผ ์ €์ง€๋ฅด๋ฉฐ ๋‚˜์ค‘์— ์ƒ์‚ฐ์„ฑ์ด ์ €ํ•˜๋ฉ๋‹ˆ๋‹ค. ์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•œ ๋‹ค์–‘ํ•œ ์˜ต์…˜์„ ๊ณ ๋ คํ•˜๊ณ  ๊ฐ€์žฅ ํšจ๊ณผ์ ์ธ ๊ตฌํ˜„์„ ์„ ํƒํ•˜๊ธฐ ์œ„ํ•œ ๊ถŒ์žฅ ์‚ฌํ•ญ์„ ์ž‘์„ฑํ•ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

๊ฒ€์ƒ‰๊ฒฐ๊ณผ ์ถœ๋ ฅ ๋ฐ ์„ฑ๋Šฅ ๋ฌธ์ œ

ํŽ˜์ด์ง• ์˜ต์…˜ #1

๋งˆ์Œ์†์— ๋– ์˜ค๋ฅด๋Š” ๊ฐ€์žฅ ๊ฐ„๋‹จํ•œ ์˜ต์…˜์€ ๊ฐ€์žฅ ๊ณ ์ „์ ์ธ ํ˜•ํƒœ๋กœ ๊ฒ€์ƒ‰ ๊ฒฐ๊ณผ๋ฅผ ํŽ˜์ด์ง€๋ณ„๋กœ ํ‘œ์‹œํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๊ฒ€์ƒ‰๊ฒฐ๊ณผ ์ถœ๋ ฅ ๋ฐ ์„ฑ๋Šฅ ๋ฌธ์ œ
์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ๊ด€๊ณ„ํ˜• ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค๊ณ  ๊ฐ€์ •ํ•ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. ์ด ๊ฒฝ์šฐ ์ด ํ˜•์‹์œผ๋กœ ์ •๋ณด๋ฅผ ํ‘œ์‹œํ•˜๋ ค๋ฉด ๋‘ ๊ฐ€์ง€ SQL ์ฟผ๋ฆฌ๋ฅผ ์‹คํ–‰ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

  • ํ˜„์žฌ ํŽ˜์ด์ง€์— ๋Œ€ํ•œ ํ–‰์„ ๊ฐ€์ ธ์˜ต๋‹ˆ๋‹ค.
  • ๊ฒ€์ƒ‰ ๊ธฐ์ค€์— ํ•ด๋‹นํ•˜๋Š” ์ด ์ค„ ์ˆ˜๋ฅผ ๊ณ„์‚ฐํ•ฉ๋‹ˆ๋‹ค. ์ด๋Š” ํŽ˜์ด์ง€๋ฅผ ํ‘œ์‹œํ•˜๋Š” ๋ฐ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

ํ…Œ์ŠคํŠธ MS SQL ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ์˜ˆ๋กœ ๋“ค์–ด ์ฒซ ๋ฒˆ์งธ ์ฟผ๋ฆฌ๋ฅผ ์‚ดํŽด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. ์–ด๋“œ๋ฒค์ฒ˜์›์Šค 2016๋…„ ์„œ๋ฒ„์šฉ. ์ด๋ฅผ ์œ„ํ•ด Sales.SalesOrderHeader ํ…Œ์ด๋ธ”์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

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)"๋กœ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ๋‘ ํ•„๋“œ๊ฐ€ ํฌํ•จ๋œ ๋ณตํ•ฉ ํ‚ค๊ฐ€ ์ฃผ์–ด์ง€๋ฉด ์ด์™€ ๊ฐ™์€ ์ฟผ๋ฆฌ๋Š” ๋งค์šฐ ์‰ฝ์Šต๋‹ˆ๋‹ค.

๋‘ ๋ฒˆ์งธ ๋Œ€์ฒด ์ ‘๊ทผ๋ฒ•์€ ์˜ˆ๋ฅผ ๋“ค์–ด ๋‹ค์Œ์—์„œ ์ฐพ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ElasticSearch ์Šคํฌ๋กค API ๋˜๋Š” ์ฝ”์Šค๋ชจ์Šค DB โ€” ์š”์ฒญ์ด ๋ฐ์ดํ„ฐ ์™ธ์— ๋ฐ์ดํ„ฐ์˜ ๋‹ค์Œ ๋ถ€๋ถ„์„ ๊ฐ€์ ธ์˜ฌ ์ˆ˜ ์žˆ๋Š” ํŠน์ˆ˜ ์‹๋ณ„์ž๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋Š” ๊ฒฝ์šฐ. ์ด ์‹๋ณ„์ž์˜ ์ˆ˜๋ช…์ด ๋ฌด์ œํ•œ์ธ ๊ฒฝ์šฐ(Comsos DB์—์„œ์™€ ๊ฐ™์ด) ์ด๋Š” ํŽ˜์ด์ง€ ๊ฐ„ ์ˆœ์ฐจ์  ์ „ํ™˜์„ ์‚ฌ์šฉํ•˜์—ฌ ํŽ˜์ด์ง•์„ ๊ตฌํ˜„ํ•˜๋Š” ์ข‹์€ ๋ฐฉ๋ฒ•์ž…๋‹ˆ๋‹ค(์œ„์—์„œ ์–ธ๊ธ‰ํ•œ ์˜ต์…˜ #2). ๊ฐ€๋Šฅํ•œ ๋‹จ์ : ๋ชจ๋“  DBMS์—์„œ ์ง€์›๋˜์ง€๋Š” ์•Š์Šต๋‹ˆ๋‹ค. ๊ฒฐ๊ณผ์ ์ธ ๋‹ค์Œ ์ฒญํฌ ์‹๋ณ„์ž๋Š” ์ˆ˜๋ช…์ด ์ œํ•œ๋  ์ˆ˜ ์žˆ์œผ๋ฉฐ ์ด๋Š” ์ผ๋ฐ˜์ ์œผ๋กœ ์‚ฌ์šฉ์ž ์ƒํ˜ธ ์ž‘์šฉ(์˜ˆ: ElasticSearch ์Šคํฌ๋กค API)์„ ๊ตฌํ˜„ํ•˜๋Š” ๋ฐ ์ ํ•ฉํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

๋ณต์žกํ•œ ํ•„ํ„ฐ๋ง

์ž‘์—…์„ ๋”์šฑ ๋ณต์žกํ•˜๊ฒŒ ๋งŒ๋“ค์–ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. ์˜จ๋ผ์ธ ์ƒ์ ์˜ ๋ชจ๋“  ์‚ฌ๋žŒ์—๊ฒŒ ๋งค์šฐ ์นœ์ˆ™ํ•œ ์†Œ์œ„ ํŒจ์‹ฏ ๊ฒ€์ƒ‰์„ ๊ตฌํ˜„ํ•ด์•ผ ํ•œ๋‹ค๋Š” ์š”๊ตฌ ์‚ฌํ•ญ์ด ์žˆ๋‹ค๊ณ  ๊ฐ€์ •ํ•ฉ๋‹ˆ๋‹ค. ์ฃผ๋ฌธ ํ…Œ์ด๋ธ”์„ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•œ ์œ„์˜ ์˜ˆ๋Š” ์ด ๊ฒฝ์šฐ์—๋Š” ๊ทธ๋‹ค์ง€ ์„ค๋ช…์ ์ด์ง€ ์•Š์œผ๋ฏ€๋กœ 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 ๋“ฑ๊ณผ ๊ฐ™์€ ๊ฒฐ๊ณผ๋ฅผ ์ฐพ๊ณ  ์ธก๋ฉด์„ ๊ณ„์‚ฐํ•ฉ๋‹ˆ๋‹ค. ์ด๋“ค ๋ชจ๋‘๋Š” "ํŒจ์‹ฏ"์„ ๊ตฌ์ถ•ํ•˜๋„๋ก ์„ค๊ณ„๋˜์—ˆ์œผ๋ฉฐ ๋ฐ˜์ „๋œ ์ธ๋ฑ์Šค๋กœ ์ธํ•ด ์ด๋ฅผ ๋งค์šฐ ํšจ์œจ์ ์œผ๋กœ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค. ๊ฒ€์ƒ‰ ์—”์ง„์˜ ์ž‘๋™ ๋ฐฉ์‹, ์ด๋Ÿฌํ•œ ๊ฒฝ์šฐ ๋ฒ”์šฉ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ณด๋‹ค ๋” ํšจ๊ณผ์ ์ธ ์ด์œ , ๊ด€ํ–‰ ๋ฐ ํ•จ์ •์€ ๋ฌด์—‡์ž…๋‹ˆ๊นŒ? ์ด๊ฒƒ์€ ๋ณ„๋„์˜ ๊ธฐ์‚ฌ์— ๋Œ€ํ•œ ์ฃผ์ œ์ž…๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์„œ๋Š” ๊ฒ€์ƒ‰ ์—”์ง„์ด ๊ธฐ๋ณธ ๋ฐ์ดํ„ฐ ์ €์žฅ์†Œ๋ฅผ ๋Œ€์ฒดํ•  ์ˆ˜ ์—†์œผ๋ฉฐ ์ถ”๊ฐ€๋กœ ์‚ฌ์šฉ๋œ๋‹ค๋Š” ์‚ฌ์‹ค์— ์ฃผ๋ชฉํ•˜๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค. ๊ฒ€์ƒ‰๊ณผ ๊ด€๋ จ๋œ ๊ธฐ๋ณธ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ ๋ชจ๋“  ๋ณ€๊ฒฝ ์‚ฌํ•ญ์€ ๊ฒ€์ƒ‰ ์ƒ‰์ธ์— ๋™๊ธฐํ™”๋ฉ๋‹ˆ๋‹ค. ๊ฒ€์ƒ‰ ์—”์ง„์€ ์ผ๋ฐ˜์ ์œผ๋กœ ๊ฒ€์ƒ‰ ์—”์ง„๊ณผ๋งŒ ์ƒํ˜ธ ์ž‘์šฉํ•˜๋ฉฐ ๊ธฐ๋ณธ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์—๋Š” ์•ก์„ธ์Šคํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์„œ ๊ฐ€์žฅ ์ค‘์š”ํ•œ ์  ์ค‘ ํ•˜๋‚˜๋Š” ์ด ๋™๊ธฐํ™”๋ฅผ ์•ˆ์ •์ ์œผ๋กœ ๊ตฌ์„ฑํ•˜๋Š” ๋ฐฉ๋ฒ•์ž…๋‹ˆ๋‹ค. ๊ทธ๊ฒƒ์€ ๋ชจ๋‘ "๋ฐ˜์‘ ์‹œ๊ฐ„" ์š”๊ตฌ ์‚ฌํ•ญ์— ๋”ฐ๋ผ ๋‹ค๋ฆ…๋‹ˆ๋‹ค. ๊ธฐ๋ณธ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ ๋ณ€๊ฒฝ ์‚ฌํ•ญ๊ณผ ๊ฒ€์ƒ‰ ์‹œ "ํ‘œ์‹œ" ์‚ฌ์ด์˜ ์‹œ๊ฐ„์ด ์ค‘์š”ํ•˜์ง€ ์•Š์€ ๊ฒฝ์šฐ ์ตœ๊ทผ ๋ณ€๊ฒฝ๋œ ๊ธฐ๋ก์„ ๋ช‡ ๋ถ„๋งˆ๋‹ค ๊ฒ€์ƒ‰ํ•˜๊ณ  ์ƒ‰์ธํ™”ํ•˜๋Š” ์„œ๋น„์Šค๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ฐ€๋Šฅํ•œ ๊ฐ€์žฅ ์งง์€ ์‘๋‹ต ์‹œ๊ฐ„์„ ์›ํ•œ๋‹ค๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๊ฒƒ์„ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ฑฐ๋ž˜ ๋ฐœ์‹ ํ•จ ๊ฒ€์ƒ‰ ์„œ๋น„์Šค์— ์—…๋ฐ์ดํŠธ๋ฅผ ๋ณด๋ƒ…๋‹ˆ๋‹ค.

์กฐ์‚ฌ ๊ฒฐ๊ณผ

  1. ์„œ๋ฒ„ ์ธก ํŽ˜์ด์ง•์„ ๊ตฌํ˜„ํ•˜๋Š” ๊ฒƒ์€ ์ƒ๋‹นํžˆ ๋ณต์žกํ•˜๋ฉฐ ๋น ๋ฅด๊ฒŒ ์„ฑ์žฅํ•˜๊ฑฐ๋‚˜ ๋‹จ์ˆœํžˆ ๋Œ€๊ทœ๋ชจ ๋ฐ์ดํ„ฐ ์„ธํŠธ์—๋งŒ ์ ํ•ฉํ•ฉ๋‹ˆ๋‹ค. "ํฐ" ๋˜๋Š” "๋น ๋ฅธ ์„ฑ์žฅ"์„ ํ‰๊ฐ€ํ•˜๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•œ ์ •ํ™•ํ•œ ๋ฐฉ๋ฒ•์€ ์—†์ง€๋งŒ ๋‹ค์Œ ์ ‘๊ทผ ๋ฐฉ์‹์„ ๋”ฐ๋ฆ…๋‹ˆ๋‹ค.
    • ์„œ๋ฒ„ ์‹œ๊ฐ„๊ณผ ๋„คํŠธ์›Œํฌ ์ „์†ก์„ ๊ณ ๋ คํ•˜์—ฌ ์™„์ „ํ•œ ๋ฐ์ดํ„ฐ ์ˆ˜์ง‘์„ ์ˆ˜์‹ ํ•˜์—ฌ ์ผ๋ฐ˜์ ์œผ๋กœ ์„ฑ๋Šฅ ์š”๊ตฌ ์‚ฌํ•ญ์— ๋งž๋Š” ๊ฒฝ์šฐ ์„œ๋ฒ„ ์ธก์—์„œ ํŽ˜์ด์ง•์„ ๊ตฌํ˜„ํ•˜๋Š” ๊ฒƒ์€ ์˜๋ฏธ๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค.
    • ๋ฐ์ดํ„ฐ๊ฐ€ ์ ์ง€๋งŒ ์ˆ˜์ง‘๋˜๋Š” ๋ฐ์ดํ„ฐ๊ฐ€ ์ง€์†์ ์œผ๋กœ ๋Š˜์–ด๋‚˜๊ณ  ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ๊ฐ€๊นŒ์šด ์‹œ์ผ ๋‚ด์— ์„ฑ๋Šฅ ๋ฌธ์ œ๊ฐ€ ์—†์„ ๊ฒƒ์œผ๋กœ ์˜ˆ์ƒ๋˜๋Š” ์ƒํ™ฉ์ด ์žˆ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ฏธ๋ž˜์˜ ์ผ๋ถ€ ๋ฐ์ดํ„ฐ ์ง‘ํ•ฉ์ด ๋” ์ด์ƒ ์ด์ „ ์ง€์ ์„ ์ถฉ์กฑํ•˜์ง€ ๋ชปํ•  ๊ฒฝ์šฐ ์ฆ‰์‹œ ํŽ˜์ด์ง•์„ ์‹œ์ž‘ํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค.
  2. ์ „์ฒด ๊ฒฐ๊ณผ ์ˆ˜ ๋˜๋Š” ํŽ˜์ด์ง€ ๋ฒˆํ˜ธ ํ‘œ์‹œ์— ๋Œ€ํ•œ ๋น„์ฆˆ๋‹ˆ์Šค ์ธก์˜ ์—„๊ฒฉํ•œ ์š”๊ตฌ ์‚ฌํ•ญ์ด ์—†๊ณ  ์‹œ์Šคํ…œ์— ๊ฒ€์ƒ‰ ์—”์ง„์ด ์—†๋Š” ๊ฒฝ์šฐ ์ด๋Ÿฌํ•œ ์‚ฌํ•ญ์„ ๊ตฌํ˜„ํ•˜์ง€ ์•Š๊ณ  ์˜ต์…˜ #2๋ฅผ ๊ณ ๋ คํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค.
  3. ํŒจ์‹ฏ ๊ฒ€์ƒ‰์— ๋Œ€ํ•œ ๋ช…ํ™•ํ•œ ์š”๊ตฌ ์‚ฌํ•ญ์ด ์žˆ๋Š” ๊ฒฝ์šฐ ์„ฑ๋Šฅ ์ €ํ•˜ ์—†์ด ๋‘ ๊ฐ€์ง€ ์˜ต์…˜์ด ์žˆ์Šต๋‹ˆ๋‹ค.
    • ๊ฒ€์ƒ‰ ๊ธฐ์ค€์ด ๋ณ€๊ฒฝ๋  ๋•Œ๋งˆ๋‹ค ๋ชจ๋“  ์ˆ˜๋Ÿ‰์„ ๋‹ค์‹œ ๊ณ„์‚ฐํ•˜์ง€ ๋งˆ์‹ญ์‹œ์˜ค.
    • Solr, ElasticSearch, Sphinx ๋“ฑ๊ณผ ๊ฐ™์€ ๊ฒ€์ƒ‰ ์—”์ง„์„ ์‚ฌ์šฉํ•˜์‹ญ์‹œ์˜ค. ๊ทธ๋Ÿฌ๋‚˜ ์ด๋Š” ๊ธฐ๋ณธ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ๋Œ€์ฒดํ•  ์ˆ˜ ์—†์œผ๋ฉฐ ๊ฒ€์ƒ‰ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด ๊ธฐ๋ณธ ์ €์žฅ์†Œ์— ์ถ”๊ฐ€๋กœ ์‚ฌ์šฉํ•ด์•ผ ํ•œ๋‹ค๋Š” ์ ์„ ์ดํ•ดํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
  4. ๋˜ํ•œ ํŒจ์‹ฏ ๊ฒ€์ƒ‰์˜ ๊ฒฝ์šฐ ๊ฒ€์ƒ‰ ๊ฒฐ๊ณผ ํŽ˜์ด์ง€ ๊ฒ€์ƒ‰๊ณผ ๊ณ„์‚ฐ์„ ๋‘ ๊ฐœ์˜ ๋ณ‘๋ ฌ ์š”์ฒญ์œผ๋กœ ๋ถ„ํ• ํ•˜๋Š” ๊ฒƒ์ด ํ•ฉ๋ฆฌ์ ์ž…๋‹ˆ๋‹ค. ์ˆ˜๋Ÿ‰์„ ๊ณ„์‚ฐํ•˜๋Š” ๊ฒƒ์€ ๊ฒฐ๊ณผ๋ฅผ ์–ป๋Š” ๊ฒƒ๋ณด๋‹ค ๋” ์˜ค๋ž˜ ๊ฑธ๋ฆด ์ˆ˜ ์žˆ์ง€๋งŒ ๊ฒฐ๊ณผ๋Š” ์‚ฌ์šฉ์ž์—๊ฒŒ ๋” ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค.
  5. ๊ฒ€์ƒ‰์„ ์œ„ํ•ด SQL ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ ์ด ๋ถ€๋ถ„๊ณผ ๊ด€๋ จ๋œ ๋ชจ๋“  ์ฝ”๋“œ ๋ณ€๊ฒฝ์€ ์ ์ ˆํ•œ ๋ฐ์ดํ„ฐ ์–‘(๋ผ์ด๋ธŒ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ ๋ณผ๋ฅจ ์ดˆ๊ณผ)์— ๋Œ€ํ•œ ์„ฑ๋Šฅ์„ ์ž˜ ํ…Œ์ŠคํŠธํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๋˜ํ•œ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ ๋ชจ๋“  ์ธ์Šคํ„ด์Šค, ํŠนํžˆ "๋ผ์ด๋ธŒ" ์ธ์Šคํ„ด์Šค์—์„œ ์ฟผ๋ฆฌ ์‹คํ–‰ ์‹œ๊ฐ„์„ ๋ชจ๋‹ˆํ„ฐ๋งํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค. ๊ฐœ๋ฐœ ๋‹จ๊ณ„์—์„œ๋Š” ์ฟผ๋ฆฌ ๊ณ„ํš์œผ๋กœ ๋ชจ๋“  ๊ฒƒ์ด ๊ดœ์ฐฎ์•˜๋”๋ผ๋„ ๋ฐ์ดํ„ฐ์˜ ์–‘์ด ์ฆ๊ฐ€ํ•จ์— ๋”ฐ๋ผ ์ƒํ™ฉ์ด ๋ˆˆ์— ๋„๊ฒŒ ๋ฐ”๋€” ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ถœ์ฒ˜ : habr.com

์ฝ”๋ฉ˜ํŠธ๋ฅผ ์ถ”๊ฐ€