ํ์ฌ ์ํฉ
์๋น๋ถ๋ถ, ํ๋๋, ํฌํธํด๋ฆฌ์ค, ์์ดํ ์์ ํ๊ทธ๋ฅผ ์ฐธ์กฐํ๊ณ ์์ต๋๋ค. ๊ธฐ๋ณธ์ ์ผ๋ก N:M ๊ด๊ณ์ด๊ธฐ ๋๋ฌธ์ ํ์ฌ๋ ์ค๊ฐํ ์ด๋ธ์ ๋์ด ํ๊ทธ ํ ์ด๋ธ๊ณผ ์ฐ๊ฒฐํ๋ ๋ฐฉ์์ ์ฌ์ฉํฉ๋๋ค.
์ ์ ๋ ์ฃผ์ด์ง ํ๊ทธ๋ฟ๋ง ์๋๋ผ ์์ ์ด ์ง์ ํ๊ทธ๋ฅผ ์ถ๊ฐํ ์ ์๊ณ , ์ถ๊ฐํ ํ๊ทธ๋ก๋ ๊ฒ์์ด ๊ฐ๋ฅํฉ๋๋ค.
๋ฌธ์ ์
ํ์ฌ MVP ๊ธฐ๋ฅ ERD๋ง ๊ทธ๋ ธ๋๋ฐ๋ ํ ์ด๋ธ์ด ๋ง์์ง๊ณ , ๊ธฐ๋ฅ์ด ์ถ๊ฐ๋จ์ ๋ฐ๋ผ ์ค๊ฐ ํ ์ด๋ธ๋ ๋ง์์ ธ ๋ฐ์ดํฐ ๊ตฌ์กฐ๊ฐ ๋ณต์กํด์ง ์ ์๋ค๋ ๋จ์ ์ด ์กด์ฌํฉ๋๋ค.
ํด๊ฒฐ ๋ฐฉ์
1. ์ค๊ฐ ํ ์ด๋ธ์ ํ๋๋ก ํตํฉํ๊ณ , boolean ๊ฐ์ ํตํด ํ๊ทธ ์ค๊ฐ ํ ์ด๋ธ์ ๊ด๋ฆฌ
- table_id (long)
- is_customer (bool)
- is_planner (bool)
- is_porfolio (bool)
- is_item (bool)
- tag_type (string)
์ฅ์ : ํ๋์ ํ
์ด๋ธ๋ก ๋ชจ๋ ํ๊ทธ๋ฅผ ๊ด๋ฆฌํ ์ ์๊ธฐ ๋๋ฌธ์ ์ค๊ณ๊ฐ ๊ฐ๋จํด์ง๋ค
๋จ์ : ๊ธฐ๋ฅ์ด ์ถ๊ฐ๋ ๋๋ง๋ค ํ
์ด๋ธ์ ๋ชจ๋ ์์ ํด์ผ ํ๊ธฐ ๋๋ฌธ์ ํ์ฅ์ฑ์ด ์ข์ง ์๋ค.
ํ์ฌ ์ ํฌ๋ MVP ๊ฐ๋ฐ ์ํ์ด๊ณ , ์ถ๊ฐ ๊ธฐ๋ฅ์ด ๊ฐ๋ฐ๋ ์ ์๋ ๊ฐ๋ฅ์ฑ์ ์ด์ด๋๊ณ ์๊ธฐ ๋๋ฌธ์ ํด๋น ํด๊ฒฐ ๋ฐฉ์์ ์ ์ ํ์ง ์์ ๋ณด์์ต๋๋ค.
2. ์ค๊ฐ ํ ์ด๋ธ ์์ด String์ผ๋ก ํ๊ทธ๋ฅผ ๋ฐ์ ๊ด๋ฆฌํ๊ธฐ
์ธ์คํ๊ทธ๋จ ๋ฑ์ด ์ฌ์ฉํ๊ณ ์๋ ๋ฐฉ์์ด๋ฉฐ, ํด๋น ๋ฐฉ์์ ์ฌ์ฉํ๋ฉด ์ ์ ์ปค์คํ ํ๊ทธ๋ก๋ ๊ฒ์ ๊ฐ๋ฅ
์ฅ์ : ์ค๊ฐ ํ
์ด๋ธ์ด ํ์ ์์ด ํ
์ด๋ธ ๊ตฌ์กฐ ๊ฐ์ํ / ์ ์ ์ปค์คํ
ํ๊ทธ๋ก๋ ์์ฝ๊ฒ ๊ฒ์ ๊ฐ๋ฅ
๋จ์ : ๊ฒ์์ ์ํด์๋ elastic search๋ฅผ ์ด์ฉํด์ผ ํ๋๋ฐ ํ์ฌ ์ฌ์ฉ์๊ฐ ์๋ ์ ํฌ ์๋น์ค ์์ผ๋ก๋ ์ค๋ฒ์คํ์ ๊ฐ๊น์ต๋๋ค.
๋ฉํ ๋ง
์ผ๋จ ์ปค์คํ ํ๊ทธ๋ฅผ ์ฌ์ฉํ๋ ค๊ณ ํด์ ๋ ๋ณต์กํด์ง๋ ๊ฒ ๊ฐ๋ค๋ ์๊ฒฌ์ ์ฃผ์ จ์ต๋๋ค. ์ฐจ๋ผ๋ฆฌ ์๋น์ค ๋ฐ์นญ ์ ์ต๋ํ ํ๊ทธ๋ฅผ ๋ง์ด ์ค๋นํด์ ์ปค์คํ ํ๊ทธ ์์ด ์ ํฌ๊ฐ ์ ๊ณตํ ํ๊ทธ๋ง์ผ๋ก EQUALS๋ LIKE ๊ฒ์์ ํ๋ ๊ฒ์ด ๋์๋ณด์ ๋๋ค.
๊ฒฐ๋ก
๋ฌธ์์ด ๋ฐฉ์์ ์ฌ์ฉํ๋ ๊ฒ์์ ๊ฒฝ์ฐ elastic search ๋์ ๊ทธ๋ฅ ๋ฌธ์์ด ๊ฒ์(ex. '์น์ ํ' -> '์น์ ')๋ก ๊ตฌํํฉ๋๋ค.
์ถ๊ฐ ์๊ฒฌ
๊ฐ์ธ์ ์ผ๋ก๋ File ๋ฆฌํฉํ ๋ง์์ ์ฌ์ฉ ์์ ์ธ ๋ฐฉ์๋ ์ข์๋ณด์ ๋๋ค.
Long target_tag_id; // ์ค๊ฐ ํ
์ด๋ธ id
Long tag_id // ํ๊ทธ id
Long target_id // ๊ธฐ๋ฅ id (planner, portfolio, customer, item)
String target_type // ์ด๋ค ๊ธฐ๋ฅ์ธ์ง ํ์
๋๊ธ