dbArchitecture
posts์ tags ํฉ์ณ ์กฐํํ๋ ๋ฐฉ๋ฒ
Eloquent์ด์ฉ
$post->with('tags')->get()
$post->get()->load('tags)
๋ ์ฟผ๋ฆฌ ๋ชจ๋ post๋ฅผ select ํ post_tag์ tags๋ฅผ joinํ์ฌ ์ปฌ๋ ์ ์ผ๋ก ์กฐํํ๋ค.
์ฟผ๋ฆฌ๋น๋ ์์ฑ
group_concatํจ์๋ฅผ ์ด์ฉํ์ฌ posts๋ด์ tag์ ๋ณด๋ฅผ string์ผ๋ก ์นํํ์ฌ ๊ฐ์ ธ์จ ํ responseํ๊ธฐ ์ ์ ์กฐ๊ธ ๋ฐ์ดํฐ๋ฅผ ์๋ณด๋ ๋ฐฉ๋ฒ
users likes tags ํฉ์ณ ์กฐํ ํ๋ ๋ฐฉ๋ฒ
Eloquent์ด์ฉ
$user->with(['likes','likes.tags'])->get() user select / users-likes-posts joinํ์ฌ select / posts-post_tag-tags joinํ์ฌ select ์ด 3๋ฒ์ ์ฟผ๋ฆฌ ๋ฐ์
์ฟผ๋ฆฌ ๋น๋ ์์ฑ
5๋ฒ์ join์ ํตํด ํ๋ฒ์ ์ฟผ๋ฆฌ๋ก ์ํ
=> ํ์ฌ๋ Eloquent๋ก ์ํ์ ํ๊ณ ๋ฐ์ดํฐ๊ฐ ๋ง์์ง๊ณ ๋คํธ์ํฌ๋ฅผ ๋ง์ดํ ์ฟผ๋ฆฌ์๋๊ฐ ๋๋ ค์ง๋ค๋ฉด ์ญ์ ๊ทํ๋ฅผ ๊ณ ๋ คํด๋ณด๊ฑฐ๋ db์ข ๋ฅ๋ฅผ ๊ณ ๋ คํด๋ณด์.
๊ณ ๋ฏผํด๋ณผ ์
ํ๊ฐ์ DB์์ ๋๋ฌด ๋ง์ ์ฟผ๋ฆฌ ํธ์ถ๋ก ๋คํธ์ํฌ ๋ณ๋ชฉ์ด ๋ฐ์ํ๋ค๋ฉด ์ค๋ฉ์ ํตํด ๋๋์ด ์ ์ฅํ ์๋ ์๋ค.
posts์ tags์ ๋ณด๋ฅผ ์ญ์ ๊ทํ๋ก ํ ์ด๋ธ์ ํฉ์น๋ ๋ฐฉ๋ฒ
ํ์ฌ FTS์ index์ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ ๋ posts์ tags๋ฅผ ๋ฐ๋ก ์ ์ฅํ์ง ์๊ณ posts์ ์ฅํ ๋ ์ข ์์ ์ผ๋ก tags๋ฅผ ์ ์ฅํ๊ณ ์๋ค.
-> ๋ง์ฝ์ tags๋ฅผ ๋ฐ๋ก ์ ์ฅํ๊ฒ ๋๋ฉด ์ด๋ฅผ ์กฐํํ๋ ๊ณผ์ ์ tags index์์ tag id๋ฅผ ์ฐพ์๋ด๊ฒ ๋๊ณ ์ด id๋ฅผ ์ด์ฉํด posts๋ฅผ ์กฐํํ๊ฒ ๋ ํ ๋ฐ ์ด posts์๋ ๋ tags๋ค์ ์ ๋ณด๋ค์ด ์๊ธฐ ๋๋ฌธ์ ๋ค์ tags๋ฅผ ๋ก๋ฉํ๋ ๊ฒฐ๊ณผ๊ฐ ๋ฐ์ํ๋ค.
๊ทธ๋์ posts์ tags๋ฅผ ํ index์ ๊ฐ์ด ์ง์ด๋ฃ๊ณ ๊ฒ์์์ง์์ key๊ฐ์ ์ด์ฉํด tag์ ๋ฌธ๊ตฌ๋ด์ฉ(content)๋ฅผ ๋ค๋ฅด๊ฒ ๊ฒ์ํ๋ ๋ฐฉ๋ฒ์ผ๋ก ์ด์ฉํ๊ณ ์๋ค. ์ด์ฒ๋ผ FTS์๋ tags๋ฅผ posts์ ๊ฐ์ด ์ ์ฅํ๊ณ ์กฐํ๋ฅผ ์ํํ๋ค๋ฉด ๊ตณ์ด ํ ์ด๋ธ์ ๋๋์ง ์๊ณ ํ๊ฐ์ ์ปฌ๋ผ๋ด์ string์ผ๋ก ํํํด๋ ๋๊ฐ์ ๊ธฐ๋ฅ์ ์ํํ ์ ์์ ๊ฒ ๊ฐ๋ค.
๊ทธ๋ฌ๋ฉด ์์์ ๋งํ๋ post-tag๊ฐ์ joinํ๋ ๋ฌธ์ ์ ํ depth๊ฐ ์ฌ๋ผ์ ธ ์์ ๊ณ ๋ฏผ๋ ํด๊ฒฐ ๋ ์ ์์ ๊ฒ ๊ฐ๋ค.
posts๋ด์ tag๋ฅผ jsonํ์ ์ผ๋ก ์ ์ฅํ๊ณ ๋ likes๋ด์ posts๋ค์ ์ ๋ณด๋ฅผ jsonํ์ ์ผ๋ก ์ ์ฅํ๋ ๋ฐฉ๋ฒ!
posts ์ญ์ ๊ฐ์ ๊ฒฝ์ฐ posts, tags, post_tag ์ likes ๊น์ง ์ด 4๊ฐ์ ํ ์ด๋ธ์ ์ญ์ ์ฟผ๋ฆฌ๊ฐ ๋ ๋ผ๊ฐ๋ค. posts์ tags๋ง ํ๊ฐ์ ํ ์ด๋ธ๋ก ํฉ์น๋ ์ญ์ ๊ทํ๋ฅผ ํ์๋๋ likes์ posts ๋๊ฐ์ ์ญ์ ๊ฐ ๋ฐ์ํ๊ณ , likes๋ด์ post์ ๋ด์ฉ์ ์ค๋ณต์์ผ ์ฝ์ ํ๋ ๊ฒฝ์ฐ์๋ ๋๊ฐ์ ์ญ์ ์ฟผ๋ฆฌ๊ฐ ๋ฐ์ํ๋ค.
tags์์ tag๋ก ์กฐํํ๊ฒ ๋๋ฉด posts์ ์ ๋ณด๋ฅผ ์กฐํํ๊ณ ํด๋น posts๋ค์ ํฌํจ๋ tags๋ค์ ๋ ์กฐํํด์ผํ๋ ๋ฌธ์ ๊ฐ ๋ฐ์ => ๋ฐ์ ๊ทํ ๊ฒฐ์ => ์๋ ๊ฒ : likes ๊ฐ์๊ฒฝ์ฐ update๊ฐ ํ๋ฒ๋ ๋ฐ์ํ ์ ์๋ค.
Last updated