์ด๋ฒ ์๊ฐ์ ํ์ฌ์์ ๋ฉํํด๋ผ์ฐ๋(๊ตฌ๊ธ, ๋๋กญ๋ฐ์ค, ์๋๋ผ์ด๋ธ)๋ฅผ ํ๋์ ํด๋ผ์ฐ๋๋ก ์ฐ๊ฒฐ์์ผ์ฃผ๋ ํ๋ก์ ํธ๋ฅผ ์งํํ๋ฉด์ ์ฌ์ฉํ๋ ์ปค์๋ฅผ ์ด์ฉํ ๋๋ณด๊ธฐ ๋ฐฉ์์ ํ์ด์ง ๊ฐ๋ฐ ๊ฒฝํ์ ๊ณต์ ํ๋ ค๊ณ ํฉ๋๋ค.
๊ธฐ์กด์ ๋๋ณด๊ธฐ๋ฅผ ์ง์ํ๊ธฐ ์ํ API๋ MySQL์ limit, offset์ ์ด์ฉํ ํ์ด์ง์ผ๋ก ๊ตฌํ์ด ๋์ด์์์ต๋๋ค. ํ์ง๋ง ๋ฉํํด๋ผ์ฐ๋์ ๋ณ๊ฒฝ์ฌํญ ๋๊ธฐํ์ ๋ค์ ํ์ด์ง ๋ถ๋ฌ์ค๊ธฐ๊ฐ ๋์์ ์คํ๋ ๋ ์ค๋ณต๋๋ ํญ๋ชฉ๋ค์ด ์กด์ฌํ๊ฒ ๋์์ต๋๋ค.
1. ์ฒซ ํ์ด์ง ๋ก๋ฉ
SELECT id, file_name
FROM file
ORDER BY file_name asc
LIMIT 5
OFFSET 0
๊ฒ์ ๊ฒฐ๊ณผ
1, B
2, B
3, B
4, B
5, B
2. A๋ผ๋ ํ์ผ๋ช ์ ํ์ผ 5๊ฐ ์์ฑ
3. ๋๋ฒ์งธ ํ์ด์ง ๋ก๋ฉ
SELECT id, file_name
FROM file
ORDER BY file_name asc
LIMIT 5
OFFSET 5
๊ฒ์ ๊ฒฐ๊ณผ
1, B
2, B
3, B
4, B
5, B
๊ฒฐ๊ณผ์ ์ผ๋ก ํด๋ผ์ด์ธํธ์์๋ B๋ผ๋ ํ์ผ๋ช ์ด 10๊ฐ ์กด์ฌํ๋๊ฒ์ฒ๋ผ ๋ฆฌ์คํธ์ ๋ณด์ด๊ฒ ๋์์ต๋๋ค.
1์ฐจ์ ์ผ๋ก ์ ๋ ฌ์กฐ๊ฑด์ ๊ฒ์ ์กฐ๊ฑด์ ๋ฃ์ด์ ๋ง์ง๋ง ํญ๋ชฉ ์ดํ์ ๋ฆฌ์คํธ๋ฅผ ๊ฐ์ ธ์ค๋๋ก API์ ์ฟผ๋ฆฌ๋ฅผ ๋ณ๊ฒฝํ์์ต๋๋ค.
๋ค์ํ์ด์ง๋ฅผ ๊ฐ์ ธ์ฌ๋ ์ด์ ํ์ด์ง์ ๋ง์ง๋ง ํญ๋ชฉ์์ ์ ๋ ฌ์กฐ๊ฑด์ ํด๋นํ๋ ์ ๋ณด ์ ํด๋นํ๋ ์ปค์ ๋ฐ์ดํฐ๋ฅผ ํตํด ๋ค์ํ์ด์ง๋ฅผ ๊ฒ์ํ์์ต๋๋ค.
SELECT id, file_name
FROM file
WHERE file_name > ${cursor}
ORDER BY file_name asc
LIMIT 2
์ด๋ ๊ฒ ํ๋ค๋ณด๋ ์๋์ ๊ฐ์ ํ ์คํธ๋ฐ์ดํฐ์์ ์ ๋ ฌ์กฐ๊ฑด์ ๊ฑธ๋ฆฌ๋ ๋ฐ์ดํฐ๊ฐ ์ ์ผํ์ง ์์ ๊ฒฝ์ฐ ๋๋ฝ์ด ๋ฐ์ํ๊ฒ ๋์์ต๋๋ค.
ํ
์คํธ ๋ฐ์ดํฐ
id, file_name
1, A
2, A
3, A
4, B
5, B
6, B
SELECT id, file_name
FROM file
LIMIT 2
1, A
2, A
์ปค์ : A
SELECT id, file_name
FROM file
WHERE file_name > 'A'
LIMIT 2
4, B
5, B
์ปค์ : B
์์ ๊ฐ์ด ๋ฐ์ดํฐ๋ฅผ 2๊ฐ์ฉ ํ์ด์ง ํ๊ณ ์ถ์ ๋ 2๋ฒ์งธ ํ์ด์ง์์ file_name > A ์ ์กฐ๊ฑด์ด ๋ค์ด๊ฐ๊ฒ ๋๋ฏ๋ก 3, A ํ์ผ์ด ๋๋ฝ๋๊ฒ ๋ฉ๋๋ค.
๋๋ฝ๋๋ ๋ฐ์ดํฐ๊ฐ ์๋๋ก ํ๊ธฐ ์ํด์ ์ ๋ ฌ ์กฐ๊ฑด์ ์ ์ผํ ๊ฐ(์ผ๋ฐ์ ์ผ๋ก PK)์ 2์ฐจ ์ ๋ ฌ ์กฐ๊ฑด์ผ๋ก ์ถ๊ฐํ์์ต๋๋ค.
SELECT id, file_name
FROM file
WHERE file_name > ${lastCursorFileName}
OR (file_name = ${lastCursorFileName} AND id > ${lastCursorId})
ORDER BY file_name ASC, id ASC
LIMIT 2
SELECT id, file_name
FROM file
LIMIT 2
1, A
2, A
์ปค์ : 2, A
SELECT id, file_name
FROM file
WHERE file_name > 'A'
OR (file_name = 'A' AND id > 2)
ORDER BY file_name ASC, id ASC
LIMIT 2
3, A
4, B
์ปค์ : 4, B
SELECT id, file_name
FROM file
WHERE file_name > 'B'
OR (file_name = 'B' AND id > 4)
ORDER BY file_name ASC, id ASC
LIMIT 2
5, B
6, B
์ปค์ : 6, B
์์๊ฐ์ด ์ ์ผํ ์ ๋ ฌ์กฐ๊ฑด์ธ id๋ฅผ ์ถ๊ฐํจ์ผ๋ก์จ ๋๋ฝ๊ณผ ์ค๋ณต์ด ๋ฐ์ํ์ง ์๋ ์ปค์๋ฐฉ์์ ๋๋ณด๊ธฐ๋ฅผ ๊ตฌํ ํ ์ ์์์ต๋๋ค.
์ ์ผํ ์ ๋ ฌ ์กฐ๊ฑด์ ์ด์ฉํ์ฌ where ์กฐ๊ฑด์ ๋ฃ์์ผ๋ก์จ ์ค๋ณต์ด ๋ฐ์ํ์ง ์๋ offset์ ์ฐพ์ ์ ์์์ต๋๋ค.