์คํฐ๋๋ฅผ ํ์ง ์๊ฐ์ด ์ค๋ ์ง๋๊ธด ํ์ง๋ง, ๊ธฐ๋ก์ด ์ง์ง ์ค์ํ๊ณ , ์ด๋ฐ ๊ธฐ๋ก ํ๋ํ๋๊ฐ ๋์๊ฒ ๋์ ๋๋ค๊ณ ์๊ฐํด์ ๋๋ฅผ ์ํด ์ด๋ค๊ณ ์๊ฐํ์ฌ ๋ฆ๊ฒ๋ผ๋ ์ด๋ค.
์ง๊ธ์ ๋ฉ์์ด์ฌ์์ฒ๋ผ ๋ํ 12th HACKATHON์ ๊ฒฝํํ๊ณ ์จ ํ์ฌ์ ๊ทธ๋ ์คํฐ๋ํ ๋๋ ์ด๊ฒ ์ด๋ป๊ฒ ์ฐ์ด์ง? ๋ญ์ง? ๋ผ๋ ์๊ฐ์ด ํด์ปคํค์ ๊ฒฝํํ ํ, ์ ์ด๋ ๊ฒ ์ฐ์ด๋๊ตฌ๋ ์ด๋ฐ์์ด๊ตฌ๋ ๋ผ๋๊ฑธ ๋ง์ด ๊นจ๋ฌ์๋ค.
์ญ์ ๋๋ ๋ชธ์ผ๋ก ์ง์ ๋ถ๋ช์น๋ฉด์ ๊นจ๋ฌ์์ผํ๋ค๋๊ฒ์ ์์๋ค. ์ฐธ ๋ง์ ๋์์ด ๋ ํด์ปคํค์ด์ฌ์ ๋น ๋ฅธ ์์ผ ๋ด์ ํ๊ณ ๋ฅผ ํด์ผ๊ฒ ๋ค๋ ์๊ฐ์ด ๋ค์๋ค.
์ํฐํฐ ๊ฐ์ ๊ด๊ณ๋ฅผ ์๋ฏธํ๋ฉฐ, ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ํ ์ด๋ธ ๊ฐ ์ธ๋ ํค ๊ด๊ณ์ ํด๋นํ๋ค.
๊ฐ์ฒด ๋ชจ๋ธ๊ณผ ๋ฐ์ดํฐ๋ฒ ์ด์ค ๋ชจ๋ธ ๊ฐ์ ๊ด๊ณ๋ฅผ ์ ์ํ๋ ์์ . JPA์์๋ ์ํฐํฐ์ ํ ์ด๋ธ์ ๋งคํํ๊ณ , ์ฐ๊ด๊ด๊ณ ๋งคํ์์๋ ์ํฐํฐ ๊ฐ์ ๊ด๊ณ๋ฅผ ์ ์ํ๋ค.
ํ ์ชฝ ์ํฐํฐ๋ง ๋ค๋ฅธ ์ํฐํฐ๋ฅผ ์ฐธ์กฐํ๋ ๊ด๊ณ
๋ ์ํฐํฐ๊ฐ ์๋ก๋ฅผ ์ฐธ์กฐํ๋ ๊ด๊ณ
ํ ์ํฐํฐ๊ฐ ํ๋์ ๋ค๋ฅธ ์ํฐํฐ์ ์ฐ๊ด๋ ๊ด๊ณ
ํ ์ํฐํฐ๊ฐ ์ฌ๋ฌ ์ํฐํฐ์ ์ฐ๊ด๋ ๊ด๊ณ
์ฌ๋ฌ ์ํฐํฐ๊ฐ ํ ์ํฐํฐ์ ์ฐ๊ด๋ ๊ด๊ณ
์ฌ๋ฌ ์ํฐํฐ๊ฐ ์ฌ๋ฌ ์ํฐํฐ์ ์ฐ๊ด๋ ๊ด๊ณ
์ฐ๊ด๊ด๊ณ์์ ์ธ๋ํค๋ฅผ ์์ ํ๊ณ ์๋ ์ํฐํฐ
์ธ๋ํค๋ฅผ ์์ ํ๊ณ ์์ง ์์ ์ํฐํฐ
๊ฐ์ฒด ๋ชจ๋ธ์์๋ ์ค์ ๋น์ฆ๋์ค ๋ก์ง์ ๊ตฌํํ๊ธฐ ์ํด ์ํฐํฐ๊ฐ์ ๊ด๊ณ๋ฅผ ๋ช ํํ ์ ์ํด์ผ ํ๋ค. ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ํ ์ด๋ธ ๊ฐ ์ธ๋ํค์ ๊ฐ์ ๊ด๊ณ๋ฅผ ๊ฐ์ฒด ์งํฅ์ ์ผ๋ก ๋ค๋ฃจ๊ธฐ ์ํด ์ฐ๊ด๊ด๊ณ๊ฐ ํ์ํ๋ค.
๊ฐ์ฒด ์งํฅ ์ฝ๋์ ๊ด๊ณํ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๊ตฌ์กฐ๋ฅผ ์ผ์น์์ผ ๋ฐ์ดํฐ์ ์ผ๊ด์ฑ์ ์ ์งํ๊ธฐ ์ํจ์ด๋ค.
์ด๋ฅผ ํตํด ๊ฐ์ฒด ๋ชจ๋ธ์ ํตํด ์์ฐ์ค๋ฝ๊ฒ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ํธ์์ฉ์ ๊ตฌํํ ์ ์๋ค.
๊ฐ์ฒด ์ฐ๊ด๊ด๊ณ๋ ๊ฐ์ ์ ์ด๊ณ , ํ ์ด๋ธ ์ฐ๊ด๊ด๊ณ๋ ์ธ๋ ํค๋ก ๋ช ํํ ํํ๋๋ฉฐ, JPA ๋งคํ์ ํตํด ์ด๋ฅผ ์ผ๊ด๋๊ฒ ์ฐ๊ฒฐํ ์ ์๋ค.
Member ๊ฐ์ฒด์ Locker ๊ฐ์ฒด๊ฐ 1:1๋ก ๋งคํ๋์ด ์๋ค.
์ฆ, Member๋ ํ๋์ Locker๋ฅผ ๊ฐ์ง ์ ์๊ณ , Locker๋ ํ๋์ Member์๋ง ์ฐ๊ฒฐ๋๋ค.
๋ฐ์ดํฐ๋ฒ ์ด์ค์์๋ MEMBER ํ
์ด๋ธ์ด LOCKER_ID๋ฅผ ์ธ๋ ํค๋ก ๊ฐ์ง๋ฉฐ, ์ด ํค๋ฅผ ํตํด LOCKER ํ
์ด๋ธ๊ณผ 1:1 ๊ด๊ณ๋ฅผ ๋งบ๋๋ค.
LOCKER_ID ํ๋๋ ์ธ๋ ํค(FK)์ด๋ฉด์ ์ ๋ํฌ(UNIQUE) ์ ์ฝ์กฐ๊ฑด์ด ์ค์ ๋์ด ์์ด, ๊ฐ Locker๋ ํ๋์ Member์๋ง ์ฐ๊ด๋ ์ ์๋ค.
์ผ๋์ผ ๊ด๊ณ๋ ๋ ์ํฐํฐ๊ฐ ์๋ก 1:1๋ก ๋งคํ๋๋ ๊ด๊ณ๋ก, ํ๋์ ๊ฐ์ฒด๊ฐ ๋ค๋ฅธ ํ๋์ ๊ฐ์ฒด์๋ง ์ฐ๊ด๋๋ ๊ตฌ์กฐ์ด๋ค.
๋ฐ์ดํฐ๋ฒ ์ด์ค์์๋ ์ธ๋ ํค์ ์ ๋ํฌ ์ ์ฝ์กฐ๊ฑด์ ์ฌ์ฉํด ์ด๋ฅผ ๊ตฌํํ๋ฉฐ, ๊ฐ์ฒด ๋ชจ๋ธ์์๋ ํ๋ ์ฐธ์กฐ๋ฅผ ํตํด ์ฐ๊ด๊ด๊ณ๋ฅผ ํํํ๋ค.
Member ๊ฐ์ฒด์ Team ๊ฐ์ฒด๊ฐ ๋ค๋์ผ ๊ด๊ณ๋ฅผ ๊ฐ์ง๋ค.
์ฆ, ์ฌ๋ฌ Member ๊ฐ์ฒด๊ฐ ํ๋์ Team ๊ฐ์ฒด์ ์ฐ๊ด๋ ์ ์๋ค.
Member ํด๋์ค๋ Team team ํ๋๋ฅผ ํตํด Team ๊ฐ์ฒด๋ฅผ ์ฐธ์กฐํ๋ค.
์ด๋ ์ฌ๋ฌ Member๊ฐ ๋์ผํ Team ๊ฐ์ฒด์ ์ํ ์ ์์์ ๋ํ๋ธ๋ค.
๋ฐ์ดํฐ๋ฒ ์ด์ค์์๋ MEMBER ํ
์ด๋ธ์ด TEAM_ID๋ฅผ ์ธ๋ ํค(FK)๋ก ๊ฐ์ง๋ฉฐ, ์ด๋ฅผ ํตํด TEAM ํ
์ด๋ธ๊ณผ์ ๊ด๊ณ๋ฅผ ์ ์ํ๋ค.
TEAM_ID ํ๋๋ MEMBER ํ
์ด๋ธ์ ์ํ๋ฉฐ, ์ด๋ ์ฌ๋ฌ MEMBER๊ฐ ๋์ผํ TEAM์ ์ฐ๊ฒฐ๋ ์ ์๋๋ก ํ๋ค.
๋ค๋์ผ ๊ด๊ณ๋ ์ฌ๋ฌ ์ํฐํฐ๊ฐ ํ๋์ ์ํฐํฐ์ ์ฐ๊ด๋๋ ๊ด๊ณ๋ก, ๊ฐ์ฒด ๋ชจ๋ธ์์๋ Member๊ฐ Team์ ์ฐธ์กฐํ๋ ๋ฐฉ์์ผ๋ก ํํ๋๋ค.
๋ฐ์ดํฐ๋ฒ ์ด์ค์์๋ ์ธ๋ ํค๋ฅผ ํตํด ์ด ๊ด๊ณ๋ฅผ ๊ตฌํํ๋ฉฐ, ์ฌ๋ฌ Member๊ฐ ๊ฐ์ Team์ ์ํ ์ ์๋ค. ์ด ๊ตฌ์กฐ๋ ํ๊ณผ ์์๋ ๋ฉค๋ฒ๋ค ๊ฐ์ ๊ด๊ณ๋ฅผ ํจ์จ์ ์ผ๋ก ๊ด๋ฆฌํ ์ ์๊ฒ ํด์ค๋ค.
Member์ Team ๊ฐ์ฒด๊ฐ ์๋ก ์๋ฐฉํฅ์ผ๋ก ์ฐธ์กฐํ๊ณ ์๋ค. Member ๊ฐ์ฒด๋ Team team ํ๋๋ฅผ ํตํด Team ๊ฐ์ฒด๋ฅผ ์ฐธ์กฐํ๋ฉฐ, Team ๊ฐ์ฒด๋ List< Member > members ํ๋๋ฅผ ํตํด ์ฌ๋ฌ Member ๊ฐ์ฒด๋ค์ ์ฐธ์กฐํ๋ค.
์ฆ, ์ฌ๋ฌ Member๊ฐ ํ๋์ Team์ ์ํ๊ณ , Team์ ์์ ์๊ฒ ์ํ ๋ชจ๋ Member๋ค์ ์ฐธ์กฐํ ์ ์๋ค.
๋ฐ์ดํฐ๋ฒ ์ด์ค์์๋ MEMBER ํ
์ด๋ธ์ด TEAM_ID ์ธ๋ ํค(FK)๋ฅผ ํตํด TEAM ํ
์ด๋ธ๊ณผ ์ฐ๊ด๋์ด ์๋ค.
์ฌ์ง์์ ํ์๋ ๊ฒ์ฒ๋ผ, Team ๊ฐ์ฒด์ ์ถ๊ฐ๋ members ํ๋๋ ํ
์ด๋ธ ๊ตฌ์กฐ์๋ ์ํฅ์ ์ฃผ์ง ์์ผ๋ฉฐ, ์ด๋ ๊ฐ์ฒด ๋ชจ๋ธ ์์์๋ง ๊ด๋ฆฌ๋๋ค.
์ด ๊ด๊ณ์์ Member ์ํฐํฐ๊ฐ ์ฐ๊ด๊ด๊ณ์ ์ฃผ์ธ์ด๋ค. ์๋ํ๋ฉด, ์ธ๋ ํค(TEAM_ID)๊ฐ MEMBER ํ ์ด๋ธ์ ์กด์ฌํ๊ธฐ ๋๋ฌธ์ด๋ค. ์ฐ๊ด๊ด๊ณ ์ฃผ์ธ์ ๋ฐ์ดํฐ๋ฒ ์ด์ค์์ ์ค์ ๋ก ์ธ๋ ํค๋ฅผ ๊ด๋ฆฌํ๊ณ , ํด๋น ํค๋ฅผ ์ ๋ฐ์ดํธํ๋ ์ญํ ์ ํ๋ค.
์ด ๊ตฌ์กฐ๋ Member์ Team ๊ฐ์ ๊ด๊ณ๋ฅผ ์๋ฐฉํฅ์ผ๋ก ์ค์ ํ์ฌ, Member๊ฐ Team์ ์ฐธ์กฐํ ๋ฟ๋ง ์๋๋ผ Team๋ ์์ ์๊ฒ ์ํ Member๋ค์ ์ฐธ์กฐํ ์ ์๋๋ก ํ๋ค.
์ด๋ฌํ ์๋ฐฉํฅ ๊ด๊ณ๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์์์ ์ธ๋ ํค๋ฅผ ๊ด๋ฆฌํ๋ ์ฃผ์ธ ์ํฐํฐ(Member)์ ๋น์ฃผ์ธ ์ํฐํฐ(Team)๋ก ๊ตฌ๋ถ๋์ด ๊ตฌํ๋๋ค.
์ฝ๋ ๊ตฌ์ฑ์ ๋ณด๋ฉด Team ํด๋์ค๊ฐ @OneToMany ์ด๋
ธํ
์ด์
์ ์ฌ์ฉํ์ฌ Member๋ค๊ณผ ์ผ๋๋ค ๊ด๊ณ๋ฅผ ํ์ฑํ๊ณ ์๋ค.
@JoinColumn(name = "TEAM_ID") ์ด๋
ธํ
์ด์
์ members ๋ฆฌ์คํธ๊ฐ TEAM_ID ์ธ๋ ํค๋ฅผ ํตํด Member๋ค๊ณผ ์ฐ๊ด๋๋ค๋ ๊ฒ์ ๋ํ๋ธ๋ค.
List< Member > members ํ๋๋ฅผ ํตํด Team ๊ฐ์ฒด๋ ์ฌ๋ฌ Member ๊ฐ์ฒด๋ฅผ ๊ด๋ฆฌํ ์ ์๋ค.
Team ๊ฐ์ฒด๋ ์ฌ๋ฌ Member ๊ฐ์ฒด์ ์ฐ๊ฒฐ๋๋ฉฐ, ์ด ๊ด๊ณ๋ ๋จ๋ฐฉํฅ์ด๋ค. ์ฆ, Team์ Member๋ค์ ์ฐธ์กฐํ์ง๋ง, Member๋ Team์ ์ฐธ์กฐํ์ง ์๋๋ค.
๊ด๊ณ๊ฐ ๋จ๋ฐฉํฅ์ด๊ธฐ ๋๋ฌธ์ Member ๊ฐ์ฒด์์๋ Team์ ๋ํ ์ ๋ณด๊ฐ ์๋ค.
๋ฐ์ดํฐ๋ฒ ์ด์ค์์ TEAM_ID๋ MEMBER ํ ์ด๋ธ์ ์ธ๋ ํค๋ก ์กด์ฌํ๋ค. ๋ฐ๋ผ์ Member๊ฐ ์ด๋ค Team์ ์ํด ์๋์ง๋ MEMBER ํ ์ด๋ธ์ TEAM_ID ์ปฌ๋ผ์ ํตํด ๊ด๋ฆฌ๋๋ค.
์ฃผ์์ฌํญ
<์ธ๋ ํค ๊ด๋ฆฌ>
@JoinColumn์ ํตํด ์ง์ ๋ ์ธ๋ ํค๋ ๋ฐ๋์ MEMBER ํ
์ด๋ธ์ ์กด์ฌํด์ผ ํ๋ฉฐ, ์ด๋ฅผ ํตํด Team๊ณผ Member ๊ฐ์ ์ฐ๊ด๊ด๊ณ๊ฐ ์ค์ ๋๋ค.
team.getMembers().add(member) ๋ฉ์๋๋ฅผ ํธ์ถํ์ง ์์ผ๋ฉด, Member์ TEAM_ID ํ๋๊ฐ null๋ก ์ ์ฅ๋์ด ๊ด๊ณ๊ฐ ์ค์ ๋์ง ์๋๋ค.
<Update ์ฟผ๋ฆฌ ๋ฐ์>
Team ๊ฐ์ฒด์ Member ๊ฐ์ฒด๋ฅผ ์ถ๊ฐํ ๋๋ง๋ค ์ธ๋ ํค(TEAM_ID)๋ฅผ ์
๋ฐ์ดํธํ๊ธฐ ์ํ ์ฟผ๋ฆฌ๊ฐ ๋ฐ์ํฉ๋๋ค. ์ด๋ก ์ธํด ์ฑ๋ฅ์ ์ํฅ์ ์ค ์ ์์ผ๋ฏ๋ก, ์ด๋ฅผ ์ฃผ์ํ์ฌ ๊ด๋ฆฌํด์ผ ํ๋ค.
<์ค์๋ก ์๋ฐฉํฅ ์ฐ๊ด๊ด๊ณ๋ก ๋ณํ๋ ๊ฐ๋ฅ์ฑ>
๋ง์ฝ Member ๊ฐ์ฒด๊ฐ Team ๊ฐ์ฒด๋ฅผ ์ฐธ์กฐํด์ผ ํ๋ ์ํฉ์ด ๋ฐ์ํ๋ค๋ฉด, ๋จ๋ฐฉํฅ์์ ์๋ฐฉํฅ ์ฐ๊ด๊ด๊ณ๋ก ๋ณ๊ฒฝํด์ผ ํ ์ ์๋ค. ํ์ง๋ง ์ด ๊ฒฝ์ฐ Member ํด๋์ค์ Team ํ๋๋ฅผ ์ถ๊ฐํ๊ณ @ManyToOne ์ด๋
ธํ
์ด์
์ ๋ถ์ฌ์ผ ํ๋ค.
์ด ๊ตฌ์กฐ๋ Team ๊ฐ์ฒด๊ฐ ์ฌ๋ฌ Member ๊ฐ์ฒด์ ์ผ๋๋ค ๋จ๋ฐฉํฅ ๊ด๊ณ๋ฅผ ๊ฐ์ง๋๋ก ์ค์ ํ๋ค. ๋ฐ์ดํฐ๋ฒ ์ด์ค ์์์ ์ธ๋ ํค๋ MEMBER ํ ์ด๋ธ์ ์กด์ฌํ๋ฉฐ, ์ด ๊ด๊ณ๋ ๊ฐ์ฒด ๋ชจ๋ธ์์ ๋จ๋ฐฉํฅ์ผ๋ก ๊ด๋ฆฌ๋๋ค. ์ด ๋ฐฉ์์ ๋จ์ํ์ง๋ง, ์ธ๋ ํค ๊ด๋ฆฌ ๋ฐ ์ ๋ฐ์ดํธ ์ฟผ๋ฆฌ์ ์ฃผ์ํด์ผ ํ๋ฉฐ, ํ์์ ๋ฐ๋ผ ์๋ฐฉํฅ ๊ด๊ณ๋ก ํ์ฅํ ์ ์๋ค.
<์๋ฐฉํฅ>
์ฝ๋๊ตฌ์ฑ์ ๋ณด๋ฉด Member ํด๋์ค๋ Team ํด๋์ค์ ๋ค๋์ผ(Many-to-One)๋ก ์ฐ๊ฒฐ๋์ด ์์ผ๋ฉฐ, @ManyToOne ์ด๋
ธํ
์ด์
์ ํตํด ์ด๋ฅผ ์ค์ ํ๋ค.
@JoinColumn(name = "TEAM_ID") ์ด๋
ธํ
์ด์
์ Member ํ
์ด๋ธ์์ ์ธ๋ ํค๋ก TEAM_ID๋ฅผ ์ฌ์ฉํจ์ ๋ํ๋ธ๋ค.
insertable = false, updatable = false ์ค์ ์ ์ด ํ๋๋ฅผ ์ฝ๊ธฐ ์ ์ฉ์ผ๋ก ๋ง๋ค์ด, ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๊ฐ์ ์ฝ์
ํ๊ฑฐ๋ ์์ ํ ์ ์๋๋ก ์ ํํ๋ค. ์ด๋ ํด๋น ๊ด๊ณ๊ฐ ์๋ฐฉํฅ์ด์ง๋ง, ๋ฐ์ดํฐ์ ์ผ๊ด์ฑ์ ์ ์งํ๊ธฐ ์ํด ํ์ชฝ์์๋ง ์ธ๋ ํค๋ฅผ ๊ด๋ฆฌํ๊ฒ ํ๋ ค๋ ๋ชฉ์ ์ด๋ค.
Team๊ณผ Member ๊ฐ์ ๊ด๊ณ๋ ์๋ฐฉํฅ์ด๋ค. Team ํด๋์ค๋ List< Member > ํ๋๋ฅผ ํตํด ์ฌ๋ฌ Member ๊ฐ์ฒด๋ค์ ์ฐธ์กฐํ๊ณ , Member ํด๋์ค๋ Team ๊ฐ์ฒด๋ฅผ ์ฐธ์กฐํ๋ค.
์ฆ, Member๊ฐ ์ด๋ Team์ ์ํ๋์ง๋ฅผ ์ ์ ์์ผ๋ฉฐ, Team๋ ์์ ์๊ฒ ์ํ Member๋ค์ ์ ์ ์๋ค.
๋ฐ์ดํฐ๋ฒ ์ด์ค์์๋ MEMBER ํ ์ด๋ธ์ด TEAM_ID ์ธ๋ ํค๋ฅผ ํตํด TEAM ํ ์ด๋ธ๊ณผ ์ฐ๊ฒฐ๋์ด ์๋ค. ์ด ์ธ๋ ํค๋ Member ์ํฐํฐ์ ์ํด ๊ด๋ฆฌ๋์ง๋ง, ํด๋น ํ๋๋ ์ฝ๊ธฐ ์ ์ฉ์ผ๋ก ์ค์ ๋์ด์๋ค.
์ผ๋๋ค ์๋ฐฉํฅ ์ฐ๊ด๊ด๊ณ๋ Team์ด ์ฌ๋ฌ Member๋ฅผ ์ฐธ์กฐํ๊ณ , Member๋ Team์ ์ฐธ์กฐํ๋ ๊ตฌ์กฐ๋ฅผ ๊ฐ์ง๋ค. ์ด ๊ด๊ณ์์ Member ์ชฝ์์ ์ธ๋ ํค๋ฅผ ๊ด๋ฆฌํ์ง๋ง, ์ฝ๊ธฐ ์ ์ฉ์ผ๋ก ์ค์ ํ์ฌ ๋ฐ์ดํฐ์ ์ผ๊ด์ฑ์ ์ ์งํ๊ณ , ํน์ ์ํฉ์์ ๊ด๊ณ๋ฅผ ์์ ํ๊ฒ ์ฒ๋ฆฌํ ์ ์๋๋ก ํ๋ค. ์ด๋ฅผ ํตํด ์๋ฐฉํฅ ๊ด๊ณ๋ฅผ ๊ตฌํํ๋, ์ธ๋ ํค ๊ด๋ฆฌ๋ฅผ ํ์ชฝ์์๋ง ์ฑ ์์ง๋ ๋ฐฉ์์ผ๋ก ์ค์ ํ ์ ์๋ค.
๊ฐ์ฒด ๋ชจ๋ธ์์๋ Member์ Product ๊ฐ์ ๋ค๋๋ค ๊ด๊ณ๋ฅผ List< Product >์ List< Member >๋ฅผ ์ฌ์ฉํ์ฌ ๊ตฌํํ๋ค. ์ด๋ฅผ ํตํด Member๋ ์ฌ๋ฌ Product๋ฅผ, Product๋ ์ฌ๋ฌ Member๋ฅผ ์ฐธ์กฐํ ์ ์๋ค.
@ManyToMany ์ด๋
ธํ
์ด์
์ ์ฌ์ฉํ๊ณ , @JoinTable ์ด๋
ธํ
์ด์
์ ํตํด ์ค๊ฐ ํ
์ด๋ธ(MEMBER_PRODUCT)์ ์ค์ ํ์ฌ ๋ค๋๋ค ๊ด๊ณ๋ฅผ ๊ตฌํํ๋ค.
๋ฐ์ดํฐ๋ฒ ์ด์ค์์๋ ๋ค๋๋ค ๊ด๊ณ๋ฅผ ์ง์ ์ ์ผ๋ก ํํํ ์ ์๊ธฐ ๋๋ฌธ์, ์ค๊ฐ ํ
์ด๋ธ(์ฐ๊ฒฐ ํ
์ด๋ธ)์ ์ฌ์ฉํ๋ค. ์ด ์ค๊ฐ ํ
์ด๋ธ์ ๋ ์ํฐํฐ์ ์ธ๋ ํค๋ก ๊ตฌ์ฑ๋๋ฉฐ, ๊ฐ๊ฐ์ ์ธ๋ ํค๋ ์์ชฝ ์ํฐํฐ์ ์ผ๋๋ค[1:N]๊ด๊ณ๋ฅผ ๋งบ๋๋ค.
์์์์๋ Member_Product๋ผ๋ ์ค๊ฐ ํ
์ด๋ธ์ ํตํด MEMBER์ PRODUCT ๊ฐ์ ๋ค๋๋ค ๊ด๊ณ๋ฅผ ๊ตฌํํ๊ณ ์๋ค.
๋ค๋๋ค ๊ด๊ณ๋ ๋ ์ํฐํฐ ๊ฐ์ ๋ค๋๋ค ์ฐ๊ฒฐ์ ์ค์ ํ๋ ๊ตฌ์กฐ๋ก, ์ด๋ฅผ ์ํด ์ค๊ฐ ํ ์ด๋ธ์ ์ฌ์ฉํ์ฌ ๊ด๊ณ๋ฅผ ๊ด๋ฆฌํ๋ค. ๊ฐ์ฒด ๋ชจ๋ธ์์๋ @ManyToMany ์ด๋ ธํ ์ด์ ์ ์ฌ์ฉํ๋ฉฐ, ์ค๋ฌด์์๋ ์ด๋ฅผ ๋ค๋์ผ ๊ด๊ณ๋ก ํ์ด๋ด์ด ๊ด๋ฆฌํ๋ ๊ฒ์ด ์ผ๋ฐ์ ์ด๋ค.
์ฐ๊ด๊ด๊ณ ๋งคํ์ ๊ฐ์ฒด ์งํฅ ์ค๊ณ์์ ์ํฐํฐ ๊ฐ์ ๊ด๊ณ๋ฅผ ๋ช ํํ๊ฒ ํํํ๊ณ , ์ด๋ฅผ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๊ด๊ณํ ๋ชจ๋ธ๊ณผ ์ผ์น์์ผ ๋ฐ์ดํฐ์ ์ผ๊ด์ฑ๊ณผ ๋ฌด๊ฒฐ์ฑ์ ์ ์งํ๋ ๋ฐ ํ์์ ์ด๋ค. ์ฌ๋ฐ๋ฅธ ์ฐ๊ด๊ด๊ณ ๋งคํ์ ํตํด ์ฝ๋์ ๊ฐ๋ ์ฑ๊ณผ ์ ์ง๋ณด์์ฑ์ ๋์ผ ์ ์์ผ๋ฉฐ, ๋ณต์กํ ๋น์ฆ๋์ค ๋ก์ง์ ํจ์จ์ ์ผ๋ก ๊ตฌํํ ์ ์๋ค.
ํนํ, ์ ์ ํ ๋งคํ ์ค๊ณ๋ ์ฑ๋ฅ ์ต์ ํ์ ํฐ ์ํฅ์ ๋ฏธ์น๋ค. ์๋ชป๋ ๋งคํ์ ๋ถํ์ํ ์ฟผ๋ฆฌ ๋ฐ์์ด๋ N+1 ๋ฌธ์ ๋ฅผ ์ด๋ํ ์ ์์ง๋ง, ์ฌ๋ฐ๋ฅธ ๋งคํ์ ์ฟผ๋ฆฌ์ ํจ์จ์ฑ์ ๊ทน๋ํํ๊ณ ๋ฐ์ดํฐ๋ฒ ์ด์ค์์ ์ํธ์์ฉ์ ์ต์ํํ ์ ์๋ค. ๋ฐ๋ผ์ ์ฐ๊ด๊ด๊ณ ๋งคํ์ ์์คํ ์ ์ฑ๋ฅ๊ณผ ์ ์ง๋ณด์์ฑ์ ๊ณ ๋ คํ์ฌ ์ ์คํ๊ฒ ์ค๊ณํด์ผ ํ๋ค. ์ด๋ฅผ ํตํด ์์ ์ ์ด๊ณ ํ์ฅ ๊ฐ๋ฅํ ์์คํ ์ ๊ตฌ์ถํ ์ ์๋ค.