ํ๋ก์ ํธ๋ฅผ ์งํํ๋ฉฐ ๊ฐ ๊ฒ์ฆ ์์น์ ๋ํด ๊ณ ๋ฏผํ๋ ๋ด์ฉ์ธ๋ฐ์, DTO์์ @Validation ์ ์ฌ์ฉํด ๊ฐ์ ๊ฒ์ฆํ๋ ๋ฐฉ๋ฒ์ ๋ฐ๊พธ๊ณ ์ ํ๋ ๋ด์ฉ์ ๋๋ค. ์ ๋ต์ ์๊ธฐ ๋๋ฌธ์ ํ๋์ ์๊ฒฌ์ผ๋ก ์ฝ์ด์ฃผ์๋ฉด ๊ฐ์ฌํ๊ฒ ์ต๋๋ค. JPA๋ฅผ ์ฌ์ฉํ๊ธฐ ๋๋ฌธ์ ๊ธ์ ์ฝ๊ธฐ ์ํด์๋ JPA์ ๋ํ ๊ธฐ๋ณธ์ ์ธ ์ดํด๊ฐ ํ์ํฉ๋๋ค.
1. DTO์์ ๊ฐ ๊ฒ์ฆ
์ํฐํฐ๋ฅผ ์์ฑํ๊ธฐ ์ํด ๊ฐ์ DTO์์ ๊ฒ์ฆํ ์ ์์ต๋๋ค. ์ด๋ ์๋์ ๊ฐ์๋ฐ์, ํด๋ผ์ด์ธํธ๋ก๋ถํฐ ๋ฐ์ ๊ฐ์ ์ด๋ ธํ ์ด์ ์ ํตํด ๊ฒ์ฆํ๋ ๊ฒ์ ๋๋ค. ์ปจํธ๋กค๋ฌ์์ @Valid ์ด๋ ธํ ์ด์ ์ ์ฌ์ฉํด์ผ ํ์ง๋ง ์ด๋ ธํ ์ด์ ์ ํตํด ๊ฐ์ ๊ฐํธํ๊ฒ ๊ฒ์ฆํ ์ ์์ต๋๋ค.
ํ์ง๋ง ์๋์ ๊ฐ์ ๋ช๊ฐ์ง ์๋ฌธ์ ์ด ๋ค์์ต๋๋ค. ์์ต๋๋ค. ์๊ตฌ์ฌํญ์ด ๋ฐ๋๋ฉด DTO๋ฅผ ์ฌํ์ฉํ ์๋ ์์ผ๋ฉฐ ๋งค๋ฒ ์กฐ๊ฑด์ ๋ณ๊ฒฝํด์ค์ผ ํ๊ธฐ ๋๋ฌธ์ ๋๋ค. ๋ํ DTO๋ ๊ฐ์ ์ ๋ฌํ๊ธฐ ์ํ ์ญํ ์ ์ง๋๋๋ฐ ์ด๋ ๊ฒ ๋๋ฉด ๊ฐ์ ์ ๋ฌํ๋ฉด์ ๊ฒ์ฆ๊น์ง ํด์ผํ๋ ์ฑ ์์ด ์๊ธฐ๊ณ , ๋ฌด์๋ณด๋ค DTO๋ฅผ ์ํ ํ ์คํธ์ฝ๋๋ฅผ ๋ฐ๋ก ์์ฑํ๊ธฐ๋ ์ ๋งคํ์ต๋๋ค.
- ๋ง์ฝ ํ ํ๋ฉด์ ๋ํ ๋ช ์ธ๊ฐ ๋ฐ๋๋ค๋ฉด ์ ์ฐํ๊ฒ ๋์ฒํ ์ ์์๊น?
- ๊ฒ์ฆ ์กฐ๊ฑด์ด ๊น๋ค๋กญ๋ค๋ฉด ์ด๋ ธํ ์ด์ ์ด ๋ง์ด ๋ฌ๋ฆฌ๊ฒ ๋ ํ ๋ฐ ์ด๊ฒ์ ํ ๋์ ์์๋ณผ ์ ์์๊น?
- DTO๊ฐ ๊ฐ์ ๊ฒ์ฆํ๋๊ฒ ๋ง๋ ๊ฒ์ผ๊น?
2. ๊ฐ ๊ฐ์ฒด๋ฅผ ํตํ ๊ฒ์ฆ
๊ทธ๋์ ๊ฐ ๊ฐ์ฒด๋ฅผ ์ฌ์ฉํด ๊ฐ์ฒด ๋ด๋ถ์์ ๊ฐ์ ๊ฒ์ฆํ๋ ๋ฐฉ๋ฒ์ ์ฌ์ฉํ๋๋ฐ์, ์ํฐํฐ ๋ด๋ถ์ @Embedded๋ก ๊ฐ ๊ฐ์ฒด๋ฅผ ๋ง๋ค์ด ๋ด๋ถ์ ๊ฒ์ฆํ ์กฐ๊ฑด์ ๋๋ ๊ฒ์ ๋๋ค.
์ด๋ ๊ฒ ๋๋ฉด ๊ฐ ๊ฐ์ฒด์์ ๊ฐ์ ๊ฒ์ฆํ๊ธฐ ๋๋ฌธ์ ๋ณ๊ฒฝ์ฌํญ์ด ๋ฐ์ํ๋๋ผ๋ ์ด ํ ๊ณณ๋ง ๋ฐ๊ฟ์ฃผ๋ฉด ๋๊ณ ๊ฐ์ฒด๋ฅผ ์ฌํ์ฉํ ์ ์์ต๋๋ค. ๋ํ DTO๋ ๊ต์ฅํ ๊ฐ๋จํด์ง๋๋ฐ ์๋์ ๊ฐ์ด ๊ฒ์ฆ์ ์ํ ์ด๋ ธํ ์ด์ ์ด ์ฌ๋ผ์ง๊ณ ์จ์ ํ ๊ฐ์ ์ ๋ฌํ๋ ์ญํ ๋ง ํ ์ ์์ต๋๋ค.
๋ฌด์๋ณด๋ค ํ ์คํธ์ฝ๋๋ฅผ ์์ฑํ๊ธฐ ์ฌ์์ง๋๋ฐ ๊ฐ ๊ฐ์ฒด๋ ์ฌํ์ฉํ ์ ์๊ธฐ ๋๋ฌธ์ ํ ์คํธ์ฝ๋๋ฅผ ์์ฑํ๊ธฐ๊ฐ ์ฝ์ต๋๋ค.
3. ๋จ์
๋ฌผ๋ก ๋จ์ ๋ ์กด์ฌํฉ๋๋ค. ๋ํ์ ์ผ๋ก ๊ฐ ๊ฐ์ฒด๋ฅผ ์์ฑํ๋ ๊ณผ์ ์์ ์ค๋ฅ๋ฅผ ์ ์ ์๋ค๋ ์ ๊ณผ ํ๋ก์ ํธ๊ฐ ๋ณต์กํด์ง๋ค๋ ์ ์ ๋๋ค. ๊ฐ ๊ฐ์ฒด๋ฅผ ์์ฑํ๋ ๊ณผ์ ์์ ์ค๋ฅ๋ฅผ ์ ์ ์๋ค๋ ๊ฒ์ ์๋์ ๊ฐ์ด ์์ฑ์๋ฅผ ํธ์ถํด์ผ ํ๋ค๋ ์ ์ธ๋ฐ์, ์์ฑ์๋ฅผ ํธ์ถํ๊ณ ๊ทธ ๊ณผ์ ์์ ์์ธ๊ฐ ๋ฐ์ํ๊ธฐ ๋๋ฌธ์ ์ถ๊ฐ์ ์ธ ๋น์ฉ์ด ๋ฐ์ํฉ๋๋ค.
๋ํ JPA๋ฅผ ์ฌ์ฉํ๊ฒ ๋๋ฉด protected ์ด์์ ๊ธฐ๋ณธ ์์ฑ์๋ฅผ ๋ฐ๋์ ๊ฐ์ ธ๊ฐ์ผ ํ๋ค๋ ์ ๊ณผ ๊ฐ ๋น๊ต๋ฅผ ์ํด Equals & HashCode๋ฅผ ์ฌ์ ์ํด์ค์ผ ํ๋ ๋ฌธ์ ๋ ์์ต๋๋ค.
๋ฌด์๋ณด๋ค ํ๋ก์ ํธ๊ฐ ๋ณต์กํด์ง๋ค๋ ์ ์ด ๊ฐ์ฅ ํฐ ๋ฌธ์ ์ ์ธ๋ฐ์, ์ด๋ ํฌ๊ฒ Getter ์ฌ์ฉ, ๊ฐ์ฒด ๊ทธ๋ํ ํ์์์ ๋ํ๋ฉ๋๋ค. Getter๋ฅผ ์ฌ์ฉํ ๋ ๋ํผ ํด๋์ค๋ฅผ ์ฌ์ฉํ๊ธฐ ๋๋ฌธ์ ๊ฐ ๊ฐ์ฒด ๋ด๋ถ์ ์ํฐํฐ ๋ชจ๋ Getter ๋ฉ์๋๋ฅผ ์ ์ํด์ค์ผ ํฉ๋๋ค.
๋ฟ๋ง ์๋๋ผ ๊ฐ์ฒด ๊ทธ๋ํ ํ์์ ํ ๋๋ ์๋์ ๊ฐ์ด ํ ๋ฒ ๋ ๊ฐ์ฒด๋ฅผ ํ์ํด์ผ ํฉ๋๋ค. ๋ง์ ์ด์ ์ด ์์ง๋ง ์ด์ฒ๋ผ Getter ์ฌ์ฉ, ํ๋ก์ ํธ์ ๋ณต์ก๋ ์ฆ๊ฐ์ ๊ฐ์ ๋จ์ ๋ ๋ถ๋ช ํ ์กด์ฌํฉ๋๋ค.
4. Conclusion
๋ชจ๋ ๊ฐ๋ค์ ๋ํผ ํด๋์ค๋ก ํฌ์ฅํ๊ณ , @Embedded ์ด๋ ธํ ์ด์ ์ ์ฌ์ฉํ๋ ๊ฒ์ ๊ทธ๋ ๊ฒ ์ผ๋ฐ์ ์ด์ง ์๊ธฐ ๋๋ฌธ์ ํ์๋ค๊ณผ์ ํ์๊ฐ ํ์ํ ๊ฒ ๊ฐ์ต๋๋ค. ์ด ๋ถ๋ถ๋ง ํ์๊ฐ ๋๋ค๋ฉด ๋ณ๊ฒฝ์ ์ ์ค์ผ ์ ์๊ณ ๊ฒ์ฆ์ ์ํ ๋ง์ ์ด๋ ธํ ์ด์ ์ ์๋ตํ ์ ์๊ธฐ ๋๋ฌธ์ ๊ฝค ๊ด์ฐฎ์ ๋ฐฉ๋ฒ์ด๋ผ ์๊ฐ์ด ๋ญ๋๋ค. **ํญ์ ์๊ฐํ์ง๋ง ์ฝ๋์ ์ ๋ต์ ์๊ธฐ ๋๋ฌธ์ ์์ ์ ์ํฉ์ ๋ง๋ ๋ฐฉ๋ฒ์ ์ ์ฉํ๋ฉด ๋ ๊ฒ ๊ฐ์ต๋๋ค.
'๐ฅDEV > Java || Spring' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[์ดํํฐ๋ธ์๋ฐ] Item 16. (0) | 2022.08.21 |
---|---|
ํ๋์ ๋ ํฌ์งํ ๋ฆฌ๋ก ํ์ ์ํฐํฐ ๊ด๋ฆฌํ๊ธฐ (0) | 2022.07.31 |
@Component์ @Configuration์ ์ฐจ์ด (0) | 2022.07.24 |
FrontController ํจํด (0) | 2022.07.21 |
@Embedded์ ๊ฐ ๊ฐ์ฒด (0) | 2022.07.17 |
๋๊ธ