DTO
- Data Transfer Object (๋ฐ์ดํฐ ์ ์ก ๊ฐ์ฒด)
- ๊ณ์ธต ๊ฐ ๋ฐ์ดํฐ ๊ตํ์ ์ํด ์ฌ์ฉํ๋ ๊ฐ์ฒด
- ๋ก์ง์ ๊ฐ๊ณ ์์ง ์์ ์์ํ ๋ฐ์ดํฐ ๊ฐ์ฒด
- ๋ฐ์ดํฐ๋ฅผ ์ ์กํ๋ ๋ฐ๊ตฌ๋
- getter/setter ๋ฉ์๋๋ง์ ๊ฐ์ง
VO
- value Object (๊ฐ ๊ฐ์ฒด)
- ๊ฐ ๊ทธ ์์ฒด๋ฅผ ํํํ๋ ๊ฐ์ฒด
- ์๋ก ๋ค๋ฅธ ์ด๋ฆ์ ๊ฐ์ง VO์ ์ธ์คํด์ค๊ฐ ๋ชจ๋ ์์ฑ ๊ฐ์ด ๊ฐ๋ค๋ฉด ๊ฐ์ ๊ฐ์ฒด
- equals / hashCode๋ฅผ ์ค๋ฒ๋ผ์ด๋ ํ์
- ๊ฐ์ฒด์ ๋ถ๋ณ์ฑ์ ๋ณด์ฅ
- ๋ก์ง์ ํฌํจํ ์ ์์
DTO VS VO
์น ๊ฐ๋ฐ์์ ์ฌ์ฉํ๋ VO๋ ์ฌ์ค DTO์ด๋ค.
ํผ๋์ ์์ธ์..?
์ด ์ฑ
์์ getter์ setter๊ฐ ์๊ณ , ๋ฐ์ดํฐ ์ ์ก์ ์ํด ์ฌ์ฉํ๋ ๊ฐ์ฒด๋ VO๋ผ๊ณ ์ ์ํด๋ฒ๋ ธ๋ค.
(ํ์๋ ๋ณ๊ฒฝ๋์๊ธดํ์ง๋ง)
DTO๋ฅผ VO์ฒ๋ผ ๋ถ๋ณ ๊ฐ์ฒด๋ก ์ฌ์ฉํ๋ฉด ์ป์ ์ ์๋ ์ด์ ?
DTO๊ฐ ์ ์กํ๊ณ ์ ํ๋ ๋ฐ์ดํฐ๊ฐ ์ ์ก ๊ณผ์ ์ค ๋ณ์กฐ๋์ง ์์์ ๋ณด์ฅํ ์ ์์
Entity
- ์ค์ DB์ ํ ์ด๋ธ๊ณผ ๋งคํ๋๋ ํด๋์ค
- id๋ก ๊ตฌ๋ถ
- ๋ก์ง์ ํฌํจํ ์ ์์
Entity๋ฅผ DTO๋์ ์ฌ์ฉํ ์ ์์ง ์์๊น?
์ฌ์ฉํ ์๋ ์์ง๋ง,
View์์ ํํํ๋ ์์ฑ๊ฐ๋ค์ด ์์ฒญ์ ๋ฐ๋ผ ๊ณ์ ๋ฌ๋ผ์ง ์ ์๋๋ฐ,
๊ทธ ๋๋ง๋ค Entity์ ์์ฑ๊ฐ์ ๋ณ๊ฒฝํ๋ฉด ์์์ฑ ๋ชจ๋ธ์ ํํํ Entity์ ์์์ฑ์ด ๋ชจํธํด์ง๊ธฐ ๋๋ฌธ์ Controller์ ์ธ DTO์ Entity ํด๋์ค๋ ๋ถ๋ฆฌํ๋ ๊ฒ์ด ์ข๋ค.
์ ๋ฆฌ
ย | DTO | VO | Entity |
---|---|---|---|
์ฉ๋ | ๋ ์ด์ด ๊ฐ์ ๋ฐ์ดํฐ ์ ์ก | ์๋ฏธ ์๋ ๊ฐ์ ํํ | DB ํ ์ด๋ธ๊ณผ ๋งคํ๋๋ ํด๋์ค |
๊ฐ๋ณ / ๋ถ๋ณ | ๊ฐ๋ณ ๊ฐ์ฒด | ๋ถ๋ณ ๊ฐ์ฒด | ๊ฐ๋ณ ๊ฐ์ฒด |
๋ก์ง ํฌํจ ์ฌ๋ถ | ๋ก์ง์ ํฌํจํ ์ ์์ | ๋ก์ง์ ํฌํจํ ์ ์์` | ๋ก์ง์ ํฌํจํ ์ ์์ |
์ถ๊ฐ - DTO๋ฅผ ์ด๋ ๊ณ์ธต๊น์ง ์ฌ์ฉํ์ฌ์ผ ํ ๊น
์๋น์ค ๋ ์ด์ด๊ฐ ๊ฐ์ฅ ์ ํฉํ๋ค๊ณ ์๊ฐํ๋ค
Service ๋ ์ด์ด์ ์ ์
- ์ดํ๋ฆฌ์ผ์ด์ ์ ๊ฒฝ๊ณ๋ฅผ ์ ์ํ๊ณ ๋น์ฆ๋์ค ๋ก์ง ๋ฑ ๋๋ฉ์ธ์ ์บก์ํํ๋ ์ญํ
- ์ฆ ๋๋ฉ์ธ์ ๋ณดํธ
- ๋๋ฉ์ธ์ ํํ ๊ณ์ธต์์ ์ฌ์ฉํ ๊ฒฝ์ฐ ๊ฒฐํฉ๋๊ฐ ์ฆ๊ฐํ์ฌ ๋๋ฉ์ธ ๋ณ๊ฒฝ์ด Controller์ ๋ณ๊ฒฝ์ ์ด๋ฐํ๋ค.
- ์ด๋ ์ ์ง๋ณด์์ ๋ฌธ์ ๋ก๋ ์ด์ด์ง ์ ์๋ค.
Controller๊ฐ DTO๋ฅผ ์์ฑํ๋ฉด ์๊ธฐ๋ ๋ฌธ์
- Controller๊ฐ DTO๋ฅผ ์๋ฒฝํ๊ฒ ๋๋ฉ์ธ์์ ๊ฐ์ฒด๋ก ๊ตฌ์ฑํ ๋ค ์๋น์ค์๊ฒ ๋๊ฒจ์ฃผ๋ ค๋ฉด ๋ณต์กํ ๊ฒฝ์ฐ Controller๊ฐ ์ฌ๋ฌ ์๋น์ค๋ Repository์ ์์กดํ๊ฒ ๋๋ค.
- Controller๊ฐ ์ฌ๋ฌ ๋๋ฉ์ธ ๊ฐ์ฒด๋ค์ ์ ๋ณด๋ฅผ ์กฐํฉํด์ DTO๋ฅผ ์์ฑํด์ผํ๋ ๊ฒฝ์ฐ ๊ฒฐ๊ตญ Service ๋ก์ง์ด Controller์ ํฌํจ๋๊ฒ ๋๋ค.