์ ๊ทธ๋ฆฌ๊ฑฐํธ
- ๋ณต์กํ ๋๋ฉ์ธ์ ์ดํดํ๊ณ ๊ด๋ฆฌํ๊ธฐ ์ฌ์ด ๋จ์๋ก ๋ง๋ค๋ ค๋ฉด ์์ ์์ค์์ ๋ชจ๋ธ์ ์กฐ๋งํ ์ ์๋ ๋ฐฉ๋ฒ์ด ํ์ํจ
- ์ผ๊ด์ฑ์ ๊ด๋ฆฌํ๋ ๊ธฐ์ค์ด ๋จ. ๋ณต์ก๋๊ฐ ๋ฎ์์ง๋ ๋งํผ ๋๋ฉ์ธ ๊ธฐ๋ฅ์ ํ์ฅ/๋ณ๊ฒฝํ๋๋ฐ ํ์ํ ๋ ธ๋ ฅ์ด ์ค์ด๋ฌ.
- ์ ๊ทธ๋ฆฌ๊ฑฐํธ๋ ๋
๋ฆฝ๋ ๊ฐ์ฒด ๊ตฐ
- ํ ์ ๊ทธ๋ฆฌ๊ฑฐํธ์ ์ํ ๊ฐ์ฒด๋ ๋ค๋ฅธ ์ ๊ทธ๋ฆฌ๊ฑฐํธ์ ์ํ์ง ์์.
- ๊ฐ ์ ๊ทธ๋ฆฌ๊ฑฐํธ๋ ์๊ธฐ์์ ์ ๊ด๋ฆฌํ ๋ฟ ๋ค๋ฅธ ์ ๊ทธ๋ฆฌ๊ฑฐํธ๋ฅผ ๊ด๋ฆฌํ์ง ์์
- ๊ฒฝ๊ณ ์ค์
- ์ค์ ๊ธฐ์ค: ๋๋ฉ์ธ ๊ท์น & ์๊ตฌ์ฌํญ
- A๊ฐ B๋ฅผ ๊ฐ๋๋ค (์ํ-๋ฆฌ๋ทฐ) ≠> A B ๊ฐ ํ ์ ๊ทธ๋ฆฌํฐ๊ทธ์ ์ํ๋ค
- ํจ๊ป ์์ฑ๋์ง ์๊ณ ํจ๊ป ๋ณ๊ฒฝ๋์ง ์์
- ๋ณ๊ฒฝํ๋ ์ฃผ์ฒด๋ ๋ค๋ฆ
- B์ ๋ณ๊ฒฝ์ด A์ ์ํฅ์ ์ฃผ์ง ์์
์ ๊ทธ๋ฆฌ๊ฑฐํธ ๋ฃจํธ
- ์ ๊ทธ๋ฆฌ๊ฑฐํธ๋ ์ฌ๋ฌ ๊ฐ์ฒด๋ก ๊ตฌ์ฑ๋๊ธฐ ๋๋ฌธ์ ํ ๊ฐ์ฒด๋ง ์ํ๊ฐ ์ ์์ด์ด์ ์๋จ → ์ผ๊ด์ฑ ์ ์ง!
- → ์ ๊ทธ๋ฆฌ๊ฑฐํธ ์ ์ฒด๋ฅผ ๊ด๋ฆฌํ ์ฃผ์ฒด๊ฐ ํ์: ๋ฃจํธ ์ํฐํฐ
๋ฃจํธ ์ํฐํฐ(์๊ทธ๋ฆฌ๊ฑฐํธ ๋ฃจํธ)
- ์ ๊ทธ๋ฆฌ๊ฑฐํธ์ ๋ํ ์ํฐํฐ
- ์ ๊ทธ๋ฆฌ๊ฑฐํธ์ ์ํ ๊ฐ์ฒด๋ ๋ฃจํธ ์ํฐํฐ์ ์ง/๊ฐ์ ์ ์ผ๋ก ์ํจ
- ์ ๊ทธ๋ฆฌ๊ฑฐํธ ์ผ๊ด์ฑ ์ ์ง๋ฅผ ์ฑ ์์ง → ๋๋ฉ์ธ ๊ท์น์ ๋ฐ๋ผ ๋๋ฉ์ธ ๊ธฐ๋ฅ(๋ฉ์๋)์ ๊ตฌํ(void verify~~~)
- ๋ฃจํธ ์ํฐํฐ๊ฐ ์๋ ๊ฐ์ฒด๊ฐ ๋ค๋ฅธ ๊ฐ์ฒด๋ฅผ ์ง์ ๋ณ๊ฒฝํ๋ฉด ์๋จ
์ ๊ทธ๋ฆฌ๊ฑฐํธ ๋ฃจํธ๋ฅผ ํตํด์๋ง ๋๋ฉ์ธ ๋ก์ง์ ๊ตฌํํ๊ธฐ ์ํ ๋ฐฉ๋ฒ
- ๋๋ฉ์ธ ๋ชจ๋ธ์ ์ํฐํฐ๋ ๋ฐธ๋ฅ์ setter ๋ฅผ public ์ผ๋ก ๋ง๋ค์ง ์๋๋ค.
- ๋ฐธ๋ฅ ํ์ ์ ๋ถ๋ณ์ผ๋ก ๊ตฌํํ๋ค.
- ๋๋ฉ์ธ ๋ก์ง์ด ๋๋ฉ์ธ ๊ฐ์ฒด์ ์์ง๋ ์ ์๋๋ก setter๋ฅผ private์ผ๋ก ์ ์ธ
- set ํ์์ ์ด๋ฆ์ ๊ฐ๋ ๊ณต๊ฒ ๋ฉ์๋ ์ฌ์ฉํ์ง ์์ผ๋ฉด ์๋ฏธ๊ฐ ๋ ์ ๋๋ฌ๋๋ ์ด๋ฆ์ ์ฌ์ฉํ๊ฒ ๋จ
- ex. cancel, changePassword...
- ๋ฐธ๋ฅ ๊ฐ์ฒด๊ฐ ๋ถ๋ณ์ด๋ฉด ๊ฐ์ ๋ณ๊ฒฝํ๋ ๋ฐฉ๋ฒ์ → ์๋ก์ด ๊ฐ์ฒด๋ฅผ ํ ๋นํ๋ ๊ฒ ๋ฟ
- ๋ถ๋ณ์ผ๋ก ๊ตฌํํ ์ ์๋ ๊ฒฝ์ฐ: ๋ณ๊ฒฝ๊ธฐ๋ฅ์ ํจํค์ง๋ protected ๋ฒ์๋ก ํ์ ํ๋๋ก ์ ํ
- ์ ๊ทธ๋ฆฌ๊ฑฐํธ ๋ฃจํธ๋ ์ ๊ทธ๋ฆฌ๊ฑฐํธ ๋ด๋ถ์ ๋ค๋ฅธ ๊ฐ์ฒด๋ฅผ ์กฐํฉํด์ ๊ธฐ๋ฅ์ ์์ฑ.
ํธ๋์ญ์
- ํ ํธ๋์ญ์ ์์๋ ํ๊ฐ์ ์ ๊ทธ๋ฆฌ๊ฑฐํธ๋ง ์์ ํด์ผํ๋ค.
- ์์ ํ๋ ์ ๊ทธ๋ฆฌ๊ฑฐํธ ๊ฐ์๊ฐ ๋ง์์ง์๋ก ์ ์ฒด ์ฒ๋ฆฌ๋์ด ๋จ์ด์ง (์ ๊ธ๋์์ด ๋ง์์ง)
๋ฆฌํฌ์งํฐ๋ฆฌ์ ์ ๊ทธ๋ฆฌ๊ฑฐํธ
- ๊ฐ์ฒด์ ์์์ฑ์ ์ฒ๋ฆฌํ๋ ๋ฆฌํฌ์งํฐ๋ฆฌ๋ ์ ๊ทธ๋ฆฌ๊ฑฐํธ ๋จ์๋ก ์กด์ฌํจ.
- ์ ๊ทธ๋ฆฌ๊ฑฐํธ ๋ด ๊ฐ๊ฐ์ ๊ฐ์ฒด๊ฐ ๋ณ๋์ DBํ ์ด๋ธ์ ์กด์ฌํ๋ค๊ณ ํด์ ๋ ํฌ์งํฐ๋ฆฌ๋ฅผ ๊ฐ๊ฐ ๋ง๋ค์ง ์๋๋ค
- ๋ ํฌ์งํฐ๋ฆฌ ์ ๊ณต ๋ฉ์๋
- save : ์ ๊ทธ๋ฆฌ๊ฑฐํธ ์ ์ฅ
- findById : ์ ๊ทธ๋ฆฌ๊ฑฐํธ ๊ตฌํจ
์ ๊ทธ๋ฆฌ๊ฑฐํธ ๊ฐ ์ฐธ์กฐ
- ์ ๊ทธ๋ฆฌ๊ฑฐํธ ๊ฐ ์ฐธ์กฐ = ์ ๊ทธ๋ฆฌ๊ฑฐํธ์ ๋ฃจํธ๋ฅผ ์ฐธ์กฐ
- ๋ฐฉ๋ฒ1) ํ๋๋ฅผ ํตํด ๊ตฌํ
- ์ฐ๊ด๋ ๊ฐ์ฒด ๋ก๋ฉ(JPA: @ManyToOne, @OneToOne...)
- ํ๋๋ฅผ ์ด์ฉํ ์ ๊ทธ๋ฆฌ๊ฑฐํธ ์ฐธ์กฐ์ ๋ฌธ์
- ํธํ ํ์ ์ค์ฉ
- ๋ค๋ฅธ ์ ๊ทธ๋ฆฌ๊ฑฐํธ์ ์ํ๋ฅผ ์ฝ๊ฒ ๋ณ๊ฒฝํ๊ฒ ๋จ → ์ ๊ทธ๋ฆฌ๊ฑฐํธ ๊ด๋ฆฌ๋ฒ์๋ ์๊ธฐ์์ ์ผ๋ก ํ์ ๋์ด์ผํจ.
- ์ฑ๋ฅ์ ๋ํ ๊ณ ๋ฏผ
- ์ง์ฐ ๋ก๋ฉ(lazy) vs ์ฆ์ ๋ก๋ฉ(eager)
- ํ์ฅ ์ด๋ ค์
- ์ฌ์ฉ์/ํธ๋ํฝ์ด ๋์๋ก ๋ถํ ๋ถ์ฐ์ ์ํด ํ์ ๋๋ฉ์ธ๋ณ๋ก ์์คํ ์ ๋ถ๋ฆฌํ๊ธฐ ์์ → ํ์ ๋๋ฉ์ธ ๋ง๋ค ๋ค๋ฅธ DBMS / ๋ค๋ฅธ ์ข ๋ฅ์ ๋ฐ์ดํฐ ์ ์ฅ์๋ฅผ ์ฌ์ฉํ ๊ฐ๋ฅ์ฑ ์๊น → JPA์ ๊ฐ์ ๋จ์ผ ๊ธฐ์ ์ฌ์ฉํ ์ ์์ด์ง
- ํธํ ํ์ ์ค์ฉ
- ๋ฐฉ๋ฒ2) ID๋ฅผ ์ด์ฉํ ๊ฐ์ ์ฐธ์กฐ
- ๋ชจ๋ ๊ฐ์ฒด๊ฐ ์ฐธ์กฐ๋ก ์ฐ๊ฒฐ๋์ง ์ํน, ํ ์ ๊ทธ๋ฆฌ๊ฑฐํธ์ ์ํ ๊ฐ์ฒด๋ค๋ง ์ฐธ์กฐ๋ก ์ฐ๊ฒฐ๋จ → ์ ๊ทธ๋ฆฌ๊ฑฐํธ ๊ฐ ๊ฒฝ๊ณ๋ฅผ ๋ช ํํ ํ๊ณ , ๋ฌผ๋ฆฌ์ ์ฐ๊ฒฐ์ ์ ๊ฑฐ
- ์ฐธ์กฐ๊ฐ ํ์ํ ๋๋ง ์์ฉ์๋น์ค์์ ์์ด๋๋ฅผ ํตํด ๋ก๋ฉํ๋ฉด ๋จ(=์ง์ฐ๋ก๋ฉ)
- ๋ฌธ์ ์
- ์ฌ๋ฌ ์ ๊ทธ๋ฆฌ๊ฑฐํธ๋ฅผ ์ฝ์ด์ผ ํ ๋ ์กฐํ ์๋๊ฐ ๋ฌธ์ ๋ ์ ์์ ⇒ N+1 ์กฐํ
- ์ฃผ๋ฌธ ์ฝ์ด์ค๊ธฐ(1) + ์ฃผ๋ฌธ๋ณ ์ํ ์ฝ์ด์ค๊ธฐ(N)
- ์ง์ฐ ๋ก๋ฉ์ ๋ฌธ์ ์
- jpa : jpql ์ฌ์ฉ or sql ํนํ ๊ธฐ๋ฅ ์ฌ์ฉ์ด ํ์ํ ๊ฒฝ์ฐ: ์กฐํ ๋ถ๋ถ๋ง MyBatis ์ด์ฉ
- ⇒ (O) ์ ์ฉ ์กฐํ ์ฟผ๋ฆฌ๋ฅผ ์ฌ์ฉ : ๋ณ๋ DAO๋ฅผ ๋ง๋ค๊ณ ์กฐํ ๋ฉ์๋์์ ์ธํ์กฐ์ธ์ ์ด์ฉํด์ ๋ก๋ฉ
- ์ฌ๋ฌ ์ ๊ทธ๋ฆฌ๊ฑฐํธ๋ฅผ ์ฝ์ด์ผ ํ ๋ ์กฐํ ์๋๊ฐ ๋ฌธ์ ๋ ์ ์์ ⇒ N+1 ์กฐํ
- ์ ๊ทธ๋ฆฌ๊ฑฐํธ๋ง๋ค ์๋ก ๋ค๋ฅธ ์ ์ฅ์ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ
- ํ๋ฒ์ ์ฟผ๋ฆฌ๋ก ๊ด๋ จ ์ ๊ทธ๋ฆฌ๊ฑฐํธ ์กฐํ ๋ถ๊ฐ
- ์บ์ ์ ์ฉ or ์กฐํ ์ ์ฉ ์ ์ฅ์ ๋ฐ๋ก ๊ตฌ์ฑ
- ์ฝ๋ ๋ณต์กํด์ง์ง๋ง, ์์คํ ์ฒ๋ฆฌ๋ ๋์ผ์ ์์
์ ๊ทธ๋ฆฌ๊ฑฐํธ ๊ฐ ์งํฉ ์ฐ๊ด
1:N or N:1
- 1 → N : ์นดํ
๊ณ ๋ฆฌ๋ณ ํ๋ก๋ํธ ์กฐํ
- Set ๊ณผ ๊ฐ์ ์ปฌ๋ ์ ์ผ๋ก ํํ ๊ฐ๋ฅ ⇒ but, ์ฑ๋ฅ ๋ฌธ์ ๋ฐ์
- N → 1 : ํ๋ก๋ํธ์ ์นดํ
๊ณ ๋ฆฌ ์กฐํ
- ID๋ฅผ ์ด์ฉํ ์ฐ๊ด ์ค์
M:N
- ์์ชฝ ์ ๊ทธ๋ฆฌ๊ฑฐํธ์ ์ปฌ๋ ์ ์ผ๋ก ์ฐ๊ด ์์ฑ → ํ์ง ์์๋ ๋๋ค.. ์๊ตฌ์ฌํญ์ ๊ณ ๋ คํ์ฌ ํ์ํ ์ชฝ์๋ง ์ฐ๊ด์ ์ ์ฉํ์.
- RDBMS: ์กฐ์ธํ ์ด๋ธ ์ฌ์ฉ
- JPA
- @CollectionTable, @ElementCollection , @JoinColumn๋ฑ๊ณผ ๊ฐ์ ๋งคํ์ค์ ์ ์ฌ์ฉ
- JPQL - member of ์ฐ์ฐ์ ์ด์ฉ
์ ๊ทธ๋ฆฌ๊ฑฐํธ๋ฅผ ํฉํ ๋ฆฌ๋ก ์ฌ์ฉํ๊ธฐ
- ์ ๊ทธ๋ฆฌ๊ฑฐํธ๊ฐ ๊ฐ๊ณ ์๋ ๋ฐ์ดํฐ๋ฅผ ์ด์ฉํด์ ๋ค๋ฅธ ์ ๊ทธ๋ฆฌ๊ฑฐํธ๋ฅผ ์์ฑํด์ผํ๋ค๋ฉดex. store(์์ ) ์ ์ํ(๋ฐ์ดํฐ)์ ๋ฐ๋ผ product(๋ฌผ๊ฑด)์ ์์ฑํ๋ ์กฐ๊ฑด์ด ์๋ ๊ฒฝ์ฐ : store ์ product๋ฅผ ์์ฑํ๋ ํฉํฐ๋ฆฌ ๋ฉ์๋๋ฅผ ์ถ๊ฐ
- → ์ ๊ทธ๋ฆฌ๊ฑฐํธ์ ํฉํ ๋ฆฌ ๋ฉ์๋๋ฅผ ๊ตฌํํ์
'BE > DDD' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[DDD Start!] 2. ์ํคํ ์ณ ๊ฐ์ (0) | 2021.06.07 |
---|---|
[DDD Start!] 1. ๋๋ฉ์ธ ๋ชจ๋ธ ์์ (0) | 2021.06.07 |