๊ฐ์ฌ ๋ก๊ทธ์ ์ด๋ฒคํธ ํ ์ด๋ธ์ ์ํ PostgreSQL ํํฐ์ ๋
PostgreSQL ํํฐ์ ๋์ ํตํด ์ด๋ฒคํธ ํ ์ด๋ธ์์ ์ธ์ ์ด๋์ด ๋๋์ง, ํํฐ์ ํค๋ ์ด๋ป๊ฒ ๊ณ ๋ฅด๋์ง, ๊ด๋ฆฌ์ ํจ๋ ํํฐ์ ๋ณด์กด(๋ฆฌํ ์ )์ ์ด๋ค ์ํฅ์ด ์๋์ง ์์๋ณด์ธ์.

์ด๋ฒคํธ์ ๊ฐ์ฌ ํ ์ด๋ธ์ด ๋ฌธ์ ๋๋ ์ด์
์ด๋ฒคํธ ํ ์ด๋ธ๊ณผ ๊ฐ์ฌ ํ ์ด๋ธ์ ๋น์ทํด ๋ณด์ด์ง๋ง ๋ชฉ์ ์ด ๋ค๋ฆ ๋๋ค.
์ด๋ฒคํธ ํ ์ด๋ธ์ ํ์ด์ง ์กฐํ, ์ ์ก๋ ์ด๋ฉ์ผ, ์นํ ํธ์ถ, ์์ ์คํ์ฒ๋ผ ์ผ์ด๋ ์ผ์ ๊ธฐ๋กํฉ๋๋ค. ๊ฐ์ฌ ํ ์ด๋ธ์ ๋๊ฐ ์ธ์ ๋ฌด์์ ๋ฐ๊ฟจ๋์ง ๊ธฐ๋กํฉ๋๋ค: ์ํ ๋ณ๊ฒฝ, ๊ถํ ์ ๋ฐ์ดํธ, ์ง๊ธ ์น์ธ ๊ฐ์ ํญ๋ชฉ์ผ๋ก ์ข ์ข ๋ณ๊ฒฝ ์ /ํ ๋ด์ฉ์ ํฌํจํฉ๋๋ค.
๋ ํ ์ด๋ธ ๋ชจ๋ ์ถ๊ฐ๋ง ์ผ์ด๋๋(append-only) ํน์ฑ ๋๋ฌธ์ ๋น ๋ฅด๊ฒ ์ปค์ง๋๋ค. ๊ฐ๋ณ ํ์ ์์ฃผ ์ญ์ ํ์ง ์๊ณ , ๋งค๋ถ ์ ํ์ด ๋ค์ด์ต๋๋ค. ๋ฐฐ๊ฒฝ ์์ ๊ณผ ํตํฉ์ ํฌํจํ๋ฉด ์์ ์ ํ๋ ๋ช ์ฃผ ๋ง์ ์๋ฐฑ๋ง ํ์ ๋ก๊ทธ๋ฅผ ์์ฑํ ์ ์์ต๋๋ค.
๋ฌธ์ ๋ ์ผ์ ์ ๋ฌด์์ ๋๋ฌ๋ฉ๋๋ค. ๊ด๋ฆฌ์ ํจ๋์ ๋ณดํต "์ด์ ์ ์ค๋ฅ"๋ "์ด ์ฌ์ฉ์์ ํ๋" ๊ฐ์ ๋น ๋ฅธ ํํฐ๋ฅผ ํ์๋ก ํฉ๋๋ค. ํ ์ด๋ธ์ด ์ปค์ง์๋ก ๊ทธ๋ฐ ๊ธฐ๋ณธ ํ๋ฉด๋ค์ด ๋๋ ค์ง๊ธฐ ์์ํฉ๋๋ค.
์ด๊ธฐ์ ๋ณดํต ๋ช ๊ฐ์ง ์ฆ์์ด ๋ํ๋ฉ๋๋ค:
- ์ข์ ๋ ์ง ๋ฒ์์์๋ ํํฐ๊ฐ ๋ช ์ด ๊ฑธ๋ฆฌ๊ฑฐ๋(๋๋ ์๊ฐ ์ด๊ณผ) ์คํจํ๋ค.
- ์ธ๋ฑ์ค๊ฐ ๋๋ฌด ์ปค์ ธ ์ฝ์ ์ด ๋๋ ค์ง๊ณ ์ ์ฅ ๋น์ฉ์ด ์ฆ๊ฐํ๋ค.
- VACUUM ๋ฐ autovacuum์ด ์ค๋ ๊ฑธ๋ฆฌ๊ณ ์ ์ง๋ณด์๊ฐ ๋์ ๋๊ฒ ๋๋ค.
- ๋ณด์กด(๋ฐ์ดํฐ ์ญ์ )์ด ์ํํด์ง๋ค: ์ค๋๋ ํ ์ญ์ ๊ฐ ๋๋ฆฌ๊ณ ๋ธ๋กํธ๊ฐ ์๊ธด๋ค.
ํํฐ์ ๋์ ์ด๋ฐ ๋ฌธ์ ๋ฅผ ๋ค๋ฃจ๋ ํ ๋ฐฉ๋ฒ์ ๋๋ค. ๊ฐ๋จํ ๋งํ๋ฉด, ํ๋์ ํฐ ํ ์ด๋ธ์ ์ฌ๋ฌ ์์ ํ ์ด๋ธ(ํํฐ์ )๋ก ๋๋๊ณ ๋ ผ๋ฆฌ์ ์ผ๋ก ๊ฐ์ ์ด๋ฆ์ ๊ณต์ ํ๊ฒ ํฉ๋๋ค. PostgreSQL์ ๋ณดํต ์๊ฐ์ ๊ธฐ๋ฐํ ๊ท์น์ผ๋ก ์ ํ์ ์ ์ ํ ํํฐ์ ์ผ๋ก ๋ผ์ฐํ ํฉ๋๋ค.
๊ทธ๋์ ํ๋ค์ ์ด๋ฒคํธ ํ ์ด๋ธ์ PostgreSQL ํํฐ์ ๋์ ๊ฒํ ํฉ๋๋ค: ์ต๊ทผ ๋ฐ์ดํฐ๋ ์๊ฒ ์ ์ง๋์ด, ์ฟผ๋ฆฌ๊ฐ ํน์ ์๊ฐ ์ฐฝ๋ง ํ์ํ ๋ PostgreSQL์ด ์ ์ฒด ํํฐ์ ์ ๊ฑด๋๋ธ ์ ์๊ธฐ ๋๋ฌธ์ ๋๋ค.
ํํฐ์ ๋์ด ๋ง๋ฅ์ ์๋๋๋ค. "์ต๊ทผ ์ผ์ฃผ์ผ" ๊ฐ์ ์ฟผ๋ฆฌ์ ํฐ ๋์์ด ๋๊ณ ๋ณด์กด์ ๋จ์ํ(์ค๋๋ ํํฐ์ ๋๋กญ)ํ์ง๋ง, ์๋ก์ด ๋ฌธ์ ๋ฅผ ๋ง๋ค ์๋ ์์ต๋๋ค:
- ํํฐ์ ํค๋ฅผ ์ฌ์ฉํ์ง ์๋ ์ฟผ๋ฆฌ๋ ๋ง์ ํํฐ์ ์ ํ์ธํด์ผ ํ ์ ์๋ค.
- ํํฐ์ ์๊ฐ ๋์ด๋๋ฉด ๊ด๋ฆฌํด์ผ ํ ๊ฐ์ฒด๊ฐ ๋ง์์ง๊ณ ์๋ชป ๊ตฌ์ฑ๋ ๊ฐ๋ฅ์ฑ์ด ์ปค์ง๋ค.
- ์ผ๋ถ ๊ณ ์ ์ ์ฝ๊ณผ ์ธ๋ฑ์ค๋ ์ ์ฒด ๋ฐ์ดํฐ์ ๊ฑธ์ณ ์ ์ฉํ๊ธฐ ์ด๋ ค์์ง๋ค.
๊ด๋ฆฌ์ ํจ๋์ด ๋ ์ง ํํฐ์ ์์ธก ๊ฐ๋ฅํ ๋ณด์กด ๊ท์น์ ํฌ๊ฒ ์์กดํ๋ค๋ฉด, ํํฐ์ ๋์ ์ค์ง์ ์ธ ์ด๋์ด ๋ ์ ์์ต๋๋ค. ๋ฐ๋ฉด์ ๋๋ถ๋ถ์ ์ฟผ๋ฆฌ๊ฐ "์ฌ์ฉ์ X์ ์ ์ฒด ํ๋"์ด๋ผ๋ฉด, UI์ ์ธ๋ฑ์ค๋ฅผ ์ ์คํ ์ค๊ณํ์ง ์์ผ๋ฉด ์คํ๋ ค ๊ณจ์น๊ฑฐ๋ฆฌ๊ฐ ๋ ์ ์์ต๋๋ค.
๋ก๊ทธ์ ๊ฐ์ฌ์ ์ ํ์ ์ธ ์ ๊ทผ ํจํด
์ด๋ฒคํธ์ ๊ฐ์ฌ ํ ์ด๋ธ์ ์ผ๋ฐฉํฅ์ผ๋ก ์ฑ์ฅํฉ๋๋ค: ์๋ก ๊ณ์ ์์ ๋๋ค. ์ง์์ ์ธ ์ฝ์ ์ด ์๊ณ ๊ฑฐ์ ์ ๋ฐ์ดํธ๊ฐ ์์ต๋๋ค. ๋๋ถ๋ถ์ ํ์ ํ ๋ฒ ์ฐ์ด๊ณ ๋์ค์ ์ง์, ์ฌ๊ณ ์กฐ์ฌ ๋๋ ๊ท์ ์ค์ ํ์ธ ์์ ์ฝํ๋๋ค.
์ด "append-only" ํํ๊ฐ ์ค์ํฉ๋๋ค. ์ฝ์ ์ฑ๋ฅ์ ํ๋ฃจ ์ข ์ผ ๊ด์ฌ์ฌ์ด๊ณ , ์ฝ๊ธฐ ์ฑ๋ฅ์ ์ง์์ด๋ ์ด์์ด ๋น ๋ฅธ ๋ต์ ํ์๋ก ํ ๋ ์ง์ค์ ์ผ๋ก ์ค์ํด์ง๋๋ค.
๋๋ถ๋ถ์ ์ฝ๊ธฐ๋ ํํฐ์ ๋๋ค. ๊ด๋ฆฌ์ ํจ๋์์๋ ๋ณดํต ์ฌ์ฉ์๊ฐ ๋๊ฒ ์์(์ต๊ทผ 24์๊ฐ)ํ ๋ค ์ฌ์ฉ์, ์ํฐํฐ, ์ก์ ์ผ๋ก ์ขํ๊ฐ๋๋ค.
์ผ๋ฐ์ ์ธ ํํฐ์๋ ๋ค์์ด ํฌํจ๋ฉ๋๋ค:
- ์๊ฐ ๋ฒ์
- ํ์์(์ฌ์ฉ์ ID, ์๋น์ค ๊ณ์ , IP ์ฃผ์)
- ๋์(์ํฐํฐ ํ์ + ์ํฐํฐ ID, ์: ์ฃผ๋ฌธ #1234)
- ์ก์ ํ์ (์์ฑ, ์์ , ์ญ์ , ๋ก๊ทธ์ธ ์คํจ)
- ์ํ๋ ์ฌ๊ฐ๋(์ฑ๊ณต/์ค๋ฅ)
์๊ฐ ๋ฒ์๋ ์์ฐ์ค๋ฌ์ด "์ฒซ ๋ฒ์งธ ์๋ฅด๊ธฐ"์ ๋๋ค. ์ด๊ฒ์ด ์ด๋ฒคํธ ํ ์ด๋ธ ํํฐ์ ๋์ ํต์ฌ ํต์ฐฐ์ ๋๋ค: ๋ง์ ์ฟผ๋ฆฌ๋ ์๊ฐ ์กฐ๊ฐ์ ์ํ๊ณ , ๊ทธ ์์์ ๋ค๋ฅธ ํํฐ๋ค์ด ์ ์ฉ๋ฉ๋๋ค.
๋ณด์กด๋ ๋ ๋ค๋ฅธ ์์์ ๋๋ค. ๋ก๊ทธ๋ ๊ฑฐ์ ์๊ตฌ์ ์ผ๋ก ๋ณด๊ดํ์ง ์์ต๋๋ค. ํ์ ๋ณดํต ๊ณ ์ธ๋ถ ์ด๋ฒคํธ๋ฅผ 30์ผ ๋๋ 90์ผ ๋ณด๊ดํ ๋ค ์ญ์ ํ๊ฑฐ๋ ์์นด์ด๋ธํฉ๋๋ค. ๊ฐ์ฌ ๋ก๊ทธ๋ ๋ ๊ธด ์๊ตฌ์ฌํญ(365์ผ ์ด์)์ด ์์ ์ ์์ง๋ง, ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ๋ธ๋กํนํ์ง ์๊ณ ์ค๋๋ ๋ฐ์ดํฐ๋ฅผ ์ ๊ฑฐํ ์์ธก ๊ฐ๋ฅํ ๋ฐฉ๋ฒ์ ์ํฉ๋๋ค.
๊ฐ์ฌ ๋ก๊น ์ ์ถ๊ฐ ๊ธฐ๋์ฌํญ์ ๋๋ฐํฉ๋๋ค. ๊ธฐ๋ก์ ๋ณดํต ๋ถ๋ณ(immutable)์ ์ํ๊ณ , ๋ชจ๋ ๋ ์ฝ๋๊ฐ ์ถ์ ๊ฐ๋ฅ(๋๊ฐ/๋ฌด์์/์ธ์ ๋ฐ ์์ฒญ/์ธ์ ์ปจํ ์คํธ ํฌํจ)ํด์ผ ํ๋ฉฐ, ์ ๊ทผ ์ ์ด๊ฐ ํ์ํฉ๋๋ค(๋ชจ๋ ์ฌ๋์ด ๋ณด์ ๊ด๋ จ ์ด๋ฒคํธ๋ฅผ ๋ณด์ง ๋ชปํ๊ฒ).
์ด ํจํด๋ค์ UI ์ค๊ณ์ ์ง์ ๋ฐ์๋ฉ๋๋ค. ์ฌ๋๋ค์ด ๊ธฐ๋ณธ์ ์ผ๋ก ๊ธฐ๋ํ๋ ํํฐโ๋ ์ง ์ ํ๊ธฐ, ์ฌ์ฉ์ ์ ํ๊ธฐ, ์ํฐํฐ ๊ฒ์, ์ก์ ๋๋กญ๋ค์ดโ๊ฐ ๋ฐ๋ก ํ ์ด๋ธ๊ณผ ์ธ๋ฑ์ค๊ฐ ์ง์ํด์ผ ํ ํํฐ์ ๋๋ค. ๊ทธ๋์ผ ๋ณผ๋ฅจ์ด ์ฆ๊ฐํด๋ ๊ด๋ฆฌ์ ๊ฒฝํ์ด ๋น ๋ฅด๊ฒ ์ ์ง๋ฉ๋๋ค.
ํํฐ์ ๋์ด ๊ฐ์น๊ฐ ์๋์ง ํ๋จํ๋ ๋ฐฉ๋ฒ
ํํฐ์ ๋์ด ๊ฐ์ฌ ๋ก๊ทธ์ ๋ํด ๊ธฐ๋ณธ ๊ถ์ฅ ์ฌํญ์ ์๋๋๋ค. ์ผ์์ ์ธ ์ฟผ๋ฆฌ์ ๋ฃจํด ์ ์ง๋ณด์๊ฐ ์๋ก ์ถฉ๋ํ๊ธฐ ์์ํ ๋งํผ ํ๋์ ํ ์ด๋ธ์ด ์ปค์ก์ ๋ ๊ฐ์น๊ฐ ์์ต๋๋ค.
๊ฐ๋จํ ์ฌ์ด์ฆ ๊ธฐ์ค: ์ด๋ฒคํธ ํ ์ด๋ธ์ด ์์ฒ๋ง ํ์ ๋๋ฌํ๋ฉด ์ธก์ ํด๋ณผ ๊ฐ์น๊ฐ ์์ต๋๋ค. ํ ์ด๋ธ๊ณผ ์ธ๋ฑ์ค๊ฐ ์์ญ ๊ธฐ๊ฐ๋ฐ์ดํธ๋ก ์ปค์ง๋ฉด, ๋จ์ํ ๋ ์ง ๋ฒ์ ๊ฒ์์กฐ์ฐจ ๋๋ ค์ง๊ฑฐ๋ ์์ธก ๋ถ๊ฐ๋ฅํด์ง ์ ์์ต๋๋ค. ๋์คํฌ์์ ๋ ๋ง์ ๋ฐ์ดํฐ ํ์ด์ง๋ฅผ ์ฝ๊ณ ์ธ๋ฑ์ค ์ ์ง๋น์ฉ์ด ์ปค์ง๊ธฐ ๋๋ฌธ์ ๋๋ค.
๊ฐ์ฅ ๋ช ํํ ์ฟผ๋ฆฌ ์ ํธ๋ ์์ฃผ ์์ ์๊ฐ ์กฐ๊ฐ(์ง๋ ํ๋ฃจ, ์ง๋ ์ฃผ)์ ์์ฒญํ๋ฉด์๋ PostgreSQL์ด ์ฌ์ ํ ํ ์ด๋ธ์ ๋ง์ ๋ถ๋ถ์ ๊ฑด๋๋ฆด ๋์ ๋๋ค. "์ต๊ทผ ํ๋" ํ๋ฉด์ด ๋๋ฆฌ๊ฑฐ๋ ๋ ์ง+์ฌ์ฉ์, ์ก์ ํ์ , ์ํฐํฐ ID๋ก ํํฐํ ๊ฐ์ฌ๊ฐ ๋๋ฆด ๋์ ๋๋ค. ์ฟผ๋ฆฌ ๊ณํ์์ ํฐ ์ค์บ์ด ๋ณด์ด๊ฑฐ๋ ๋ฒํผ ์ฝ๊ธฐ๊ฐ ์ง์์ ์ผ๋ก ๋๋ค๋ฉด ๋ถํ์ํ ๋ฐ์ดํฐ๋ฅผ ์ฝ๊ณ ์๋ ๊ฒ์ ๋๋ค.
์ ์ง๋ณด์ ์ ํธ๋ ์ค์ํฉ๋๋ค:
- VACUUM๊ณผ autovacuum์ด ์์ ๋ณด๋ค ํจ์ฌ ์ค๋ ๊ฑธ๋ฆฐ๋ค.
- Autovacuum์ด ๋ค์ฒ์ง๊ณ ์ฃฝ์ ํํ(๋ธ๋กํธ)์ด ์์ธ๋ค.
- ํนํ ๋ค์ค ์ปฌ๋ผ ์ธ๋ฑ์ค๊ฐ ์์๋ณด๋ค ๋น ๋ฅด๊ฒ ์ปค์ง๋ค.
- ์ ์ง๋ณด์์ ํธ๋ํฝ์ด ๊ฒน์น ๋ ์ ๊ธ ๊ฒฝํฉ์ด ๋์ ๋๊ฒ ๋๋ค.
์ด์ ๋น์ฉ์ ํ์ ํํฐ์ ๋์ผ๋ก ๋ฐ์ด๋ฃ๋ ๋๋ฆฐ ํ๋ฆ์ ๋๋ค. ๋ฐฑ์ ๊ณผ ๋ณต์์ด ๋๋ ค์ง๊ณ ์ ์ฅ๊ณต๊ฐ์ด ์ฆ๊ฐํ๋ฉฐ, ํฐ DELETE๊ฐ ๋ธ๋กํธ์ ์ถ๊ฐ vacuum ์์ ์ ๋ง๋ค์ด ๋ณด์กด ์์ ์ด ๋น์ธ์ง๋๋ค.
์ฃผ๋ ๋ชฉํ๊ฐ ๋ช ํํ ๋ณด์กด ์ ์ฑ ๊ณผ "์ต๊ทผ ๊ธฐ๊ฐ" ์ฟผ๋ฆฌ์ ๊ฐ์์ด๋ผ๋ฉด ํํฐ์ ๋์ ์ง์งํ๊ฒ ๊ณ ๋ คํ ๊ฐ์น๊ฐ ์์ต๋๋ค. ๋ฐ๋๋ก ํ ์ด๋ธ ๊ท๋ชจ๊ฐ ์ ๋นํ๊ณ ์ธ๋ฑ์ค๊ฐ ์ ๋์ด ์์ด ์ฟผ๋ฆฌ๊ฐ ์ด๋ฏธ ๋น ๋ฅด๋ค๋ฉด, ํํฐ์ ๋์ ๋ช ํํ ์ด๋ ์์ด ๋ณต์ก์ฑ๋ง ๋ํ ์ ์์ต๋๋ค.
์ด๋ฒคํธ ๋ฐ ๊ฐ์ฌ ํ ์ด๋ธ์ ์ ํฉํ ํํฐ์ ๋ ์ต์
๋๋ถ๋ถ์ ๊ฐ์ฌ ๋ฐ ์ด๋ฒคํธ ๋ฐ์ดํฐ์๋ ์๊ฐ์ ์ํ ๋ฒ์ ํํฐ์ ๋(range by time)์ด ๊ฐ์ฅ ๋จ์ํ๊ณ ์ ํฉํ ์ ํ์ ๋๋ค. ๋ก๊ทธ๋ ์๊ฐ ์์๋ก ๋ค์ด์ค๊ณ , ์ฟผ๋ฆฌ๋ ์ข ์ข "์ต๊ทผ 24์๊ฐ" ๋๋ "์ต๊ทผ 30์ผ" ๊ฐ์ ์๊ฐ ์ฐฝ์ ์ด์ ์ ๋ง์ถ๋ฉฐ, ๋ณด์กด๋ ๋ณดํต ์๊ฐ ๊ธฐ๋ฐ์ ๋๋ค. ์๊ฐ ํํฐ์ ์ ์ฌ์ฉํ๋ฉด ์ค๋๋ ๋ฐ์ดํฐ๋ฅผ ๋๋กญํ๋ ๊ฒ์ด ํฐ DELETE๋ฅผ ์คํํ๋ ๊ฒ๋ณด๋ค ํจ์ฌ ๋น ๋ฆ ๋๋ค.
์๊ฐ ๋ฒ์ ํํฐ์ ๋์ ์ธ๋ฑ์ค๋ ๋ ์๊ณ ์ง์ค๋๊ฒ ์ ์งํฉ๋๋ค. ๊ฐ ํํฐ์ ์ ์์ฒด ์ธ๋ฑ์ค๋ฅผ ๊ฐ์ง๋ฏ๋ก ์ง๋์ฃผ๋ฅผ ์กฐํํ๋ ์ฟผ๋ฆฌ๋ ์๋ ์น๋ฅผ ์์ฐ๋ฅด๋ ๊ฑฐ๋ํ ์ธ๋ฑ์ค๋ฅผ ํ์ ํ์๊ฐ ์์ต๋๋ค.
๋ค๋ฅธ ํํฐ์ ๋ ๋ฐฉ์๋ ์์ง๋ง, ๋ก๊ทธ ๋ฐ ๊ฐ์ฌ ์ฌ๋ก์๋ ๋ ์ ํฉํฉ๋๋ค:
- ๋ฆฌ์คํธ(List, ์: ํ ๋ํธ๋ณ)๋ ์์์ ๋งค์ฐ ํฐ ํ ๋ํธ๊ฐ ์๊ณ ์ฟผ๋ฆฌ๊ฐ ์ฃผ๋ก ํ ํ ๋ํธ ๋ด์์ ์ด๋ฃจ์ด์ง ๋ ์ ํจํ ์ ์์ต๋๋ค. ํ ๋ํธ๊ฐ ์๋ฐฑ~์์ฒ ๊ฐ๊ฐ ๋๋ฉด ๊ด๋ฆฌ๊ฐ ๊ณ ํต์ค๋ฌ์์ง๋๋ค.
- ํด์(Hash)๋ ์๊ฐ ๊ธฐ๋ฐ ์ฟผ๋ฆฌ๊ฐ ์๊ณ ์ฐ๊ธฐ๋ฅผ ๊ณ ๋ฅด๊ฒ ๋ถ์ฐํ๊ณ ์ถ์ ๋ ๋์์ด ๋ฉ๋๋ค. ๊ฐ์ฌ ๋ก๊ทธ์์๋ ๋ณด์กด ๋ฐ ์๊ฐ ๊ธฐ๋ฐ ํ์์ ์ด๋ ต๊ฒ ํ๋ฏ๋ก ๋ ์ผ๋ฐ์ ์ ๋๋ค.
- ์๋ธํํฐ์ ๋(์๊ฐ + ํ ๋ํธ)์ ๊ฐ๋ ฅํ ์ ์์ง๋ง ๋ณต์ก๋๊ฐ ๋น ๋ฅด๊ฒ ์ฆ๊ฐํฉ๋๋ค. ๋งค์ฐ ๋์ ๋ณผ๋ฅจ ์์คํ ๊ณผ ์๊ฒฉํ ํ ๋ํธ ๋ถ๋ฆฌ๊ฐ ํ์ํ ๊ฒฝ์ฐ์ ์ฃผ๋ก ์ฌ์ฉ๋ฉ๋๋ค.
์๊ฐ ๋ฒ์๋ฅผ ์ ํํ๋ค๋ฉด, ํ์๊ณผ ๋ณด์กด ๋ฐฉ์์ ๋ง๋ ํํฐ์ ํฌ๊ธฐ๋ฅผ ๊ณ ๋ฅด์ธ์. ๋งค์ฐ ๋์ ๋ณผ๋ฅจ์ด๋ ์๊ฒฉํ ๋ณด์กด์ด ํ์ํ๋ฉด ์ผ๊ฐ ํํฐ์ ์ด ์๋ฏธ๊ฐ ์๊ณ , ์ค๊ฐ ๋ณผ๋ฅจ์ด๋ฉด ์๊ฐ ํํฐ์ ์ด ๊ด๋ฆฌํ๊ธฐ ์ฝ์ต๋๋ค.
์ค์ฉ์ ์: ๊ด๋ฆฌ์ํ์ด ๋งค์ผ ์คํจํ ๋ก๊ทธ์ธ ์๋๋ฅผ ํ์ธํ๊ณ ์ง๋ 7์ผ๋ก ํํฐํ๋ค๋ฉด, ์ผ๋ณ ๋๋ ์ฃผ๋ณ ํํฐ์ ์ ์ฟผ๋ฆฌ๊ฐ ์ต์ ํํฐ์ ๋ง ๊ฑด๋๋ฆฌ๊ฒ ํ์ฌ PostgreSQL์ด ๋๋จธ์ง๋ฅผ ๋ฌด์ํ๊ฒ ํฉ๋๋ค.
์ด๋ค ์ ๊ทผ์ ์ ํํ๋ , ๋ฏธ๋ ํํฐ์ ์์ฑ, ๋ฆ๊ฒ ๋์ฐฉํ๋ ์ด๋ฒคํธ ์ฒ๋ฆฌ, ๊ฒฝ๊ณ(์ผ ๋ง๊ฐ, ์ ๋ง๊ฐ)์์์ ๋์ ์ ์ ๊ฐ์ ์ง๋ฃจํ ๋ถ๋ถ์ ๊ณํํ์ธ์. ์ด๋ฌํ ๋ฃจํด์ด ๋จ์ํ๊ฒ ์ ์ง๋ ๋ ํํฐ์ ๋์ ๊ฐ์น๋ฅผ ๋ฐํํฉ๋๋ค.
์ ์ ํ ํํฐ์ ํค ์ ํ ๋ฐฉ๋ฒ
์ข์ ํํฐ์ ํค๋ ๋ค์ด์ด๊ทธ๋จ์์ ๋ฐ์ดํฐ๊ฐ ์ด๋ป๊ฒ ๋ณด์ด๋์ง๊ฐ ์๋๋ผ ํ ์ด๋ธ์ ์ด๋ป๊ฒ ์ฝ๋์ง์ ๋ง์์ผ ํฉ๋๋ค.
์ด๋ฒคํธ ๋ฐ ๊ฐ์ฌ ๋ก๊ทธ์ ๊ฒฝ์ฐ ๊ด๋ฆฌ์ ํจ๋์์ ์ฌ๋๋ค์ด ์ฒซ ๋ฒ์งธ๋ก ์ด๋ค ํํฐ๋ฅผ ์ฌ์ฉํ๋์ง๋ถํฐ ์์ํ์ธ์. ๋๋ถ๋ถ์ ํ์ ์๊ฐ ๋ฒ์(์ต๊ทผ 24์๊ฐ, ์ต๊ทผ 7์ผ, ์ฌ์ฉ์ ์ง์ ๋ ์ง)๋ฅผ ์ฌ์ฉํฉ๋๋ค. ์ด๊ฒ์ด ์ฌ์ค์ด๋ผ๋ฉด ์๊ฐ ๊ธฐ๋ฐ ํํฐ์ ๋์ด ๊ฐ์ฅ ํฌ๊ณ ์์ธก ๊ฐ๋ฅํ ์ด๋์ ์ค๋๋ค.
ํค๋ฅผ ์ฅ๊ธฐ์ ์ธ ์ฝ์์ผ๋ก ๋ค๋ฃจ์ธ์. ์๋ ๊ฐ ๊ณ์ํ ์ฟผ๋ฆฌ๋ฅผ ์ต์ ํํ๋ ๊ฒ์ ๋๋ค.
์ฌ๋๋ค์ด ๋จผ์ ์ฐ๋ "์ฒซ ๋ฒ์งธ ํํฐ"๋ก ์์ํ์ธ์
๋๋ถ๋ถ์ ๊ด๋ฆฌ์ ํ๋ฉด์ ์๊ฐ ๋ฒ์์ ์ ํ์ ์ฌ์ฉ์, ์ก์ , ์ํ, ๋ฆฌ์์ค๋ก ๊ตฌ์ฑ๋ฉ๋๋ค. ๊ฒฐ๊ณผ๋ฅผ ์ผ์ฐ ๊พธ์คํ ์ขํ๋ ํญ๋ชฉ์ผ๋ก ํํฐ์ ํ์ธ์.
๊ฐ๋จํ ํ์ค ๊ฒ์ฌ:
- ๊ธฐ๋ณธ ๋ทฐ๊ฐ "์ต๊ทผ ์ด๋ฒคํธ"๋ผ๋ฉด ํ์์คํฌํ๋ฅผ ๊ธฐ์ค์ผ๋ก ํํฐ์ ํ์ธ์.
- ๊ธฐ๋ณธ ๋ทฐ๊ฐ "ํ ํ
๋ํธ/๊ณ์ ์ ์ด๋ฒคํธ"๋ผ๋ฉด
tenant_id๊ฐ ์๋ฏธ๊ฐ ์์ ์ ์์ง๋ง, ํ ๋ํธ๊ฐ ์ถฉ๋ถํ ์ปค์ผ ๊ทธ ์ ํ์ด ์ ๋นํ๋ฉ๋๋ค. - ์ฒซ ๋จ๊ณ๊ฐ ํญ์ "์ฌ์ฉ์ ์ ํ"์ด๋ผ๋ฉด
user_id๋ก์ ํํฐ์ ๋์ ์ ํน์ ์ผ ์ ์์ผ๋ ๊ด๋ฆฌํด์ผ ํ ํํฐ์ ์๊ฐ ์ง๋์น๊ฒ ๋์ด๋ฉ๋๋ค.
๊ณ ์นด๋๋๋ฆฌํฐ ํค๋ฅผ ํผํ์ธ์
ํํฐ์
๋์ ๊ฐ ํํฐ์
์ด ์๋ฏธ ์๋ ๋ฐ์ดํฐ ์ฒญํฌ์ผ ๋ ๊ฐ์ฅ ์ ์๋ํฉ๋๋ค. user_id, session_id, request_id, device_id ๊ฐ์ ํค๋ ์์ฒ~์๋ฐฑ๋ง์ ํํฐ์
์ ๋ง๋ค ์ ์์ต๋๋ค. ์ด๋ ๋ฉํ๋ฐ์ดํฐ ์ค๋ฒํค๋๋ฅผ ์ฆ๊ฐ์ํค๊ณ ์ ์ง๋ณด์๋ฅผ ๋ณต์กํ๊ฒ ํ๋ฉฐ ์ฟผ๋ฆฌ ํ๋๋์ ๋๋ฆฌ๊ฒ ํ ์ ์์ต๋๋ค.
์๊ฐ ๊ธฐ๋ฐ ํํฐ์ ์ ํํฐ์ ์๋ฅผ ์์ธก ๊ฐ๋ฅํ๊ฒ ์ ์งํฉ๋๋ค. ์ผ๊ฐ, ์ฃผ๊ฐ, ์๊ฐ ์ค์์ ๋ณผ๋ฅจ์ ๋ฐ๋ผ ์ ํํ์ธ์. ๋๋ฌด ์ ์ผ๋ฉด(์ฐ๊ฐ) ๋์์ด ์ ๊ณ , ๋๋ฌด ๋ง์ผ๋ฉด(์๊ฐ๋ณ) ์ค๋ฒํค๋๊ฐ ๋นจ๋ฆฌ ์ปค์ง๋๋ค.
์ฌ๋ฐ๋ฅธ ํ์์คํฌํ ์ ํ: created_at vs occurred_at
์๊ฐ์ด ๋ฌด์์ ์๋ฏธํ๋์ง ๋ช ํํ ํ์ธ์:
occurred_at: ์ด๋ฒคํธ๊ฐ ์ ํ์์ ์ค์ ๋ก ๋ฐ์ํ ์๊ฐ.created_at: ๋ฐ์ดํฐ๋ฒ ์ด์ค๊ฐ ์ด๋ฅผ ๊ธฐ๋กํ ์๊ฐ.
๊ฐ์ฌ์ ๊ฒฝ์ฐ ๋ณดํต "์ธ์ ๊ฐ ๋ฐ์ํ๋๊ฐ"๊ฐ ์ค์ํฉ๋๋ค. ํ์ง๋ง ๋ฐฐ๋ฌ ์ง์ฐ(์คํ๋ผ์ธ ๋ชจ๋ฐ์ผ, ์ฌ์๋, ํ) ๋๋ฌธ์ occurred_at์ด ๋ฆ๊ฒ ๋ค์ด์ค๋ ๊ฒฝ์ฐ๊ฐ ์์ต๋๋ค. ๋ฆ์ ๋์ฐฉ์ด ํํ๋ฉด created_at์ผ๋ก ํํฐ์
๋ํ๊ณ occurred_at์ ํํฐ์ฉ ์ธ๋ฑ์ค๋ก ๋๋ ๊ฒ์ด ์ด์์ ๋ ์์ ์ ์ผ ์ ์์ต๋๋ค. ๋ค๋ฅธ ์ต์
์ ๋ช
ํํ ๋ฐฑํ ์ ์ฑ
์ ์ ์ํ๊ณ ์ค๋๋ ํํฐ์
์ด ๊ฐ๋ ๋ฆ์ ์ด๋ฒคํธ๋ฅผ ๋ฐ๋ ๊ฒ์ ํ์ฉํ๋ ๊ฒ์
๋๋ค.
๋ํ ์๊ฐ์ ์ ์ฅํ๋ ๋ฐฉ์์ ๊ฒฐ์ ํ์ธ์. ์ผ๊ด๋ ํ์
(๋ณดํต timestamptz)์ ์ฌ์ฉํ๊ณ UTC๋ฅผ ์์ค ์ค๋ธ ํธ๋ฃจ์ค๋ก ์ผ์ผ์ธ์. ๋ทฐ์ด์ ํ์์กด์ UI์์ ๋ ๋๋งํ์ธ์. ์ด๋ ๊ฒ ํ๋ฉด ํํฐ์
๊ฒฝ๊ณ๊ฐ ์์ ์ ์ด๊ณ ์๋จธํ์ ๊ฐ์ ๋ฌธ์ ๊ฐ ์ค์ด๋ญ๋๋ค.
๋จ๊ณ๋ณ: ํํฐ์ ๋ ๊ณํ ๋ฐ ๋กค์์
ํํฐ์ ๋์ ๋น ๋ฅธ ์์ ์ด ์๋๋ผ ์์ ๋ง์ด๊ทธ๋ ์ด์ ํ๋ก์ ํธ๋ก ์ทจ๊ธํ ๋ ๊ฐ์ฅ ์ฝ์ต๋๋ค. ๋ชฉํ๋ ๋จ์ํ ์ฐ๊ธฐ, ์์ธก ๊ฐ๋ฅํ ์ฝ๊ธฐ, ๊ทธ๋ฆฌ๊ณ ๋ณด์กด์ด ์ผ์์ ์ธ ์์ ์ด ๋๋ ๊ฒ์ ๋๋ค.
์ค์ฉ์ ์ธ ๋กค์์ ๊ณํ
-
๋ณผ๋ฅจ์ ๋ง๋ ํํฐ์ ํฌ๊ธฐ๋ฅผ ์ ํํ์ธ์. ์๊ฐ ํํฐ์ ์ ์ ์์ญ๋ง ํ ์์ค์์ ๋์ฒด๋ก ๊ด์ฐฎ์ต๋๋ค. ์๊ฐ ์์ฒ๋ง ํ์ด ๋ค์ด์จ๋ค๋ฉด ์ฃผ๊ฐ ๋๋ ์ผ๊ฐ ํํฐ์ ์ด ์ธ๋ฑ์ค๋ฅผ ๋ ์๊ฒ ์ ์งํ๊ณ VACUUM ์์ ์ ๋ถ๋ฆฌํ๋ ๋ฐ ์ ๋ฆฌํฉ๋๋ค.
-
ํํฐ์ ํ๋ ํ ์ด๋ธ์ ํค์ ์ ์ฝ ์กฐ๊ฑด์ ์ค๊ณํ์ธ์. PostgreSQL์์๋ ๊ณ ์ ์ ์ฝ์ด ํํฐ์ ํค๋ฅผ ํฌํจํด์ผ ํ๋ ๊ฒฝ์ฐ๊ฐ ์์ต๋๋ค. ํํ ํจํด์ ํํฐ์ ํค๋ก
created_at์ ์ฌ์ฉํ๊ณid๋ฅผ ํจ๊ป ํฌํจํ(created_at, id)๊ฐ์ ๋ณตํฉ ์ ์ฝ์ ๋๋ ๊ฒ์ ๋๋ค. ์ด๋ ๊ฒ ํ๋ฉด ๋์ค์ ๊ธฐ๋ํ๋ ์ ์ฝ์ด ํ์ฉ๋์ง ์์ ๋นํฉํ๋ ์ผ์ ํผํ ์ ์์ต๋๋ค. -
๋ฏธ๋ ํํฐ์ ์ ํ์ ์ ์ ๋ง๋์ธ์. ํํฐ์ ์ด ์์ด ์ฝ์ ์ด ์คํจํ์ง ์๋๋ก ๋ฏธ๋ฆฌ ์์ฑํ์ธ์. ์๋ฅผ ๋ค์ด 2~3๊ฐ์์น ๋ฏธ๋ ํํฐ์ ์ ๋ฏธ๋ฆฌ ๋ง๋๋ ๋ฃจํด์ ์ ํด๋๋ฉด ์์ ํฉ๋๋ค.
-
ํํฐ์ ๋ณ ์ธ๋ฑ์ค๋ ์๊ณ ์๋์ ์ผ๋ก ์ ์งํ์ธ์. ํํฐ์ ๋์ด ์ธ๋ฑ์ค๋ฅผ ๊ณต์ง๋ก ๋ง๋ค์ด์ฃผ์ง๋ ์์ต๋๋ค. ๋๋ถ๋ถ์ ์ด๋ฒคํธ ํ ์ด๋ธ์ ํํฐ์ ํค ์ธ์ ํ์์(
actor_id), ์ํฐํฐ(entity_id), ์ด๋ฒคํธ ํ์ ๊ฐ์ ์ค์ ๊ด๋ฆฌ์ ํํฐ์ ๋ง๋ 1~2๊ฐ์ ์ธ๋ฑ์ค๋ฅผ ํ์๋ก ํฉ๋๋ค. "ํน์ ๋ชฐ๋ผ" ์์ ์ธ๋ฑ์ค๋ ํผํ์ธ์. ํ์ํ๋ฉด ์ ํํฐ์ ์ ์ถ๊ฐํ๊ณ ์ค๋๋ ํํฐ์ ์ ๋ฐฑํ(backfill)ํ์ธ์. -
๋ณด์กด์ ํ ์ญ์ ๊ฐ ์๋๋ผ ํํฐ์ ๋๋กญ์ ์ค์ฌ์ผ๋ก ๊ณํํ์ธ์. ์๋ฅผ ๋ค์ด 180์ผ์ ๋ณด๊ดํ๋ค๋ฉด ์ค๋๋ ํํฐ์ ์ ๋๋กญํ๋ฉด ๋๋ DELETE๋ณด๋ค ๋น ๋ฆ ๋๋ค. ๋๊ฐ ์ธ์ ๋ณด์กด์ ์คํํ๋์ง, ๊ทธ๋ฆฌ๊ณ ๊ฒ์ฆ ๋ฐฉ๋ฒ๊น์ง ๋ฌธ์ํํ์ธ์.
์์ ์
๊ฐ์ฌ ํ
์ด๋ธ์ด ์ฃผ๋น 500๋ง ํ์ ๋ฐ๋๋ค๋ฉด created_at ๊ธฐ๋ฐ์ ์ฃผ๊ฐ ํํฐ์
์ด ํฉ๋ฆฌ์ ์์์
๋๋ค. 8์ฃผ์น ๋ฏธ๋ ํํฐ์
์ ๋ง๋ค๊ณ ํํฐ์
๋น ํ์์ ๊ฒ์์ฉ ์ธ๋ฑ์ค์ ์ํฐํฐ ID์ฉ ์ธ๋ฑ์ค ๋ฑ ๋ ๊ฐ์ ์ธ๋ฑ์ค๋ฅผ ์ ์งํ์ธ์. ๋ณด์กด ๊ธฐ๊ฐ์ด ๋๋๋ฉด ์๋ฐฑ๋ง ํ์ ์ญ์ ํ๋ ๋์ ๊ฐ์ฅ ์ค๋๋ ์ฃผ๊ฐ ํํฐ์
์ ๋๋กญํ์ธ์.
๋ด๋ถ ๋๊ตฌ๋ฅผ AppMaster๋ก ๋ง๋ ๋ค๋ฉด ํํฐ์ ํค์ ์ ์ฝ์ ์ผ์ฐ ๊ฒฐ์ ํด์ ๋ฐ์ดํฐ ๋ชจ๋ธ๊ณผ ์์ฑ๋ ์ฝ๋๊ฐ ๊ฐ์ ์ ์ ๋ฅผ ๋ฐ๋ฅด๋๋ก ํ๋ ๊ฒ์ด ๋์์ด ๋ฉ๋๋ค.
ํํฐ์ ๋์ด ๊ด๋ฆฌ์ ํจ๋ ํํฐ์ ๋ฏธ์น๋ ์ํฅ
๋ก๊ทธ ํ ์ด๋ธ์ ํํฐ์ ๋ํ๋ฉด ๊ด๋ฆฌ์ ํจ๋ ํํฐ๋ ๋จ์ํ UI ์์๊ฐ ์๋๋๋ค. ํํฐ๊ฐ ์ฟผ๋ฆฌ๊ฐ ๋ช ๊ฐ์ ํํฐ์ ์ ๊ฑด๋๋ฆด์ง ๋๋ ๋ช ๋ฌ์น๋ฅผ ์ค์บํ ์ง๋ฅผ ๊ฒฐ์ ํ๋ ์ฃผ์ ์์๊ฐ ๋ฉ๋๋ค.
๊ฐ์ฅ ์ค์ฉ์ ์ธ ๋ณํ๋: ์ด์ ์๊ฐ์ ์ ํ์ ์ผ ์ ์์ต๋๋ค. ์ฌ์ฉ์๊ฐ ๋ ์ง ๋ฒ์ ์์ด ๋ฌด์ฐจ๋ณ ๊ฒ์์ ํ์ฉํ๋ฉด PostgreSQL์ด ๋ชจ๋ (๋๋ ๋ง์) ํํฐ์ ์ ํ์ธํด์ผ ํ ์ ์์ต๋๋ค. ๊ฐ ํ์ธ์ด ๋น ๋ฅด๋๋ผ๋ ๋ง์ ํํฐ์ ์ ์ฌ๋ ๊ฒ์ ์ค๋ฒํค๋๋ฅผ ์ถ๊ฐํด ํ์ด์ง๊ฐ ๋๋ ค์ง๊ฒ ํฉ๋๋ค.
์ค๋ฌด ๊ท์น: ๋ก๊ทธ์ ๊ฐ์ฌ ๊ฒ์์๋ ์๊ฐ ๋ฒ์๋ฅผ ์๊ตฌํ๊ณ ๊ธฐ๋ณธ๊ฐ์ "์ต๊ทผ 24์๊ฐ"์ฒ๋ผ ํฉ๋ฆฌ์ ์ผ๋ก ์ค์ ํ์ธ์. ๋๊ตฐ๊ฐ๊ฐ ์ ๋ง๋ก "์ ์ฒด ๊ธฐ๊ฐ"์ ์ํ๋ฉด ์๋์ ์ธ ์ ํ์ผ๋ก ๋ง๋ค๊ณ ๋๋ฆด ์ ์์์ ๊ฒฝ๊ณ ํ์ธ์.
ํํฐ์ ํ๋ฃจ๋๊ณผ ํํฐ๋ฅผ ์ผ์น์ํค์ธ์
ํํฐ์
ํ๋ฃจ๋์ WHERE ์ ์ด PostgreSQL์ด ํ์ฉํ ์ ์๋ ํํ๋ก ํํฐ์
ํค๋ฅผ ํฌํจํ ๋๋ง ๋์๋ฉ๋๋ค. created_at BETWEEN X AND Y ๊ฐ์ ํํฐ๋ ๊น๋ํ๊ฒ ํ๋ฃจ๋๋ฉ๋๋ค. ํ์์คํฌํ๋ฅผ ๋ ์ง๋ก ์บ์คํ
ํ๊ฑฐ๋ ์ปฌ๋ผ์ ํจ์๋ก ๊ฐ์ธ๋ ํจํด, ๋๋ ํํฐ์
ํค์ ๋ค๋ฅธ ์๊ฐ ํ๋๋ฅผ ์ฌ์ฉํ๋ ํํฐ๋ ํ๋ฃจ๋์ ๋ฐฉํดํฉ๋๋ค.
๊ฐ ํํฐ์ ๋ด๋ถ์์๋ ์ธ๋ฑ์ค๊ฐ ์ฌ๋๋ค์ด ์ค์ ๋ก ์ด๋ป๊ฒ ํํฐํ๋์ง์ ์ผ์นํด์ผ ํฉ๋๋ค. ์ค๋ฌด์ ์ผ๋ก ์๊ฐ ํ๋ฌ์ค ํ๋์ ์กฐ๊ฑด(ํ ๋ํธ/์ํฌ์คํ์ด์ค, ์ฌ์ฉ์, ์ก์ ํ์ , ์ํฐํฐ ID, ์ํ)์ด ์์ฃผ ์ค์ํฉ๋๋ค.
์ ๋ ฌ ๋ฐ ํ์ด์ง: ์๊ฒ ์ ์งํ์ธ์
ํํฐ์ ๋์ด ๊น์ ํ์ด์ง ๋ฌธ์ ๋ฅผ ์ค์ค๋ก ํด๊ฒฐํ์ง๋ ์์ต๋๋ค. ๊ด๋ฆฌ์ ํจ๋์ด ์ต์ ์ ์ ๋ ฌ์ ์ฌ์ฉ์๊ฐ ํ์ด์ง 5000์ผ๋ก ๊ฑด๋๋ด๋ค๋ฉด ๊น์ OFFSET ๊ธฐ๋ฐ ํ์ด์ง์ ์ฌ์ ํ ๋ง์ ํ์ ๊ฑด๋๋ฐ๊ฒ ํ์ฌ ๋๋ฆฝ๋๋ค.
๋ก๊ทธ์๋ ์ปค์ํ ํ์ด์ง์ด ๋ ์ ํฉํฉ๋๋ค: "์ด (ํ์์คํฌํ,id) ์ด์ ์ ์ด๋ฒคํธ๋ฅผ ๋ถ๋ฌ์ค๊ธฐ"์ฒ๋ผ์. ์ด๋ ๊ฒ ํ๋ฉด ์ธ๋ฑ์ค๋ฅผ ์ฌ์ฉํ๊ณ ํฐ OFFSET์ ๊ฑด๋๋ฐ๋ ๋น์ฉ์ ํผํ ์ ์์ต๋๋ค.
ํ๋ฆฌ์ ๋ ๋์์ด ๋ฉ๋๋ค. ๋ช ๊ฐ์ง ์ต์ (์ต๊ทผ 24์๊ฐ, ์ต๊ทผ 7์ผ, ์ค๋, ์ด์ , ์ฌ์ฉ์ ์ง์ ๋ฒ์)์ ์ ๊ณตํ๋ฉด ์ฐ๋ฐ์ ์ธ "์ ์ฒด ์ค์บ"์ ์ค์ด๊ณ ๊ด๋ฆฌ์ ๊ฒฝํ์ ์์ธก ๊ฐ๋ฅํ๊ฒ ๋ง๋ญ๋๋ค.
ํํ ์ค์์ ํจ์
๋๋ถ๋ถ์ ํํฐ์ ๋ ํ๋ก์ ํธ๋ ๋จ์ํ ์ด์ ๋ก ์คํจํฉ๋๋ค: ํํฐ์ ๋ ์์ฒด๋ ์๋ํ์ง๋ง ์ฟผ๋ฆฌ์ ๊ด๋ฆฌ์ UI๊ฐ ๊ทธ๊ฒ๊ณผ ๋ง์ง ์์ต๋๋ค. ํํฐ์ ๋์ด ํจ๊ณผ๋ฅผ ๋ฐํํ๋ ค๋ฉด ์ค์ ํํฐ์ ์ค์ ๋ณด์กด ๊ท์น ์ฃผ์๋ก ์ค๊ณํ์ธ์.
1) ์๋ชป๋ ์๊ฐ ์ปฌ๋ผ์ผ๋ก ํํฐ์ ๋
ํํฐ์
ํ๋ฃจ๋์ WHERE ์ ์ด ํํฐ์
ํค์ ์ผ์นํ ๋๋ง ๋ฐ์ํฉ๋๋ค. ํํ ์ค์๋ created_at์ผ๋ก ํํฐ์
์ ๋๋ ๋ค ๊ด๋ฆฌ์ ํจ๋์ด event_time์ผ๋ก ํํฐ๋งํ๋ ๊ฒฝ์ฐ์
๋๋ค. ์ง์ํ์ด ํญ์ "10:00~10:15 ์ฌ์ด์ ๋ฌด์จ ์ผ์ด ์์๋"๋ฅผ ๋ฌป๋๋ฐ ํ
์ด๋ธ์ด ์์ ์๊ฐ์ผ๋ก ํํฐ์
๋์ด ์์ผ๋ฉด ๊ธฐ๋๋ณด๋ค ๋ ๋ง์ ๋ฐ์ดํฐ๋ฅผ ๊ฑด๋๋ฆด ์ ์์ต๋๋ค.
2) ๋๋ฌด ๋ง์ ์์ ํํฐ์ ์์ฑ
์๊ฐ๋น(๋๋ ๋ ์์) ํํฐ์ ์ ๋ณด๊ธฐ์๋ ๊น๋ํ์ง๋ง ์ค๋ฒํค๋๊ฐ ํฝ๋๋ค: ๊ด๋ฆฌํ ๊ฐ์ฒด ์ฆ๊ฐ, ์ฟผ๋ฆฌ ํ๋๋์ ์์ ์ฆ๊ฐ, ์ธ๋ฑ์ค๋ ๊ถํ ๋๋ฝ ๊ฐ๋ฅ์ฑ ์ฆ๊ฐ. ๊ทน๋จ์ ์ธ ์ฐ๊ธฐ๋๊ณผ ์๊ฒฉํ ๋ณด์กด ์๊ตฌ๊ฐ ์๋ค๋ฉด ์ผ๊ฐ ๋๋ ์๊ฐ ํํฐ์ ์ด ์ด์์ ๋ ์ฌ์ด ๊ฒฝ์ฐ๊ฐ ๋ง์ต๋๋ค.
3) ์ ์ญ ๊ณ ์ ์ฑ์ด ์ฌ์ ํ ์๋ํ๋ค๊ณ ๊ฐ์
ํํฐ์
๋๋ ํ
์ด๋ธ์๋ ์ ์ฝ์ด ์์ต๋๋ค: ์ผ๋ถ ๊ณ ์ ์ธ๋ฑ์ค๋ ํํฐ์
ํค๋ฅผ ํฌํจํด์ผ ์ ์ฒด ํํฐ์
์ ๋ํด ๋ณด์ฅํ ์ ์์ต๋๋ค. event_id๊ฐ ์ ์ญ์ ์ผ๋ก ์ ์ผํ๋ค๊ณ ๊ธฐ๋ํ๋ฉด ๋๋ ์ ์์ต๋๋ค. ์ ์ญ ๊ณ ์ ์๋ณ์๊ฐ ํ์ํ๋ฉด UUID๋ฅผ ์ฌ์ฉํ๊ณ ์ ํ๋ฆฌ์ผ์ด์
๋ ์ด์ด์์ ๊ฐ์ ํ๋ ๋ฐฉ๋ฒ์ ๊ณ ๋ คํ์ธ์.
4) ๊ด๋ฆฌ์ UI๊ฐ ์ ํ ์๋ ๊ฒ์์ ํ์ฉ
๊ด๋ฆฌ์ ํจ๋์ด ์น์ ํ ๊ฒ์ ์์๋ฅผ ์ ๊ณตํด์ ํํฐ ์์ด ์คํ๋๊ฒ ํ๋ฉด ํํฐ์ ๋ ๋ก๊ทธ ํ ์ด๋ธ์์๋ ๋ชจ๋ ํํฐ์ ์ ์ค์บํ๊ฒ ๋ ์ ์์ต๋๋ค. ๋ฉ์์ง ํ์ด๋ก๋์ ๋ํ ์์ ํ ์คํธ ๊ฒ์์ ํนํ ์ํํฉ๋๋ค. ๊ฐ๋๋ ์ผ์ ์ถ๊ฐํ์ธ์: ์๊ฐ ๋ฒ์๋ฅผ ํ์๋ก ํ๊ณ ๊ธฐ๋ณธ ๋ฒ์๋ฅผ ์ ํํ๋ฉฐ "์ ์ฒด ๊ธฐ๊ฐ"์ ์๋๋ ์ ํ์ผ๋ก ๋ง๋์ธ์.
5) ๋ณด์กด ๊ณํ(๋ฐ ํํฐ์ ๊ด๋ฆฌ ๊ณํ)์ด ์์
ํํฐ์ ๋์ด ์๋์ผ๋ก ๋ณด์กด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํด์ฃผ์ง๋ ์์ต๋๋ค. ์ ์ฑ ์ด ์์ผ๋ฉด ์ค๋๋ ํํฐ์ ์ด ์์ฌ ์ ์ฅ์ด ์ง์ ๋ถํด์ง๊ณ ์ ์ง๋ณด์๊ฐ ๋๋ ค์ง๋๋ค.
๊ฐ๋จํ ์ด์ ๊ท์น์ด ๋ณดํต ๋ฌธ์ ๋ฅผ ์๋ฐฉํฉ๋๋ค: ์์ ์ด๋ฒคํธ ๋ณด๊ด ๊ธฐ๊ฐ์ ์ ์ํ๊ณ , ๋ฏธ๋ ํํฐ์ ์์ฑ๊ณผ ์ค๋๋ ํํฐ์ ์ญ์ ๋ฅผ ์๋ํํ๋ฉฐ, ์ธ๋ฑ์ค๋ฅผ ์ผ๊ด๋๊ฒ ์ ์ฉํ๊ณ ํํฐ์ ์์ ๊ฒฝ๊ณ ๋ ์ง๋ฅผ ๋ชจ๋ํฐ๋งํ๋ฉฐ ๊ฐ์ฅ ๋๋ฆฐ ๊ด๋ฆฌ์ ํํฐ๋ฅผ ํ์ค์ ๋ฐ์ดํฐ ๋ณผ๋ฅจ์ผ๋ก ํ ์คํธํ์ธ์.
์ปค๋ฐํ๊ธฐ ์ ์ ํ์ธํ ๋น ๋ฅธ ์ฒดํฌ๋ฆฌ์คํธ
ํํฐ์ ๋์ ๊ฐ์ฌ ๋ก๊ทธ์ ํฐ ์ด๋์ ์ค ์ ์์ง๋ง ์ฃผ๊ธฐ์ ์ธ ์์ ์ด ๋์ด๋ฉ๋๋ค. ์คํค๋ง๋ฅผ ๋ณ๊ฒฝํ๊ธฐ ์ ์ ์ฌ๋๋ค์ด ์ค์ ๋ก ํ ์ด๋ธ์ ์ด๋ป๊ฒ ์ฌ์ฉํ๋์ง ์ ๊ฒํ์ธ์.
์ฃผ์ ๊ณ ์ฅ ์ง์ ์ ๋ํ ์งง์ ์ฒดํฌ๋ฆฌ์คํธ:
- ์๊ฐ ๋ฒ์๊ฐ ๊ธฐ๋ณธ ํํฐ์ธ์ง ํ์ธํ์ธ์. ๋๋ถ๋ถ์ ๊ด๋ฆฌ์ ์ฟผ๋ฆฌ๋ ๋ช ํํ ์ฐฝ(from/to)์ ํฌํจํฉ๋๋ค. ๋ฌด์ ํ ๊ฒ์์ด ํํ๋ฉด ํํฐ์ ํ๋ฃจ๋์ ํจ๊ณผ๊ฐ ์ค์ด๋ญ๋๋ค.
- ๋ณด์กด์ ํ ์ญ์ ๊ฐ ์๋๋ผ ํํฐ์ ๋๋กญ์ผ๋ก ๊ฐ์ ํ์ธ์. ์ค๋๋ ํํฐ์ ์ ๋๋กญํ๋ ๋ฐ ๋ถํธํจ์ด ์๋์ง ํ์คํ ํ์ธ์.
- ํํฐ์ ์๊ฐ ํฉ๋ฆฌ์ ์ธ์ง ์ถ์ ํ์ธ์. ์ฐ๊ฐ ํํฐ์ ์(์ผ๊ฐ/์ฃผ๊ฐ/์๊ฐ)๋ฅผ ๊ณ์ฐํด ๋๋ฌด ๋ง์ง๋, ๋๋ฌด ์ ์ง๋ ์๊ฒ ํ์ธ์.
- ์ธ๋ฑ์ค๊ฐ ์ค์ ์ฌ์ฉ ํํฐ์ ์ผ์นํ๋์ง ํ์ธํ์ธ์. ํํฐ์ ํค ์ธ์ ๊ณตํต ํํฐ์ ์ ๋ ฌ ์์๋ฅผ ์ง์ํ๋ ์ธ๋ฑ์ค๋ฅผ ํํฐ์ ๋ณ๋ก ์ ์งํ์ธ์.
- ํํฐ์ ์ด ์๋์ผ๋ก ์์ฑ๋๊ณ ๋ชจ๋ํฐ๋ง๋๋์ง ํ์ธํ์ธ์. ๋ฏธ๋ ํํฐ์ ์ ์์ฑํ๋ ์์ ์ด ์คํจํ๋ฉด ์ ์ ์๋๋ก ํ์ธ์.
์ค์ฉ์ ํ ์คํธ: ์ง์ ๋๋ ์ด์ํ์ด ๊ฐ์ฅ ์์ฃผ ์ฌ์ฉํ๋ ์ธ ๊ฐ์ง ํํฐ๋ฅผ ์ดํด๋ณด์ธ์. ๊ทธ์ค ๋ ๊ฐ์ง๊ฐ ๋ณดํต "์๊ฐ ๋ฒ์ + ํ๋์ ์กฐ๊ฑด"์ผ๋ก ์ถฉ์กฑ๋๋ค๋ฉด ์ด๋ฒคํธ ํ ์ด๋ธ์ PostgreSQL ํํฐ์ ๋์ ์๋นํ ๊ณ ๋ คํ ๊ฐ์น๊ฐ ์์ต๋๋ค.
ํ์ค์ ์ธ ์์ ๋ค์ ๋จ๊ณ
์ง์ํ์ด ํ๋ฃจ ์ข ์ผ ๋ ํ๋ฉด์ ์ผ ๋ก๋๋ค: "๋ก๊ทธ์ธ ์ด๋ฒคํธ"(์ฑ๊ณต ๋ฐ ์คํจ ๋ก๊ทธ์ธ)์ "๋ณด์ ๊ฐ์ฌ"(๋น๋ฐ๋ฒํธ ์ฌ์ค์ , ์ญํ ๋ณ๊ฒฝ, API ํค ์ ๋ฐ์ดํธ). ๊ณ ๊ฐ์ด ์์ฌ์ค๋ฌ์ด ํ๋์ ์ ๊ณ ํ๋ฉด ํ์ ์ฌ์ฉ์๋ก ํํฐํ๊ณ ์ง๋ ๋ช ์๊ฐ ๊ธฐ๋ก์ ํ์ธํด ์งง์ ๋ณด๊ณ ์๋ฅผ ๋ด๋ณด๋ ๋๋ค.
ํํฐ์
๋ ์ ์๋ ๋ชจ๋ ๊ฒ์ด ํ๋์ ํฐ events ํ
์ด๋ธ์ ๋ค์ด ์์ต๋๋ค. ๋น ๋ฅด๊ฒ ์ฑ์ฅํ๊ณ ๋จ์ํ ๊ฒ์๋ ์ค๋๋ ๋ง์ ํ์ ์ฒ๋ฆฌํด์ผ ํด์ ๋๋ ค์ง๋๋ค. ๋ณด์กด๋ ๊ณ ํต์ค๋ฝ์ต๋๋ค: ์ผ๊ฐ ์์
์ด ์ค๋๋ ํ์ ์ญ์ ํ์ง๋ง ๋๋ ์ญ์ ๋ ์ค๋ ๊ฑธ๋ฆฌ๊ณ ๋ธ๋กํธ๋ฅผ ๋ง๋ค๋ฉฐ ์ผ๋ฐ ํธ๋ํฝ๊ณผ ๊ฒฝ์ํฉ๋๋ค.
์ด๋ฒคํธ ํ์์คํฌํ ๊ธฐ์ค์ผ๋ก ์๋ณ ํํฐ์ ๋์ ์ ์ฉํ๋ฉด ์ํฌํ๋ก๊ฐ ๊ฐ์ ๋ฉ๋๋ค. ๊ด๋ฆฌ์ ํจ๋์ด ์๊ฐ ํํฐ๋ฅผ ์๊ตฌํ๋ฏ๋ก ๋๋ถ๋ถ์ ์ฟผ๋ฆฌ๋ ํ๋ ๊ฐ ํํฐ์ ๋ง ๊ฑด๋๋ฆฝ๋๋ค. PostgreSQL์ด ์ ํ๋ ๋ฒ์ ์ธ์ ํํฐ์ ์ ๋ฌด์ํ๋ฏ๋ก ํ์ด์ง ๋ก๋ฉ์ด ๋นจ๋ผ์ง๋๋ค. ๋ณด์กด์ ์๋ฐฑ๋ง ํ์ ์ญ์ ํ๋ ๋์ ์ค๋๋ ํํฐ์ ์ ๋๋กญํ๋ ๊ฒ์ผ๋ก ๋ฃจํดํ๋ฉ๋๋ค.
์ฌ์ ํ ์ด๋ ค์ด ํ ๊ฐ์ง๋ "์ ์ฒด ๊ธฐ๊ฐ"์ ๋ํ ์์ ํ ์คํธ ๊ฒ์์ ๋๋ค. ๋๊ตฐ๊ฐ ๋ ์ง ์ ํ ์์ด IP ์ฃผ์๋ ๋ชจํธํ ๋ฌธ๊ตฌ๋ก ๊ฒ์ํ๋ฉด ํํฐ์ ๋์ผ๋ก๋ ์ธ๊ฒ ๋ง๋ค ์ ์์ต๋๋ค. ๋ณดํต ์ ํ ์ชฝ์์ ํด๊ฒฐํฉ๋๋ค: ๊ฒ์ ๊ธฐ๋ณธ๊ฐ์ ์๊ฐ ์ฐฝ์ผ๋ก ๋๊ณ "์ต๊ทผ 24์๊ฐ / 7์ผ / 30์ผ" ๊ฐ์ ๊ฒฝ๋ก๋ฅผ ๋์ ๋๊ฒ ๋ง๋๋ ๊ฒ์ ๋๋ค.
์ค๋ฌด์ ๋์์ด ๋๋ ๋ค์ ๋จ๊ณ:
- ๊ด๋ฆฌ์ ํจ๋ ํํฐ๋ฅผ ๋จผ์ ๋งตํ์ธ์. ์ฌ๋๋ค์ด ์ด๋ค ํ๋๋ฅผ ์ฌ์ฉํ๊ณ ์ด๋ค ํ๋๋ฅผ ํ์๋ก ์ผ์์ผ ํ๋์ง ์ ์ด๋ณด์ธ์.
- ํ์ ๋ฐฉ์์ ๋ง์ถฐ ํํฐ์ ์ ์ ํํ์ธ์. ์๊ฐ ํํฐ์ ์ด ๋ณดํต ์ข์ ์ถ๋ฐ์ ์ด๋ฉฐ, ๋ณผ๋ฅจ ๋๋ฌธ์ ํ์ํ ๋ ์ฃผ๊ฐ์ผ๋ก ์ด๋ํ์ธ์.
- ์๊ฐ ๋ฒ์๋ฅผ ์ผ๊ธ ์๋ฏผ์ผ๋ก ๋ง๋์ธ์. UI์์ "๋ ์ง ์์"์ ํ์ฉํ๋ฉด ๋๋ฆฐ ํ์ด์ง๋ฅผ ๊ธฐ๋ํ์ธ์.
- ์ธ๋ฑ์ค๋ฅผ ์ค์ ํํฐ์ ๋ง์ถ์ธ์. ์๊ฐ์ด ํญ์ ํฌํจ๋๋ค๋ฉด ์๊ฐ ๋จผ์ ์ธ ์ธ๋ฑ์ค ์ ๋ต์ด ๊ธฐ๋ณธ์ ์ด ๋ฉ๋๋ค.
- ๋ณด์กด ๊ท์น์ ํํฐ์ ๊ฒฝ๊ณ์ ๋ง์ถ์ธ์(์: 13๊ฐ์ ๋ณด๊ด ํ ๋๋กญ).
AppMaster(appmaster.io)๋ก ๋ด๋ถ ๊ด๋ฆฌ์ ํจ๋์ ๋ง๋ ๋ค๋ฉด ์ด๋ฐ ๊ฐ์ ์ ์ผ์ฐ ๋ชจ๋ธ๋งํ๋ ๊ฒ์ด ๊ฐ์น ์์ต๋๋ค: ์๊ฐ ๊ธฐ๋ฐ ํํฐ๋ฅผ ๋จ์ํ UI ์ ํ์ด ์๋๋ผ ๋ฐ์ดํฐ ๋ชจ๋ธ์ ์ผ๋ถ๋ก ์ทจ๊ธํ์ธ์. ์ด ์์ ๊ฒฐ์ ์ด ๋ก๊ทธ ๋ณผ๋ฅจ์ด ์ปค์ง ๋ ์ฟผ๋ฆฌ ์ฑ๋ฅ์ ๋ณดํธํฉ๋๋ค.
์์ฃผ ๋ฌป๋ ์ง๋ฌธ
ํํฐ์ ๋์ ์ผ๋ฐ์ ์ผ๋ก ์ผ๋ฐ ์ฟผ๋ฆฌ๊ฐ ์๊ฐ ๋ฒ์๋ก ์ ํ๋๋ ๊ฒฝ์ฐ(์: "์ต๊ทผ 24์๊ฐ", "์ง๋ 7์ผ")์ ํ ์ด๋ธ์ด ์ปค์ ธ ์ธ๋ฑ์ค๋ ์ ์ง๋ณด์๊ฐ ๋ถ๋ด์ด ๋ ๋ ๊ฐ์ฅ ์ ์ฉํฉ๋๋ค. ๋ฐ๋ฉด์ ์ฃผ์ ์ฟผ๋ฆฌ๊ฐ "์ฌ์ฉ์ X์ ์ ์ฒด ๊ธฐ๋ก"์ฒ๋ผ ์๊ฐ ์ ํ์ด ์๋ค๋ฉด, UI์์ ์๊ฐ ํํฐ๋ฅผ ๊ฐ์ ํ๊ณ ๊ฐ ํํฐ์ ์ ์ ์ ํ ์ธ๋ฑ์ค๋ฅผ ์ถ๊ฐํ์ง ์๋ ํ ํํฐ์ ๋์ ์คํ๋ ค ๊ด๋ฆฌ ์ค๋ฒํค๋๋ฅผ ๋๋ฆด ์ ์์ต๋๋ค.
๋ก๊ทธ์ ๊ฐ์ฌ ๋ฐ์ดํฐ์๋ ๋ณดํต ์๊ฐ ๋จ์ ๋ฒ์ ํํฐ์ ๋(range by time)์ด ๊ธฐ๋ณธ์ ์ผ๋ก ๊ฐ์ฅ ์ ํฉํฉ๋๋ค. ๋ฐ์ดํฐ๊ฐ ์๊ฐ์์ผ๋ก ๋ค์ด์ค๊ณ , ์ฟผ๋ฆฌ๊ฐ ์๊ฐ ์ฐฝ์ผ๋ก ์์ํ๋ฉฐ, ๋ณด์กด์ด ์๊ฐ ๊ธฐ๋ฐ์ธ ๊ฒฝ์ฐ๊ฐ ๋ง๊ธฐ ๋๋ฌธ์ ๋๋ค. ๋ฆฌ์คํธ(list)๋ ํด์(hash) ํํฐ์ ๋์ ํน์ํ ๊ฒฝ์ฐ์๋ง ์ ์ฉํ๋ฉฐ, ๊ฐ์ฌ ์ํฌํ๋ก์์๋ ๋ณด์กด๊ณผ ํ์์ ๋ ์ด๋ ต๊ฒ ๋ง๋๋ ๊ฒฝ์ฐ๊ฐ ๋ง์ต๋๋ค.
์ฌ๋๋ค์ด ๊ฐ์ฅ ๋จผ์ , ๊ฑฐ์ ํญ์ ์ฌ์ฉํ๋ ํ๋๋ฅผ ์ ํํ์ธ์. ๋๋ถ๋ถ์ ๊ด๋ฆฌ์ ํจ๋์์๋ ์๊ฐ ๋ฒ์ ํํฐ๊ฐ ์ฒซ ๋ฒ์งธ์ด๋ฏ๋ก ์๊ฐ ๊ธฐ๋ฐ ํํฐ์ ๋์ด ๊ฐ์ฅ ์์ธก ๊ฐ๋ฅํ ์ ํ์ ๋๋ค. ํํฐ์ ํค๋ฅผ ๋ฐ๊พธ๋ ๊ฒ์ ํฐ ๋ง์ด๊ทธ๋ ์ด์ ์ด ๋ ์ ์์ผ๋ ์ฅ๊ธฐ์ ์ธ ์ฝ์์ผ๋ก ๊ฐ์ฃผํ์ธ์.
ํ์์คํฌํ๋ ํ
๋ํธ ์๋ณ์์ฒ๋ผ ํํฐ์
์๊ฐ ๊ด๋ฆฌ ๊ฐ๋ฅํ ๊ฐ๋ง ์ฌ์ฉํ์ธ์. user_id ๊ฐ์ ๋์ ์นด๋๋๋ฆฌํฐ ํค๋ ์์ฒ ๊ฐ์ ํํฐ์
์ ๋ง๋ค ์ ์์ด ์ฟผ๋ฆฌ ํ๋๋ ์ค๋ฒํค๋์ ์ด์ ๋ณต์ก์ฑ์ด ์ปค์ง๋ฏ๋ก ํผํ๋ ๊ฒ์ด ์ข์ต๋๋ค.
created_at๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๊ธฐ๋ก๋ ์๊ฐ์ด๊ณ , occurred_at์ ์ด๋ฒคํธ๊ฐ ์ค์ ๋ก ๋ฐ์ํ ์๊ฐ์
๋๋ค. ์ง์ฐ๋ ์์ (์คํ๋ผ์ธ ํด๋ผ์ด์ธํธ, ์ฌ์๋, ํ)์ด ๋น๋ฒํ๋ค๋ฉด ์ด์์ ์์ ์ฑ์ ์ํด created_at์ผ๋ก ํํฐ์
๋ํ๊ณ occurred_at์ ํํฐ์ฉ ์ธ๋ฑ์ค๋ก ๋๋ ๊ฒ์ด ๋ ์ค์ฉ์ ์ผ ์ ์์ต๋๋ค. ๋ฐ๋๋ก ์ด๋ฒคํธ ์๊ฐ์ด ์ ๋ขฐํ ๋งํ๋ฉด occurred_at์ผ๋ก ํํฐ์
๋ํ๋ ๊ฒ์ด ์ฌ์ฉ์ ๊ด์ ์์ ๋ ์์ฐ์ค๋ฝ์ต๋๋ค. ๋ง์ ํ์ created_at์ผ๋ก ํํฐ์
๋ํ๊ณ occurred_at์ ์์ธํ๋ ์ ์ถฉ์์ ์ ํํฉ๋๋ค.
๋ค. ํ ์ด๋ธ์ ํํฐ์ ๋ํ ๊ฒฝ์ฐ ๊ด๋ฆฌ์ UI์์ ์๊ฐ ๋ฒ์๋ฅผ ํ์๋ก ํ๋ ๊ฒ์ด ์ข์ต๋๋ค. ์๊ฐ ํํฐ๊ฐ ์์ผ๋ฉด PostgreSQL์ด ์ฌ๋ฌ ํํฐ์ ์ ํ์ธํด์ผ ํด์ ๊ฒฐ๊ณผ๊ฐ ๋๋ ค์ง ์ ์์ต๋๋ค. ๊ธฐ๋ณธ๊ฐ์ "์ต๊ทผ 24์๊ฐ" ๊ฐ์ ๊ฐ์ผ๋ก ๋๊ณ , "์ ์ฒด ๊ธฐ๊ฐ"์ ์๋์ ์ธ ์ ํ์ผ๋ก ๋ง๋ค์ด ๋๋ฆฐ ์ฟผ๋ฆฌ์์ ์๋ฆฌ๋ ๊ฒ์ด ์์ ํฉ๋๋ค.
์์ฃผ ๋ฐ์ํ๋ ์ค์๋ ํํฐ์
ํค์ ํจ์๋ฅผ ์ ์ฉํ๊ฑฐ๋(์: ํ์์คํฌํ๋ฅผ date๋ก ์บ์คํ
) ํํฐ์
ํค์ ๋ค๋ฅธ ์๊ฐ ์ปฌ๋ผ์ผ๋ก ํํฐ๋งํ๋ ๊ฒ์
๋๋ค. ์ด๋ฐ ํจํด์ ํํฐ์
ํ๋ฃจ๋์ ๋ฐฉํดํฉ๋๋ค. created_at BETWEEN X AND Y ๊ฐ์ ๋จ์ํ ํํ๋ก WHERE ์ ์ ์ ์งํ๋ฉด ํ๋ฃจ๋์ด ์ ์๋ํฉ๋๋ค.
๋ก๊ทธ ๋ทฐ์ ๋ํด ๊น์ OFFSET ๊ธฐ๋ฐ ํ์ด์ง์ ์ฌ์ ํ ๋๋ฆฝ๋๋ค. ๋์ ์ปค์ํ ํ์ด์ง์ ์ฌ์ฉํ์ธ์(์: (timestamp, id) ๊ธฐ์ค์ผ๋ก "์ด์ ์ด๋ฒคํธ ๋ ๋ถ๋ฌ์ค๊ธฐ"). ์ด๋ ๊ฒ ํ๋ฉด ์ธ๋ฑ์ค๋ฅผ ์ฌ์ฉํ๊ณ ์ฑ๋ฅ์ ์์ ์ ์ผ๋ก ์ ์งํ ์ ์์ต๋๋ค.
PostgreSQL์์๋ ํํฐ์
๋๋ ํ
์ด๋ธ์ ๋ํ ์ผ๋ถ ๊ณ ์ ์ ์ฝ์ ํํฐ์
ํค๋ฅผ ํฌํจํด์ผ ์ ์ฒด ํํฐ์
์ ๋ํด ๊ฐ์ ํ ์ ์์ต๋๋ค. ๊ทธ๋์ ์ ์ญ ๊ณ ์ id ์ ์ฝ์ ๊ธฐ๋ํ๋ฉด ๋๋ ์ ์์ต๋๋ค. ์ค๋ฌด์ ํจํด์ ํํฐ์
ํค๋ฅผ ํฌํจํ ๋ณตํฉ ๊ณ ์ ์ ์ฝ(์: (created_at, id))์ ์ฌ์ฉํ๊ฑฐ๋, ์ธ๋ถ์ฉ ๊ณ ์ ์๋ณ์๊ฐ ํ์ํ๋ฉด UUID๋ฅผ ์ฌ์ฉํ๊ณ ์ ์ญ ๊ณ ์ ์ฑ์ ์ฑ ๋ ์ด์ด์์ ๊ด๋ฆฌํ๋ ๊ฒ์
๋๋ค.
ํํฐ์ ์ ๋๋กญํ๋ ๊ฒ์ด ๋น ๋ฅด๊ณ ๋๋ DELETE๊ฐ ๋ง๋๋ ๋ถํ์ VACUUM ์์ ์ ํผํ ์ ์์ต๋๋ค. ํต์ฌ์ ๋ณด์กด ๊ท์น์ ํํฐ์ ๊ฒฝ๊ณ์ ๋ง์ถฐ ์ ํ๊ณ ์ด๋ฅผ ์๋ํํ๋ ๊ฒ์ ๋๋ค: ๋ฏธ๋ ํํฐ์ ์ ๋ฏธ๋ฆฌ ๋ง๋ค๊ณ ๋ง๋ฃ๋ ํํฐ์ ์ ์ฃผ๊ธฐ์ ์ผ๋ก ์ ๊ฑฐํ์ธ์. ์๋ํ๊ฐ ์์ผ๋ฉด ํํฐ์ ๋์ด ์๋ ์ ๋ฌด๋ก ๋ณํฉ๋๋ค.


