ํ‚ค์˜ ํŽ˜์ด์ง€ ๋งค๊น€์„ ์œ„ํ•œ ๋„๊ตฌ์  ์ง€์›์ด ํ•„์š”ํ•œ ์ด์œ ๋Š” ๋ฌด์—‡์ž…๋‹ˆ๊นŒ?

์•ˆ๋…•ํ•˜์„ธ์š” ์—ฌ๋Ÿฌ๋ถ„! ์ €๋Š” Java + Spring์œผ๋กœ ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค๋ฅผ ์ž‘์„ฑํ•˜๋Š” ๋ฐฑ์—”๋“œ ๊ฐœ๋ฐœ์ž์ž…๋‹ˆ๋‹ค. ์ €๋Š” Tinkoff์˜ ๋‚ด๋ถ€ ์ œํ’ˆ ๊ฐœ๋ฐœ ํŒ€ ์ค‘ ํ•œ ๊ณณ์—์„œ ์ผํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

ํ‚ค์˜ ํŽ˜์ด์ง€ ๋งค๊น€์„ ์œ„ํ•œ ๋„๊ตฌ์  ์ง€์›์ด ํ•„์š”ํ•œ ์ด์œ ๋Š” ๋ฌด์—‡์ž…๋‹ˆ๊นŒ?

์šฐ๋ฆฌ ํŒ€์—์„œ๋Š” DBMS์—์„œ ์ฟผ๋ฆฌ๋ฅผ ์ตœ์ ํ™”ํ•˜๋Š” ๋ฌธ์ œ๊ฐ€ ์ž์ฃผ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค. ํ•ญ์ƒ ์ข€ ๋” ๋น ๋ฅธ ์†๋„๋ฅผ ์›ํ•˜์ง€๋งŒ ์‹ ์ค‘ํ•˜๊ฒŒ ๊ตฌ์„ฑ๋œ ์ธ๋ฑ์Šค๋กœ๋Š” ํ•ญ์ƒ ์„ฑ๊ณตํ•  ์ˆ˜๋Š” ์—†์Šต๋‹ˆ๋‹ค. ๋ช‡ ๊ฐ€์ง€ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์„ ์ฐพ์•„์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ž‘์—… ์‹œ ํ•ฉ๋ฆฌ์ ์ธ ์ตœ์ ํ™”๋ฅผ ์ฐพ๊ธฐ ์œ„ํ•ด ์›น์„ ๋Œ์•„๋‹ค๋‹ˆ๋Š” ๋™์•ˆ ๋‚˜๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์‚ฌ์‹ค์„ ๋ฐœ๊ฒฌํ–ˆ์Šต๋‹ˆ๋‹ค. Marcus Wynand์˜ ๋์—†์ด ์œ ์šฉํ•œ ๋ธ”๋กœ๊ทธ, SQL Performance explained์˜ ์ €์ž์ž…๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ๋ชจ๋“  ๊ธฐ์‚ฌ๋ฅผ ์—ฐ์†ํ•ด์„œ ์ฝ์„ ์ˆ˜ ์žˆ๋Š” ๋ณด๊ธฐ ๋“œ๋ฌธ ์œ ํ˜•์˜ ๋ธ”๋กœ๊ทธ์ž…๋‹ˆ๋‹ค.

๋‚˜๋Š” ๋‹น์‹ ์„ ์œ„ํ•ด Marcus์˜ ์งง์€ ๊ธฐ์‚ฌ๋ฅผ ๋ฒˆ์—ญํ•˜๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค. ์ด๋Š” ์˜ค๋ž˜๋˜์—ˆ์ง€๋งŒ ์—ฌ์ „ํžˆ SQL ํ‘œ์ค€์— ๋”ฐ๋ฅธ ์˜คํ”„์…‹ ์ž‘์—… ์„ฑ๋Šฅ๊ณผ ๊ด€๋ จ๋œ ๋ฌธ์ œ์— ๊ด€์‹ฌ์„ ๋Œ๋ ค๋Š” ์„ ์–ธ๋ฌธ์ด๋ผ๊ณ  ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์–ด๋–ค ๊ณณ์—์„œ๋Š” ์ €์ž์—๊ฒŒ ์„ค๋ช…๊ณผ ์˜๊ฒฌ์„ ์ถ”๊ฐ€ํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋‚˜๋Š” ๊ทธ๋Ÿฌํ•œ ๋ชจ๋“  ์žฅ์†Œ๋ฅผ "๋Œ€๋žต"์ด๋ผ๊ณ  ๋ถ€๋ฅด๊ฒ ์Šต๋‹ˆ๋‹ค. ๋” ๋ช…ํ™•ํ•˜๊ฒŒ ํ•˜๊ธฐ ์œ„ํ•ด

