๐ ํ์ด์ง๋ค์ด์
๋ง์ ์์ ๋ฐ์ดํฐ๊ฐ ์์ ๋ ์๋ฒ์์ ๋ชจ๋ ๋ฐ์ดํฐ๋ฅผ ํ๋ฒ์ ๊ฐ์ ธ์ค๋ ๊ฒ์ ์๋ฒ์ ์ฅ์์๋ ํด๋ผ์ด์ธํธ ์ ์ฅ์์๋ ์ข์ ๋ฐฉ์์ด ์๋๋ค. ๋ฐ๋ผ์ "ํน์ ํ ์ ๋ ฌ ๊ธฐ์ค"๊ณผ "์ง์ ๋ ๊ฐฏ์"์ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์ค๋ ๊ฒ์ด ํ์ํ๋ค. ์ด๋ฅผ ํ์ด์ง๋ค์ด์ (Pagination)์ด๋ผ๊ณ ํ๋๋ฐ ์ฐพ์๋ณด๋ ํ์ด์ง๋ค์ด์ ๊ตฌํ ๋ฐฉ๋ฒ์ ํฌ๊ฒ ๋๊ฐ์ง ๋ฐฉ์์ผ๋ก ์ฒ๋ฆฌ ๊ฐ๋ฅํ๋ค.
1. ์คํ์ ๊ธฐ๋ฐ ํ์ด์ง๋ค์ด์ (Offset-based Pagination)
2. ์ปค์ ๊ธฐ๋ฐ ํ์ด์ง๋ค์ด์ (Cursor-based Paginantion)
1๋ฒ์ ๋ฐฉ๋ฒ์ด ๊ตฌํํ๋๋ฐ ์์ด์ ์ฌ์ด ๋ฐฉ๋ฒ์ด์ง๋ง ์ฌ๋ฌ๊ฐ์ง ๋ฌธ์ ์ ์ด ์กด์ฌํ๋ค. ๊ทธ๋ ๊ธฐ ๋๋ฌธ์ ์ฌ๋งํด์ 2๋ฒ์ ๋ฐฉ๋ฒ์ผ๋ก ํ์ด์ง๋ค์ด์ ์ ๊ตฌํํ๋๊ฒ ์ข๋ค๊ณ ํ๋ค. 1๋ฒ์ ์ด๋ค ๋ฌธ์ ๊ฐ ์กด์ฌํ๋์ง ์ดํด๋ณด๊ณ 2๋ฒ์ ๋ํด์ ์์๋ณด๊ณ ์ ํ๋ค.
๐ 1. ์คํ์ ๊ธฐ๋ฐ ํ์ด์ง๋ค์ด์ (Offset-Based Pagination)
๊ฐ์ฅ ์ผ๋ฐ์ ์ธ ๋ฐฉ๋ฒ์ผ๋ก MySQL์์ ๊ฐ๋จํ LIMIT์ฟผ๋ฆฌ์ ์ฝค๋ง๋ฅผ ์ฌ์ฉํด ๊ฑด๋ ๋ธ ์ซ์๋ฅผ ์ง์ ํ๋ฉด ๋๋ค.
SELECT id FROM 'reservations' ORDER BY id DESC LIMIT 10, 20
LIMIT์ ์ ๋ถ๋ ์ซ์๋ฅผ ํตํด ๊ฑด๋ ๋ธ ๊ฐฏ์(offset)์ ์ง์ ํด์ฃผ๋ฉด ๋๋ค.
์คํ์ = (ํ์ฌ ํ์ด์ง ๋ฒํธ -1) * ํ์ด์ง ๋น ์์ฒญํ๋ ์๋ฃ ๊ฐฏ์์ด๋ค.
์ ๋ฐฉ์์ id๋ฅผ ๊ธฐ์ค์ผ๋ก ์ ๋ ฌ๋ ๊ฐ์์ ์ง์ ๋ ๊ฐฏ์๋ฅผ ๋ณด์ฌ์ฃผ๊ธฐ ๋๋ฌธ์ "๋ฐ์ดํฐ ๋ณํ๊ฐ ์์ ๊ฒฝ์ฐ"์ "์ฟผ๋ฆฌ์ ํผํฌ๋จผ์ค ์ด์์ ๋ฌธ์ "๊ฐ ์กด์ฌํ๋ค. ์กฐ๊ธ ๋ ํ์ด์ ์ค๋ช ํ์๋ฉด SNS ์๋น์ค์ ๊ฐ์ด ๋ฐ์ดํฐ์ ์ธ์์์ด ํ๋ฐํ๊ฒ ์กด์ฌํ๋ ๊ฒฝ์ฐ 1ํ์ด์ง์์ 2ํ์ด์ง๋ก ๋์ด๊ฐ์ ๋ 1ํ์ด์ง์์ ๋ดค๋ ๋ฐ์ดํฐ๊ฐ ์๋ก์ด ๋ฐ์ดํฐ ์ ์ ์ผ๋ก 2ํ์ด์ง์์๋ ๋ณด์ฌ์ง ์ ์๋ค. RDBMS์์ ๋ชจ๋ ์ ๋ ฌ ๊ธฐ์ค์ ๋ํด row์๊ฐ ์์ฃผ ๋ง์ ๊ฒฝ์ฐ offset๊ฐ์ด ์ฌ๋ผ๊ฐ์๋ก ์ฟผ๋ฆฌ์ ํผํฌ๋จผ์ค๋ ์ด์ ๋น๋กํด์ ๋จ์ด์ง๊ฒ ๋์ด ์๋ค. ๊ทธ๋ ๊ธฐ ๋๋ฌธ์ offset ๊ธฐ๋ฐ ํ์ด์ง๋ค์ด์ ์ ์๋์ ๊ฐ์ ๊ฒฝ์ฐ์ ์ฌ์ฉํ๊ธฐ ์ ์ ํ๋ค.
1. ๋ฐ์ดํฐ์ ๋ณํ๋์ด ์ ์ด ์ค๋ณต ๋ฐ์ดํฐ๊ฐ ๋ ธ์ถ๋ ํ๋ฅ ์ด ์ ์ ๊ฒฝ์ฐ
2. ์ค๋ณต ๋ฐ์ดํฐ๊ฐ ๋ ธ์ถ๋์ด๋ ํฌ๊ฒ ๋ฌธ์ ๊ฐ ์๋ ๊ฒฝ์ฐ
3. ๊ฒ์์์ง์ด ์ธ๋ฑ์ฑ ํ ์ด์ ๋, ์ ์ ๊ฐ ๋ง์ง๋ง ํ์ด์ง๋ฅผ ๊ฐ ์ด์ ๊ฐ ์๋ ๊ฒฝ์ฐ
4. row์๊ฐ ๋ง์ง ์์ ํผํฌ๋จผ์ค ์ด์๋ฅผ ๊ฑฑ์ ํ ํ์๊ฐ ์๋ ๊ฒฝ์ฐ
๐ 2. ์ปค์ ๊ธฐ๋ฐ ํ์ด์ง๋ค์ด์ (Cursor-based Pagination)
์ปค์ ๊ธฐ๋ฐ ํ์ด์ง๋ค์ด์ ์ ์ฐ๋ฆฌ๊ฐ ์ฑ ์ ์ฝ์ ๋์ '์ฑ ๊ฐํผ'๋ผ๊ณ ์๊ฐํ๋ฉด ์ดํด๊ฐ ์ฝ๋ค. ์คํ์ ๊ธฐ๋ฐ ํ์ด์ง๋ค์ด์ ์ ๋ฐ์ดํฐ๊ฐ ๋ช ๋ฒ์งธ์ ์๋ค๋๋ฐ์ ์ง์คํ๊ณ ์๋ค๋ฉด ์ปค์ ๊ธฐ๋ฐ ํ์ด์ง๋ค์ด์ ์ ๋ฐ์ดํฐ๊ฐ ์ด๋ค ๋ฐ์ดํฐ์ ๋ค์์ ์๋์ง์ ์ง์คํ๋ค.
SELECT id FROM 'reservations' WHERE id > 10 ORDER BY id ASC LIMIT 5
์์ ๊ฒฝ์ฐ Cursor๊ฐ reservationsํ ์ด๋ธ์ id์ด๊ณ ๊ฐ์ 10์ด๋ค. 10๋ณด๋ค ํฐ ๋ฐ์ดํฐ๋ค์ ๊ธฐ์ค์ผ๋ก ๋ค์ ๋ฐ์ดํฐ๋ฅผ ์์ฒญํ๋ค.
id๊ฐ์ ๊ฒฝ์ฐ์๋ ๊ณ ์ ๊ฐ์ด๊ธฐ ๋๋ฌธ์ ๋ฌธ์ ๊ฐ ์์ง๋ง price์ ๊ฐ์ด ์ค๋ณต๊ฐ์ด ๋๋ ๊ฒฝ์ฐ์๋ ๋ฐ์ดํฐ๋ฅผ ๋ถ๋ฌ์ค๋๋ฐ ์ด๋ ค์์ด ์๋ค. ๋๋ฌธ์ id์ price ๊ฐ์ ์ด์ฉํ์ฌ ๊ฐ์ ธ์์ผ ํ๋ค.
SELECT id, price
FROM 'reservation'
WHERE (price > 10000 OR (price = 10000 AND id > 10))
OREDER BY price ASC, id ASC
LIMIT 5
์ด๋ ๊ฒ ํ ๊ฒฝ์ฐ ์ฑ ์ ์ฝ์๋ ์ฌ์ฉํ๋ ์ฑ ๊ฐํผ ์ฒ๋ผ ๊ธฐ์ค์ ๋ค์์ด ๋๋ ๋ฐ์ดํฐ๋ฅผ ๋ถ๋ฌ์ฌ ์ ์๋ค.
'Python' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
Jupyter Notebook ์ค์น, ๊ฒ์ ํ๋ฉด ์คํ ์ค๋ฅ ํด๊ฒฐ ๋ฒ (0) | 2022.05.17 |
---|