์ž‘์€ ์†Œ๊ฐœ

๋งŽ์€ ์‚ฌ๋žŒ๋“ค์ด ์˜คํ”„์…‹์„ ํ†ตํ•œ ํŽ˜์ด์ง€ ์„ ํƒ ์ž‘์—…์ด ์–ผ๋งˆ๋‚˜ ๋ฌธ์ œ๊ฐ€ ๋งŽ๊ณ  ๋Š๋ฆฐ์ง€ ์•Œ๊ณ  ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ์ข€ ๋” ํšจ์œจ์ ์ธ ๋””์ž์ธ์œผ๋กœ ์•„์ฃผ ์‰ฝ๊ฒŒ ๊ต์ฒดํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ์‚ฌ์‹ค์„ ์•Œ๊ณ  ๊ณ„์…จ๋‚˜์š”?

๋”ฐ๋ผ์„œ offset ํ‚ค์›Œ๋“œ๋Š” ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์š”์ฒญ์˜ ์ฒ˜์Œ n๊ฐœ ๋ ˆ์ฝ”๋“œ๋ฅผ ๊ฑด๋„ˆ๋›ฐ๋„๋ก ์ง€์‹œํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋Š” ์ฃผ์–ด์ง„ ์ˆœ์„œ๋Œ€๋กœ ๋””์Šคํฌ์—์„œ ์ฒ˜์Œ n๊ฐœ์˜ ๋ ˆ์ฝ”๋“œ๋ฅผ ์ฝ์–ด์•ผ ํ•˜๋ฉฐ(์ฐธ๊ณ : ์ง€์ •๋œ ๊ฒฝ์šฐ ์ •๋ ฌ ์ ์šฉ), ๊ทธ๋Ÿฐ ๋‹ค์Œ์—๋งŒ n+1๋ถ€ํ„ฐ ๋ ˆ์ฝ”๋“œ๋ฅผ ๋ฐ˜ํ™˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ฐ€์žฅ ํฅ๋ฏธ๋กœ์šด ์ ์€ ๋ฌธ์ œ๊ฐ€ DBMS์˜ ํŠน์ • ๊ตฌํ˜„์— ์žˆ๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ ํ‘œ์ค€์— ๋”ฐ๋ฅธ ์›๋ž˜ ์ •์˜์— ์žˆ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

...ํ–‰์€ ๋จผ์ € ๋‹ค์Œ์— ๋”ฐ๋ผ ์ •๋ ฌ๋ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฐ ๋‹ค์Œ ์ฒ˜์Œ๋ถ€ํ„ฐ...
-SQL:2016, Part 2, 4.15.3 ํŒŒ์ƒ ํ…Œ์ด๋ธ”(์ฐธ๊ณ : ํ˜„์žฌ ๊ฐ€์žฅ ๋งŽ์ด ์‚ฌ์šฉ๋˜๋Š” ํ‘œ์ค€)

์—ฌ๊ธฐ์„œ ์ค‘์š”ํ•œ ์ ์€ offset์ด ๋‹จ์ผ ๋งค๊ฐœ๋ณ€์ˆ˜(๊ฑด๋„ˆ๋›ธ ๋ ˆ์ฝ”๋“œ ์ˆ˜)๋ฅผ ์ทจํ•œ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ด ์ •์˜์— ๋”ฐ๋ผ DBMS๋Š” ๋ชจ๋“  ๋ ˆ์ฝ”๋“œ๋งŒ ๊ฒ€์ƒ‰ํ•œ ๋‹ค์Œ ๋ถˆํ•„์š”ํ•œ ๋ ˆ์ฝ”๋“œ๋ฅผ ์‚ญ์ œํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ถ„๋ช…ํžˆ ์ด๋Ÿฌํ•œ ์˜คํ”„์…‹ ์ •์˜๋กœ ์ธํ•ด ์šฐ๋ฆฌ๋Š” ์ถ”๊ฐ€ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๊ทธ๊ฒƒ์ด SQL์ธ์ง€ NoSQL์ธ์ง€๋Š” ์ค‘์š”ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

์กฐ๊ธˆ๋งŒ ๋” ์•„ํ”„๋ฉด ๋ผ

์˜คํ”„์…‹ ๋ฌธ์ œ๋Š” ์—ฌ๊ธฐ์„œ ๋๋‚˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๊ทธ ์ด์œ ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค. ๋””์Šคํฌ์—์„œ ๋‘ ํŽ˜์ด์ง€์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์ฝ๋Š” ์‚ฌ์ด์— ๋‹ค๋ฅธ ์ž‘์—…์ด ์ƒˆ ๋ ˆ์ฝ”๋“œ๋ฅผ ์‚ฝ์ž…ํ•˜๋Š” ๊ฒฝ์šฐ ์ด ๊ฒฝ์šฐ์—๋Š” ์–ด๋–ป๊ฒŒ ๋ ๊นŒ์š”?

ํ‚ค์˜ ํŽ˜์ด์ง€ ๋งค๊น€์„ ์œ„ํ•œ ๋„๊ตฌ์  ์ง€์›์ด ํ•„์š”ํ•œ ์ด์œ ๋Š” ๋ฌด์—‡์ž…๋‹ˆ๊นŒ?

์ด์ „ ํŽ˜์ด์ง€์˜ ๋ ˆ์ฝ”๋“œ๋ฅผ ๊ฑด๋„ˆ๋›ฐ๊ธฐ ์œ„ํ•ด ์˜คํ”„์…‹์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ, ์„œ๋กœ ๋‹ค๋ฅธ ํŽ˜์ด์ง€๋ฅผ ์ฝ๋Š” ์‚ฌ์ด์— ์ƒˆ ๋ ˆ์ฝ”๋“œ๋ฅผ ์ถ”๊ฐ€ํ•˜๋Š” ์ƒํ™ฉ์—์„œ ์ค‘๋ณต์ด ๋ฐœ์ƒํ•  ๊ฐ€๋Šฅ์„ฑ์ด ๋†’์Šต๋‹ˆ๋‹ค(์ฐธ๊ณ : ์ด๋Š” ๊ตฌ์„ฑ๋ณ„ ์ˆœ์„œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํŽ˜์ด์ง€๋ณ„๋กœ ์ฝ์„ ๋•Œ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค. ์ถœ๋ ฅ ์ค‘๊ฐ„์— ์ƒˆ๋กœ์šด ํ•ญ๋ชฉ์ด ๋‚˜ํƒ€๋‚  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค).

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

์ด๋ฏธ ์•Œ๊ณ  ์žˆ๋“ฏ์ด ์ด๋Š” ํŠน์ • DBMS๋‚˜ ๊ทธ ๊ตฌํ˜„์˜ ๋ฌธ์ œ๊ฐ€ ์•„๋‹™๋‹ˆ๋‹ค. ๋ฌธ์ œ๋Š” SQL ํ‘œ์ค€์— ๋”ฐ๋ผ ํŽ˜์ด์ง€ ๋งค๊น€์„ ์ •์˜ํ•˜๋Š” ๋ฐ ์žˆ์Šต๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” ๊ฐ€์ ธ์˜ฌ ํŽ˜์ด์ง€๋‚˜ ๊ฑด๋„ˆ๋›ธ ๋ ˆ์ฝ”๋“œ ์ˆ˜๋ฅผ DBMS์— ์•Œ๋ ค์ค๋‹ˆ๋‹ค. ์ด์— ๋Œ€ํ•œ ์ •๋ณด๊ฐ€ ๋„ˆ๋ฌด ์ ๊ธฐ ๋•Œ๋ฌธ์— ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋Š” ์ด๋Ÿฌํ•œ ์š”์ฒญ์„ ์ตœ์ ํ™”ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

์ด๋Š” ํŠน์ • ํ‚ค์›Œ๋“œ์˜ ๋ฌธ์ œ๊ฐ€ ์•„๋‹ˆ๋ผ ์ฟผ๋ฆฌ์˜ ์˜๋ฏธ์— ๋Œ€ํ•œ ๋ฌธ์ œ๋ผ๋Š” ์ ์„ ๋ช…ํ™•ํžˆ ํ•˜๋Š” ๊ฒƒ๋„ ๊ฐ€์น˜๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ฌธ์ œ๊ฐ€ ์žˆ๋Š” ํŠน์„ฑ์ƒ ๋™์ผํ•œ ๊ตฌ๋ฌธ์ด ๋ช‡ ๊ฐ€์ง€ ๋” ์žˆ์Šต๋‹ˆ๋‹ค.

  • offset ํ‚ค์›Œ๋“œ๋Š” ์•ž์„œ ์–ธ๊ธ‰ํ•œ ๋ฐ”์™€ ๊ฐ™์Šต๋‹ˆ๋‹ค.
  • ๋‘ ๊ฐœ์˜ ํ‚ค์›Œ๋“œ๋ฅผ ๊ตฌ์„ฑํ•˜๋Š” ๊ฒƒ์€ Limit [offset]์ž…๋‹ˆ๋‹ค(ํ•œ๊ณ„ ์ž์ฒด๋Š” ๊ทธ๋ ‡๊ฒŒ ๋‚˜์˜์ง€๋Š” ์•Š์ง€๋งŒ).
  • ํ–‰ ๋ฒˆํ˜ธ ๋งค๊ธฐ๊ธฐ(์˜ˆ: row_number(), rownum ๋“ฑ)๋ฅผ ๊ธฐ์ค€์œผ๋กœ ํ•˜ํ•œ์œผ๋กœ ํ•„ํ„ฐ๋งํ•ฉ๋‹ˆ๋‹ค.

์ด๋Ÿฌํ•œ ๋ชจ๋“  ํ‘œํ˜„์€ ์ถ”๊ฐ€ ์ •๋ณด๋‚˜ ๋งฅ๋ฝ ์—†์ด ๊ฑด๋„ˆ๋›ธ ์ค„ ์ˆ˜๋งŒ ์•Œ๋ ค์ค๋‹ˆ๋‹ค.

์ด ๊ธฐ์‚ฌ์˜ ๋’ท๋ถ€๋ถ„์—์„œ๋Š” offset ํ‚ค์›Œ๋“œ๊ฐ€ ์ด๋Ÿฌํ•œ ๋ชจ๋“  ์˜ต์…˜์˜ ์š”์•ฝ์œผ๋กœ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.

์˜คํ”„์…‹ ์—†๋Š” ์‚ถ

์ด์ œ ์ด๋Ÿฌํ•œ ๋ชจ๋“  ๋ฌธ์ œ๊ฐ€ ์—†๋‹ค๋ฉด ์šฐ๋ฆฌ ์„ธ์ƒ์ด ์–ด๋–ค ๋ชจ์Šต์ผ์ง€ ์ƒ์ƒํ•ด ๋ด…์‹œ๋‹ค. ์˜คํ”„์…‹ ์—†๋Š” ์ƒํ™œ์€ ๊ทธ๋ฆฌ ์–ด๋ ต์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์„ ํƒ์„ ์‚ฌ์šฉํ•˜๋ฉด where์˜ ์กฐ๊ฑด์„ ์‚ฌ์šฉํ•˜์—ฌ ์•„์ง ๋ณด์ง€ ๋ชปํ•œ ํ–‰(์ฐธ๊ณ : ์ด์ „ ํŽ˜์ด์ง€์— ์—†์—ˆ๋˜ ํ–‰)๋งŒ ์„ ํƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ด ๊ฒฝ์šฐ, ์„ ํƒ์ด ์ˆœ์„œ๊ฐ€ ์ง€์ •๋œ ์„ธํŠธ(์˜ค๋ž˜๋œ ์ˆœ์„œ ๊ธฐ์ค€)์—์„œ ์‹คํ–‰๋œ๋‹ค๋Š” ์‚ฌ์‹ค๋ถ€ํ„ฐ ์‹œ์ž‘ํ•ฉ๋‹ˆ๋‹ค. ์ˆœ์„œ๊ฐ€ ์ง€์ •๋œ ์„ธํŠธ๊ฐ€ ์žˆ์œผ๋ฏ€๋กœ ๋งค์šฐ ๊ฐ„๋‹จํ•œ ํ•„ํ„ฐ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ด์ „ ํŽ˜์ด์ง€์˜ ๋งˆ์ง€๋ง‰ ๋ ˆ์ฝ”๋“œ ๋’ค์— ์žˆ๋Š” ๋ฐ์ดํ„ฐ๋งŒ ๊ฐ€์ ธ์˜ฌ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

    SELECT ...
    FROM ...
    WHERE ...
    AND id < ?last_seen_id
    ORDER BY id DESC
    FETCH FIRST 10 ROWS ONLY

์ด๊ฒƒ์ด ์ด ์ ‘๊ทผ๋ฒ•์˜ ์ „์ฒด ์›์น™์ž…๋‹ˆ๋‹ค. ๋ฌผ๋ก  ๋งŽ์€ ์—ด์„ ๊ธฐ์ค€์œผ๋กœ ์ •๋ ฌํ•˜๋ฉด ์ƒํ™ฉ์ด ๋” ์žฌ๋ฏธ์žˆ์–ด์ง€์ง€๋งŒ ์•„์ด๋””์–ด๋Š” ์—ฌ์ „ํžˆ ๋™์ผํ•ฉ๋‹ˆ๋‹ค. ์ด ๋””์ž์ธ์€ ๋งŽ์€ ์‚ฌ๋žŒ๋“ค์—๊ฒŒ ์ ์šฉ ๊ฐ€๋Šฅํ•˜๋‹ค๋Š” ์ ์— ์œ ์˜ํ•˜๋Š” ๊ฒƒ์ด ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค. NoSQL-๊ฒฐ์ •.

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

์Šฌ๋ผ์ด๋“œ ์ค‘ ํ•˜๋‚˜ ๊ทธ๊ฒƒ์— ๋Œ€ํ•ด ์ด์•ผ๊ธฐ๋ฌผ๋ก  ํ‚ค์— ์˜ํ•œ ํŽ˜์ด์ง€ ๋งค๊น€์€ ์ „๋Šฅํ•˜์ง€ ์•Š์œผ๋ฉฐ ํ•œ๊ณ„๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ฐ€์žฅ ์ค‘์š”ํ•œ ์ ์€ ๊ทธ๋…€๊ฐ€ ์ž„์˜์˜ ํŽ˜์ด์ง€๋ฅผ ์ฝ๋Š” ๋Šฅ๋ ฅ์ด ์—†๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค(์ฐธ๊ณ : ์ผ๊ด€๋˜์ง€ ์•Š์Œ). ๊ทธ๋Ÿฌ๋‚˜ ๋์—†๋Š” ์Šคํฌ๋กค(์ฐธ๊ณ : ํ”„๋ŸฐํŠธ์—”๋“œ) ์‹œ๋Œ€์—๋Š” ์ด๋Ÿฌํ•œ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ํด๋ฆญ์„ ์œ„ํ•ด ํŽ˜์ด์ง€ ๋ฒˆํ˜ธ๋ฅผ ์ง€์ •ํ•˜๋Š” ๊ฒƒ์€ ์–ด์จŒ๋“  UI ๋””์ž์ธ์—์„œ ์ž˜๋ชป๋œ ๊ฒฐ์ •์ž…๋‹ˆ๋‹ค(์ฐธ๊ณ : ๊ธฐ์‚ฌ ์ž‘์„ฑ์ž์˜ ์˜๊ฒฌ).

๋„๊ตฌ๋Š” ์–ด๋–ป์Šต๋‹ˆ๊นŒ?

ํ‚ค์— ๋Œ€ํ•œ ํŽ˜์ด์ง€ ๋งค๊น€์€ ์ด ๋ฐฉ๋ฒ•์— ๋Œ€ํ•œ ๋„๊ตฌ์  ์ง€์›์ด ๋ถ€์กฑํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ข…์ข… ์ ํ•ฉํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋‹ค์–‘ํ•œ ํ”„๋ ˆ์ž„์›Œํฌ๋ฅผ ํฌํ•จํ•œ ๋Œ€๋ถ€๋ถ„์˜ ๊ฐœ๋ฐœ ๋„๊ตฌ์—์„œ๋Š” ํŽ˜์ด์ง€ ๋งค๊น€ ์ˆ˜ํ–‰ ๋ฐฉ๋ฒ•์„ ์ •ํ™•ํ•˜๊ฒŒ ์„ ํƒํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

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

๊ทธ๋Ÿฌ๋‚˜ ํ‚ค์— ๋Œ€ํ•œ ํŽ˜์ด์ง€ ๋งค๊น€์„ ์ง€์›ํ•˜๋Š” ํ”„๋ ˆ์ž„์›Œํฌ์˜ ์ˆ˜๊ฐ€ ์ ์ฐจ ๋Š˜์–ด๋‚˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ํ˜„์žฌ ์šฐ๋ฆฌ๊ฐ€ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ๊ฒƒ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค:

(์ฐธ๊ณ : ๋ฒˆ์—ญ ๋‹น์‹œ ์ผ๋ถ€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๊ฐ€ 2017-2018๋…„ ์ดํ›„ ์—…๋ฐ์ดํŠธ๋˜์ง€ ์•Š์•˜๊ธฐ ๋•Œ๋ฌธ์— ์ผ๋ถ€ ๋งํฌ๊ฐ€ ์ œ๊ฑฐ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ๊ด€์‹ฌ์ด ์žˆ๋Š” ๊ฒฝ์šฐ ์›๋ณธ ์†Œ์Šค๋ฅผ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.)

์ง€๊ธˆ ์ด ์ˆœ๊ฐ„ ๋‹น์‹ ์˜ ๋„์›€์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. ํŽ˜์ด์ง€ ๋งค๊น€์„ ์‚ฌ์šฉํ•˜๋Š” ํ”„๋ ˆ์ž„์›Œํฌ๋ฅผ ๊ฐœ๋ฐœํ•˜๊ฑฐ๋‚˜ ์ง€์›ํ•˜๋Š” ๊ฒฝ์šฐ ํ‚ค์— ๋Œ€ํ•œ ํŽ˜์ด์ง€ ๋งค๊น€์— ๋Œ€ํ•œ ๊ธฐ๋ณธ ์ง€์›์„ ์ œ๊ณตํ•˜๋„๋ก ์š”์ฒญํ•˜๊ณ  ์ด‰๊ตฌํ•ฉ๋‹ˆ๋‹ค. ์งˆ๋ฌธ์ด ์žˆ๊ฑฐ๋‚˜ ๋„์›€์ด ํ•„์š”ํ•˜์‹œ๋ฉด ๊ธฐ๊บผ์ด ๋„์™€๋“œ๋ฆฌ๊ฒ ์Šต๋‹ˆ๋‹ค(ั„ะพั€ัƒะผ, ํŠธ์œ„ํ„ฐ, ๋ฌธ์˜ ์–‘์‹) (์ฐธ๊ณ : Marcus์— ๋Œ€ํ•œ ๋‚ด ๊ฒฝํ—˜์œผ๋กœ ๋ณผ ๋•Œ ๊ทธ๋Š” ์ด ์ฃผ์ œ๋ฅผ ์ „ํŒŒํ•˜๋Š” ๋ฐ ์ •๋ง ์—ด์ •์ ์ด๋ผ๊ณ  ๋งํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.)

ํ‚ค๋ณ„ ํŽ˜์ด์ง€ ๋งค๊ธฐ๊ธฐ๋ฅผ ์ง€์›ํ•  ๊ฐ€์น˜๊ฐ€ ์žˆ๋‹ค๊ณ  ์ƒ๊ฐ๋˜๋Š” ๊ธฐ์„ฑ ์†”๋ฃจ์…˜์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ ๊ฐ€๋Šฅํ•˜๋ฉด ์š”์ฒญ์„ ์ž‘์„ฑํ•˜๊ฑฐ๋‚˜ ๊ธฐ์„ฑ ์†”๋ฃจ์…˜์„ ์ œ๊ณตํ•˜์‹ญ์‹œ์˜ค. ์ด ๊ธฐ์‚ฌ์— ๋งํฌ๋ฅผ ๊ฑธ ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.

๊ฒฐ๋ก 

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

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

์ถœ์ฒ˜ : https://use-the-index-luke.com/no-offset
์ €์ž: ๋งˆ๋ฅด์ฟ ์Šค ์œ„๋‚œ๋“œ

์ถœ์ฒ˜ : habr.com

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