Dto ์ฌ์ฉ์ ๊ดํ ์๊ฐ
1. ์๋ก
ํ์ฌ์์ ํ๋ก์ ํธ๋ฅผ ์งํํ๋ค๋ณด๋ฉด ๊ณ์ธต ๊ฐ ๋ฐ์ดํฐ ๊ตํ์ ์ํด ๊ธฐ๋ณธ์ ์ผ๋ก DTO๋ฅผ ์์ฑํ์ฌ ์ฌ์ฉํ๋ค. ํ์ฌ์์๋ ๋ณดํต ๋ฏธ๋ฆฌ ์ ์๋ ํธ์์ฑ์ ๊ฐ์ถ DTO๋ฅผ ์ ์ํด ์ฌ์ฉํ๋ค. ๋ค๋ง, ์ผ๋ถ ํ๋ก์ ํธ์์๋ ํ๋ฆฌ๋์๊ฐ ์ฐธ์ฌํ์ฌ ํด๋น ํ๋ฆฌ๋์๊ฐ ์ ๋ก ๋ฒ ์ด์ค๋ถํฐ ์์ํ์ฌ ๋จ๊ธฐ ํ๋ก์ ํธ๋ฅผ ๋ง๋ฌด๋ฆฌํ๊ณ , ์ดํ ์ ์ง์์ด ์ด์ด๋ฐ์ ์ ์ง๋ณด์๋ฅผ ํ๋ ๊ฒฝ์ฐ๊ฐ ์๋ค.
์ด ๋, ์ฝ๋๋ฅผ ์ดํด๋ณด๋ฉด ๋๋ถ๋ถ DTO๋ก getter/setter๊ฐ ์ ์๋ DTO๋ฅผ ์ฌ์ฉํ๋ค. ํ์ง๋ง, ์ ์ง๋ณด์๋ฅผ ์งํํ๋ค๋ณด๋ฉด ์๊ตฌ์ฌํญ์ ํญ์ ๋ฐ๋๊ธฐ ๋ง๋ จ์ด๊ณ ์ ๋๊ฐ ์ฌํ๋ฉด, ๋ฐ์ดํฐ๋ฒ ์ด์ค ๊ธฐ์ค์ผ๋ก ์์ฑ๋ ๋ฐ์ดํฐ ์ ๋ฌ์ฉ DTO๋ค์ ์ ์๋ ๋ณ์์ ๋ฌด์ํ๊ฒ ๋ชจ๋ case๋ฅผ ์ปค๋ฒํ ์ ์๊ฒ extend ๋๊ฑฐ๋, ๋ณ์ ๊ฐ์๊ฐ ๋์ด๋๊ฒ ๋๋ค. ์ด๋ ํ๋ก์ ํธ๋ฅผ ์งํํ๋ค๋ณด๋ฉด, ๋ฒ๊ฑฐ๋ก์ด ๋ฌธ์ ๊ฐ ๋ฐ์ํ๋ค.
ํ์ฌ์ ์ ์๋ DTO ๊ฐ์ฒด๋ Mapํํ๋ก ๋ ๊ฐ์ฒด๋ก ํ์ํ ๋ชจ๋ ๋ณ์๋ฅผ Map ๋ณ์์ ๋ฃ์ด ์ฌ์ฉํ๋ค. ์ด ๊ฒฝ์ฐ์๋ ๋ชจ๋ ์ผ์ด์ค๋ฅผ ๊ฐ๋จํ๊ฒ ์ปค๋ฒ๊ฐ ๊ฐ๋ฅํ๊ธฐ ๋๋ฌธ์ ๊ฐ๋ฐํ๋๋ฐ๋ ํธํ์ง๋ง, ์ ์ด์ Mapํํ๋ก ์ ์๋์ด ์๋ค๋ณด๋ ํจ์จ์ฑ์ ๋ฌธ์ ๊ฐ ์๊ณ , ์ปดํ์ผ ์๋ฌ ๋ฐ์์ ๋ฌธ์ ๋ฅผ ์ฐพ๊ธฐ ํ๋ค๋ค.
์ฌ๋ฌ ๊ธ์ ์ฐพ์๋ณด๋ฉด DTOํด๋์ค๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ด ์ข๋ค๊ณ ๋ ํ์ง๋ง ์ด๋ก ์์ผ๋ก ์ข๋ค๊ณ ํด๋ ์ค์ ํ์ ์์ ์ฌ์ฉํ ๋ ์ฝ๋ ์์ด ์๋ ์ ๋ฌด ์ ์ผ๋ก ๋ถํธํ ์ ์ด ์๋ค๊ณ ๋ ํด๋ ๊ณผ์ธ์ด ์๋ ๋ฏ ์ถ๋ค.
์ด์ ๋ฐ๋ผ DTO๋ฅผ ์ด๋ป๊ฒ ์ฌ์ฉํ๋ ๊ฒ์ด ๊ฐ์ฅ ํฉ๋ฆฌ์ ์ด๊ณ ์ข์ ๊ฒ์ธ๊ฐ๋ฅผ ์์๋ณด๊ณ ์ ํ๋ค.
2. ํ ์คํธ ์ฉ ์ํ ํ๋ก์ ํธ ์์ฑ
์์ ๊ฐ์ด ์ํ ํ๋ก์ ํธ๋ฅผ ์์ฑํ๋ค. ์ค์ ํ๋ก์ ํธ์์๋ ๋ ์ ์๋์ด ์๊ณ , ๋ณต์กํ๊ฒ ์ฌ์ฉํ๊ธด ํ์ง๋ง ๊ธฐ๋ณธ์ ์ผ๋ก ์ ์ํด๋๊ณ ํ ์คํธ๋ฅผ ์งํํ๋ฉด์ ๋๋ฒจ๋กญ ํ๊ณ ์ ํ๋ค.
3. ๊ฐ ๊ฐ์ฒด์ ์ฅ๋จ์
Map ๋์ Dto ํด๋์ค๋ฅผ ์ฌ์ฉํด์ผ ํ๋ ์ด์ ๋ ๊ฒ์ํด๋ณด๋ฉด ๋ค์๊ณผ ๊ฐ์ ๋ํ์ ์ธ ๋ช๊ฐ์ง ์ด์ ๊ฐ ์๋ค.
- DTO ํด๋์ค๋ ์ปดํ์ผ ์๋ฌ๋ฅผ ์ ๋ฐํ์ง ์๋๋ค.
- MAP์ String์ ํค ๊ฐ์ผ๋ก ์ฌ์ฉํ๊ธฐ ๋๋ฌธ์, ์คํ๊ฐ ๋ฐ์ํ๋ ๊ฒฝ์ฐ ํ์ ํ๊ธฐ ํ๋ค๋ค.
- MAP์ ๊ฐ๋ ์ฑ์ด ๋จ์ด์ง๋ค. ์ฝ๋๊ฐ ์คํ๋๋ ์ค๊ฐ์ ์ด๋ค ๊ฐ์ด ๋ณํ๋๊ณ ๋ณ์กฐ๋๋์ง ํ์ ํ๊ธฐ ํ๋ค๋ค.
- MAP์ ํ์ ์บ์คํ ๋น์ฉ์ด ๋ฐ์ํ๋ค. value์ ๊ธฐ๋ณธ์ ์ผ๋ก Object๊ฐ ์ต์์ ํด๋์ค์ด๊ธฐ์, ํ๋ณํ์ ํด์ฃผ์ด์ผ ํ๋ค.
- MAP์ ๋ถ๋ณ์ฑ์ ํ๋ณดํ ์ ์๋ค. ์ค๊ฐ์ ๋ณ๊ฒฝ์ด ์ผ์ด๋ ์ฌ์ง๊ฐ ๋ ๋ง๋ค.
์ด๋ ์ ๋ ์ผ๋ฆฌ๊ฐ ์๋ ๋ง ๋ค์ด๋ค. ๋ณธ์ธ๋ ์ด๋ฌํ ์ด์ ๋๋ฌธ์ ์๋ฌ๋ฅผ ๊ฒช๊ณ ๋ ๊ฝค ์ค๋์๊ฐ์ด ๊ฑธ๋ ค ๋ชป ์ฐพ์ ์ ์ด๋, ๊ฐ๋ฐํ ๋๋ ๋ค๋ฅธ ์ฌ๋์ด ์ง๋์ ์ฝ๋์์ ์ด๋ฌํ ๋ฌธ์ ๋ฅผ ๋ณธ ์ ์ด ์๋ค.
[๊ฒฝํํ ๋ฌธ์ ]
- name๊ฐ์ด ์๋ ์๋ฌ๊ฐ ๋ฐ์ํ์ฌ ์ฐพ์๋ณด๋ map.put("name",value); ๊ฐ ์๋ map.put("names",value); ๋ฅผ ํ๊ณ ์์๋ค.
- typecast DB์๋ฌ๊ฐ ๋์ ์ดํด๋ณด๋ map์ int๋ก ๋ด๊ธด๊ฒ ์๋ String์ผ๋ก ๋ด๊ธด ๊ฐ์ผ๋ก DB์กฐํ๋ฅผ ์๋ํ๋ค.
- ๋ถ๋ช ๋ฉ์๋ ์์ ์ ์๋ map์ ์ธ์ ๋ฐ์ ์์๊ณ , ๋ฉ์๋ ์คํ ๊ณผ์ ์์๋ ํด๋น map์ ์กฐํํ list๋ฅผ ๋ด๋ ์์ ์ด์์ง๋ง ์คํ ํ map์ ๋ณด๋ ์ค๋ง๊ฐ์ง ๊ฐ๋ค์ด ์ ๋ถ ๋ค์ด์ ์์๋ค.
์ฌ์ค ์์์ ๊ฒฝํํ ๋ฌธ์ ๋ค์ด ๋ ์์์ ์ธ๊ธํ DTO๋ฅผ ์ฌ์ฉํด์ผ ํ๋ ์ด์ ์ ๋ถํฉํ๋ค๊ณ ๋ณผ ์ ์๊ฒ ๋ค. ํ์ง๋ง ์ ๋ฐ ๊ฒฝํ ์ธ์๋ ์ด๋ฐ ๊ฒฝํ์ ํ๋ค.
[ Map์ ์ฌ์ฉํ์์ ๋ ์ฅ์ ? ]
- ํต๊ณ๋ฅผ ๋ด๊ธฐ ์ํ DB ํ ์ด๋ธ์์ ํญ๋ชฉ๋ค์ ๊ฐ์ ธ์ฌ ๋, ํญ๋ชฉ์ด 4,50๊ฐ ์ ๋ ๋๋ ์ฟผ๋ฆฌ๋ฅผ ์์ฑํ์ฌ ๋งต์ผ๋ก ๊ฐ์ ธ์ค๋ฉด ํด๋น ๋งต์ ์์์ ๋ด๊ฒจ์ ธ์ค๊ธฐ ๋๋ฌธ์(Mybatis parameterType์ map์ ์ง์ ํจ์ผ๋ก์จ) ํญ๋ชฉ์ด ๋ง์ ๊ฒฝ์ฐ ์ฌ์ฉํ๊ธฐ ํธํ๋ค.
- ํ์ํ ๊ฐ๋ค์ด 4,5๊ฐ ๋๋ ํ ์ด๋ธ์์ ์ฐธ์กฐํ์ฌ ๊ตฌ์ฑํด์ผ ํ๋ ๊ฒฝ์ฐ. map์ผ๋ก ์์ฑํ๋ฉด ํธํ๋ค.
- ํ๋ผ๋ฏธํฐ๊ฐ ์ถ๊ฐ๋์ด์ผ ํ๋ ๊ฒฝ์ฐ, ๊ทธ๋ฅ ๊ฐ์ ธ์์ ๋ฃ์ผ๋ฉด ๋๋ค.
- ๊ธํ๊ฒ ํ์ํ ์์ ์ด ์๋ ๊ฒฝ์ฐ, ์ฌ์ฉํ๊ธฐ ํธํ๋ค.
ํ์ ์บ์คํ ๋น์ฉ์ ์กฐ์ฐจ๋ ์ ๊ฒฝ์ ์จ์ผ ํ๋ ๋ํ ํ๋ก์ ํธ๋ ํจ์จ์ ๊ฐ์กฐํ ํ๋ก์ ํธ๋ผ๋ฉด ๋ชจ๋ฅด๊ฒ ์ง๋ง, ์ ์ฅ์ ์ ๋ณด์์ ๋๋ MAP์ ๋จ์ ์ ์ปค๋ฒํ์ง ์๋... ๋ผ๋ ์๊ฐ์ ํ๋ค. ์ฌ์ค MAP์ ๋จ์ ๋ ์ ๋งํ๋ฉด ํด๋จผ์๋ฌ์ธ ๊ฒฝ์ฐ๊ฐ ๋ง๊ธฐ ๋๋ฌธ์ด๋ค. ๋ฌ๋ฆฌ ๋งํ๋ฉด, ํด๋จผ์๋ฌ๋ฅผ ์กฐ๊ธ์ด๋๋ง ๋ฐฉ์งํ๊ธฐ ์ํด DTO ํด๋์ค๋ฅผ ํตํด ํจ์จ์ ๋์ด๊ณ ์ ํ๋ ๊ฒ์ผ ์ ์์ผ๋, ํด๋จผ์๋ฌ๋ฅผ ๋ง์๊ณ DTOํด๋์ค๋ฅผ ์ ์ํ๋ค๋ณด๋ฉด ์ด๋ง์ด๋งํ ๋ ธ๊ฐ๋ค ์์ ์ด ๋๊ธฐ ๋๋ฌธ์ด๋ค.
๊ทธ๋ฌ๋ค ๋ง์ฝ, ๊ธํ ์์ฒญ์ด๋ ์์ ์ ํด์ผ๋๋ ๋ ์ด ์จ๋ค๋ฉด? ํน์ ์ฌ์ ์์ฒด๊ฐ ์ ์ง๋ณด์ ์ฑ์ ๋๊ฑฐ๋ ๋น์ทํ ๊ฒฝ์ฐ๋ผ๋ฉด? DTO ํ๋๋ฅผ ์๋ก ์ ์ํด์ผ ํ๊ฑฐ๋ ์๋๋ฉด ๊ธฐ์กด DTO ํด๋์ค์ ๊ฐ์ ์ถ๊ฐํด์ผ ํ๋๋ฐ ... ๋น์ทํ DTO๊ฐ ๋ง์์ ๋ค ์ถ๊ฐํด์ผ๋๋ค๊ฑฐ๋?
์ด๋ฐ ๊ฒฝ์ฐ์๋ ์ฌ์ค DTO ํด๋์ค๋ฅผ ์ด๋ค๊ณ ํด๋ ๋ถํธํ ์ ์ด ๋ ๋ง์ ๊ฒ์ด๋ผ๊ณ ์๊ฐํ๋ค. ๋ฌผ๋ก ํ๋ก๊ทธ๋จ์ด ์๋ ์์ ์ ์ ์ฅ์์.
๊ทธ๋ ๋ค๋ฉด ์ด๋ฌํ ๊ฒฝ์ฐ๋ฅผ ๋๋นํ์ฌ ์ด๋ป๊ฒ ๋ฐ์ดํฐ๋ฅผ ์ ๋ฌํ ๊ฒ์ธ๊ฐ ๋ํด ์๊ฐ์ ํด๋ณด์๋ฉด, ์ฐ์ ์ ์ผ๋ก ํ์ฅ์ ํ๊ฑฐ๋ ์๋ก ์ ์ํ์ฌ ๋ณดํต ์ฌ์ฉ์ ํ๋ค. ์๋ฅผ ๋ค์ด๋ณด์.
4. ํ์ฅ ๊ฐ๋ฅ์ฑ
[ Dto Class ]
๊ฐ์ฅ ๊ฐ๋จํ๊ฒ ํ ์ ์๋ ๋ฐฉ๋ฒ์ ์์ ๊ฐ๋ค. ๊ณตํต์ ์ผ๋ก ์ฐ์ด๋ DTO ํด๋์ค๋ฅผ ํ์ฅํ์ฌ ํฌํจ ์ํค๋ ๊ฒ์ด๋ค. ์ด๋ ๊ฒ ๋๋ฉด ๋ง์ด ์ฐ์ด๋ ํญ๋ชฉ๋ค์ ํธํ๊ฒ ์ฌ์ฉํ ์ ์๋ค. ๊ฒฝํํ ํ๋ก์ ํธ์์๋ ๋ณดํต ์ธ์ ๊ฐ์ด๋ ํญ์ ํ์ํ ๋ฉ๋ด ๊ด๋ จ ๊ฐ ๋ฑ์ ์ ๋ ๊ฒ ํ์ฅ ์์ผ์ ์ฌ์ฉํ์๋ค.
[ Map Class ]
Map Class ๊ฐ์ ๊ฒฝ์ฐ, ์ผ๋ถ๋ง ๊ฐ์ ธ์๋๋ฐ ๋ค์๊ณผ ๊ฐ์ด ์ฌ์ฉํ๋ค. ์ฐ์ ๊ธฐ๋ณธ์ ์ผ๋ก LinkedHashMap์ extends ํ์ฌ ์ฌ์ฉํ์ผ๋ฉฐ ๋งต ํ์ ์ ์ด๋ค ๊ฐ์ด ๋ค์ด์ฌ ์ง ๋ชจ๋ฅด๊ธฐ ๋๋ฌธ์, ๋ณดํต ์ ๋ ๊ฒ ํ์ ๋ณ๋ก get / put ํ ์ ์๋๋ก ๋ฐ๋ก ์ ์๋ฅผ ํ์ฌ ์ฌ์ฉํ๋ค.
์ฆ, ๋งต์ ํ์ฉํ๋ฉด์ ๋งต์ ๋ฃ๊ณ ๊ฐ์ ธ์ค๋๋ฐ์ ํ์ํ ๋ฉ์๋๋ง ์ ์ํ์ฌ ์ฌ์ฉ์ ํ์๋ค. Objectํํ๋ก ๋ฌด์กฐ๊ฑด ๋ฐ๋ ๊ฒ์ด ์๋ ํ๋์ ์ค๊ฐ ๊ณผ์ ์ ๋ ์ถ๊ฐํ๋ค๊ณ ๋ณด๋ฉด ๋๊ฒ ๋ค. ์ด๋ ๊ฒ ๋๋ฉด ์ปดํ์ผ ๋จ๊ณ์์ ํ์ ์บ์คํ ํน์ ํ์ ์ผ๋ก ์ธํ ์ปดํ์ผ ์๋ฌ๊ฐ ๋ฐ์ํ ํ๋ฅ ์ ์กฐ๊ธ์ด๋๋ง ์ค์ด๋ ๋ค.
ํ์ฅ์ ๊ฒฝ์ฐ์๋ ์ฌ์ค ๋งต ์ชฝ์ด ๋ ์ข๋ค๊ณ ๋ณด์ฌ์ง๋๋ฐ, ๊ทธ ์ด์ ๋ ์ ์ด์ ํ์ฅํ ๊ฒ์ด ๊ธฐ๋ณธ์ ์ผ๋ก ์๋ฐ์์ ์ ๊ณตํ๋ ํด๋์ค์ด๋ฉฐ, ๋ฐ์ดํฐ๋ฅผ ๋ฃ๊ณ ๊ฐ์ ธ์ค๋ ๊ณผ์ ์ฌ์ด์ ์ํ๋๋๋ก ์ ๋ง์ ๋ง๋ ์ฝ๋๋ฅผ ๋ฃ์ ์ ์๋ค๋ ์ ์ด๋ค.
์์์๋ ์ถ๊ฐํ์ง ์์์ง๋ง, ๋ฐฐ์ด์ ํ๋ผ๋ฏธํฐ๋ก ๋ฐ์์ JSON์ผ๋ก ๋ฆฌํดํด ์ค๋ค๋๊ฐ, ํน์ ๊ฐ์ด ๋ค์ด์ค๋ฉด ๋ค๋ฅธ ํํ๋ก ์์ ๋ณํ ํ์ ๋ฆฌํดํ๋ค๋๊ฐ ๊ฐ์ ๊ณตํต์์ ์ธ๋ฒํ ๊ฒ๋ค์ ์ถ๊ฐํด ๋์๋ ์๊ด ์๋ค.
๋ฐ๋ฉด, DTO ํด๋์ค์ ๊ฒฝ์ฐ์๋ ์๊ทธ๋๋ ๋ง์ getter/setter์ ๋ฌด์ธ๊ฐ ๊ฐ์ ธ์ฌ ๋ ์ํ๋ ํํ๋ก ๊ฐ์ ธ์์ผ ํ๋ค๋ฉด getter ๋ฉ์๋๋ฅผ ๋ฐ๋ก ์ ์ํด์ผ ํ๊ณ , ๋ง์ฝ ์ด๋ ๊ฒ ๋ฆฌํด๋์ด์ผ ํ๋ ๊ฐ์ด ๊ณตํต์ธ ๊ฒ ๊ฐ์ผ๋ฉด์๋ ์๋ (3,4๊ฐ dto ํด๋์ค์์๋ง ์ฌ์ฉํ๋๊ฒฝ์ฐ) ๊ฒฝ์ฐ์๋ ๋ฐ๋ก๋ฐ๋ก ์์ ์ ํด์ฃผ์ด์ผ ํ๋ค.
๊ทธ๋ ๊ฒ ํ๊ธฐ ์ซ๋ค๊ณ ํ๋ฉด ๊ฒฐ๊ตญ ๋ฐ๋ก ์ ์ํ ๋ฉ์๋๋ฅผ extendsํ๊ฑฐ๋ ๊ตฌํ๋ถ๋ฅผ ์ถ๊ฐํด์ฃผ์ด์ผ ํ๋, ์ฌ๊ฐ ๊น๋ค๋กญ์ง ์์ ์ ์๋ค.
5. ์๊ตฌ์ฌํญ์ ๋ณ๊ฒฝ ๋๋ ์ผ์ด์ค์ ๋ง๊ฒ ๋์ฒ ๊ฐ๋ฅํ์ง ์ ์ฐ์ฑ
๊ทธ๋ ๋ค๋ฉด, ์์ ํ๋ ์ํฉ์์์ ์๋ฅผ ๋ค์ด๋ณผ๊น ํ๋ค.
1) ๊ธฐ์กด์ ํน์ ํ ์ด๋ธ์ ๊ฐ์ ธ์ฌ ๋ ์ฌ์ฉํ๋ DTO ํด๋์ค๊ฐ ์์ต๋๋ค.
package com.dto.demo.lib;
import lombok.Getter;
import lombok.Setter;
@Getter
@Setter
public class testDto extends commonDto {
private String email;
private String phone;
private String info1;
private String info2;
private String info3;
private String info4;
private String info5;
private String info6;
private String info7;
private String info8;
private String info9;
private String info10;
}
์ฌ๊ธฐ์ info21~30์ ์ถ๊ฐํด์ฃผ์ธ์! ํ๋ฉด, ๋จ์ํ 21~30 ํญ๋ชฉ์ ์ถ๊ฐํ๋ฉด ๋์ด์ง๋ง, ์ด๋ ๊ฒ ๋ฐ๋ ์๋ ์๋ค.
"testDto2์ 11~20 ํญ๋ชฉ์ ๊ฐ์ด ๊ฐ์ ธ์ ์ฃผ์ธ์!"
์? ํญ๋ชฉ ์ถ๊ฐ? ๊ทผ๋ฐ ๋ค๋ฅธ dto์ ์๋ ๊ฐ์ ๊ฐ์ ธ์์ผ ํ๋ค? ์ด๋ป๊ฒ ํ ๊น?
package com.dto.demo.lib;
import lombok.Getter;
import lombok.Setter;
@Getter
@Setter
public class testDto extends commonDto {
private String email;
private String phone;
private String info1;
private String info2;
private String info3;
private String info4;
private String info5;
private String info6;
private String info7;
private String info8;
private String info9;
private String info10;
private testDto2 testDto2;
}
์ด๋ฐ ์์ผ๋ก ๊ตฌ์ฑํ๋ฉด ๊ด์ฐฎ์๊น? testDto ๋ด๋ถ์ testDto2 ๊ฐ์ฒด๊ฐ ์กด์ฌํ๋ ํํ๋ก? ์ด๋ ๊ฒ ๋๋ฉด ์ธํ ํ ๋๋ ์๋์ ๊ฐ์ด ํด์ฃผ์ด์ผ ๋๋ค.
@Service
public class dtoService {
public testDto getData() {
testDto dto = new testDto();
dto.setId("testId");
dto.setName("testName");
dto.setEmail("test@test.com");
testDto2 dto2 = new testDto2();
dto2.setInfo11("11");
dto2.setInfo12("12");
dto2.setInfo13("13");
dto2.setInfo14("14");
dto2.setInfo15("15");
dto2.setInfo16("16");
dto2.setInfo17("17");
dto2.setInfo18("18");
dto2.setInfo19("19");
dto2.setInfo20("20");
dto.setTestDto2(dto2);
return dto;
}
}
์ด๋ฐ ์์ผ๋ก, ์ฐ์ testDto๋ฅผ ๊ฐ์ ธ์ค๊ณ , testDto2๋ฅผ ๊ฐ์ ธ์์ ์ธํ ํ, testDto์ ๋ฃ๋ ๊ฒ. ํ์ง๋ง ๋ณดํต Dto ํด๋์ค๋ฅผ ๊ตฌ์ฑํ๋ ๊ฒฝ์ฐ ๋ง์ฝ RDB์์ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์จ๋ค๊ณ ํ๋ฉด, mybatis ๋ด์์ ํด๋น ํด๋์ค๋ฅผ resultType์ผ๋ก ์ ์ํ๊ณ ๊ฐ์ ธ์ค๊ธฐ ๋๋ฌธ์ ์ ๋ฐ์์ผ๋ก ๊ตฌ์ฑํ๋ ค๋ฉด DB์ ์ฟผ๋ฆฌ๋ฅผ 2๋ฒ์ด๋ ๋ ๋ ค์ผ ํ๋ค.
๊ทธ๋ผ ๋น์ฐํ ์๋์ ๊ฐ์ ํ์์ผ๋ก ๋ฐ๋๋ค.
package com.dto.demo.lib;
import lombok.Getter;
import lombok.Setter;
@Getter
@Setter
public class testDto extends commonDto {
private String email;
private String phone;
private String info1;
private String info2;
private String info3;
private String info4;
private String info5;
private String info6;
private String info7;
private String info8;
private String info9;
private String info10;
// private testDto2 testDto2;
private String info11;
private String info12;
private String info13;
private String info14;
private String info15;
private String info16;
private String info17;
private String info18;
private String info19;
private String info20;
}
๊ทธ๋ฅ ์ถ๊ฐ๋์ด์ผ ํ๋ ํญ๋ชฉ๋ค์ testDto์ ์ ์ํด๋ฒ๋ฆฌ๋ฉด ๋๋ค! ๊ทธ๋ฌ๋ฉด DB ์ฟผ๋ฆฌ 1๋ฒ์ผ๋ก๋ ํญ๋ชฉ์ ๋ค ๊ฐ์ ธ์ฌ ์ ์๋ค. ๊ทธ๋ผ ๋? ์๋๋ค.
๊ทธ๋ผ ์ด info 11~20ํญ๋ชฉ์ testDto ์์๋ ๊ฐ์ง๊ณ ์๊ณ , testDto2์์๋ ๊ฐ์ง๊ณ ์๋ค. ๋ง์ฝ DB ํ ์ด๋ธ ๊ธฐ์ค์ผ๋ก Dto๋ฅผ ์ก์๋๋ฐ ์ด๋ ๊ฒ ๊ณต์ ๊ฐ ๋๋ ํญ๋ชฉ์ด ์๋ค? ๊ทธ๋ผ ์ด๋ ๊ฒ ์ถ๊ฐ๋๋ค ๋ณด๋ฉด ๋์ค์๋ dto์ ๊ธฐ์ค์ด ์ ๋งคํด์ง๋ ์ํฉ์ด ๋ฐ์ํ๋ค.
๊ฒฐ๊ตญ ์ ๋ ๊ฒ ๊ณ์ ์๊ตฌ์ฌํญ์ด ๋ค์ด์์ ์ถ๊ฐ์ถ๊ฐ ํ๋ค๋ณด๋ฉด ๊ฒฐ๊ตญ dto๋ N๊ฐ ์ง๋ง, ๋ค ํํ๊ฐ ๋น์ท๋น์ท ํด์ ธ๋ฒ๋ฆฌ๋ ์ํฉ์ด ์ค๊ฒ ๋๋ค. ์์ฃผ ์ฌ์ฉํ๋ ์์ ์๋ ์ ์๋ ์๊ฒ ์ง. ํ์ง๋ง ์ด๊ฑธ ๋ค๋ฅธ ์ฌ๋์ด๋ ์๋ก์ด ์ธ์์ด ๋ณด๊ฒ๋๋ค๋ฉด? ์ด์ง์ด์ง ํ๋ค.
๊ฒฐ๊ตญ ์ด๋ ๊ฒ ๋ณต์กํ ์ํฉ์์ ์ถ๊ฐ ์๊ตฌ์ฌํญ์ด ์์ฃผ ๋ค์ด์จ๋ค๋ฉด dto ํด๋์ค๋ ๋นํจ์จ์ ์ด ๋ ์๋ ์๋ค๋ ์๊ฐ์ด ๋ ๋ค. ํํํด์ผ ํ๋ ๋ฐ์ดํฐ๊ฐ ๋์ด ๋ ์๋ก dto๋ ์ ์ ๋ณต์กํด์ง๊ณ , ์ ์๋ ์ ๋งคํด์ง๋ค. ๊ฒฐ๊ตญ ๋์ค์๋ ๋ง๊ตฌ์ก์ด๋ก ์ฌ์ฉํ๊ฒ ๋์ด ์๋ฏธ๊ฐ ์์ด์ง๋ค๋๊ฒ ์ต์ข ์๊ฐ์ด๋ค.
ํนํ๋ ์ต๊ทผ ๊ฒฝํํ๋ ํ๋ก์ ํธ์์๋ ๋ถ๋ช dto๋ ๋ช ํํ๊ฒ ํ ์ด๋ธ ๊ธฐ์ค์ผ๋ก 3๊ฐ๊ฐ ๋๋์ด์ ธ ์๋๋ฐ ๋ง์ ๊น๋ณด๋ฉด 3๊ฐ๋ค ํญ๋ชฉ์ด ๋น์ท๋น์ท ํด์ ์คํ๋ ค ๋ค๋ฅธ ํญ๋ชฉ์ด ๋ญ๊ฐ ์๋์ง ์ฐพ๊ธฐ๋ ํ๋ค๋ค. ๊ทผ๋ฐ ๋น์ฆ๋์ค ๋ก์ง์ ๋ณด๋ฉด ์ด๋ค ๋ถ๋ถ์์๋ A๋ฅผ, ์ด๋ค ๋ถ๋ถ์์๋ B๋ฅผ ์ฐ๊ธธ๋ ๊ทธ๋ผ ๊ฒฐ๊ณผ ๊ฐ์ด ๋ค๋ฅธ๊ฐ? ํ๊ณ ๋ณด๋ฉด ๋ง์ ๊ฒฐ๊ณผ์์ ๋ค๋ฅธ ํญ๋ชฉ์ 2,3๊ฐ ๋ฟ.
๋ญ์ผ ์ ๊ฒฐ๊ณผ๋ ๋น์ทํ๋ฐ ๋ค๋ฅธ Dto๋ฅผ ์ฌ์ฉํ์ง? ํ๊ณ ํ์คํ ๋ฆฌ๋ฅผ ๊น๋ณด๋ฉด ์ ์ด์ ๋ค๋ฅธ Dto๊ฐ ๋ง๋๋ฐ ์์ ํ๋ค๋ณด๋ ๊ทธ๋ ๊ฒ๋๋ ๊ฒ์ด์๋ค.
๋ฐ๋ฉด, Map์ ๊ฒฝ์ฐ๋ผ๋ฉด ๊ทธ๋ฅ ๊ฐ์ ธ์์ ๋ฃ์ด์ฃผ๊ธฐ๋ง ํ๋ฉด๋๋ค. ๋ฃ์ด์ค๋ค๊ณ ํ๊ธฐ๋ ๋ญฃํ๊ฒ ๋ณดํต resultType์ ์ ์ธ๋์ด ์์ผ๋ฉด RDB์์ ๊ฐ์ ธ์ค๋ ๊ฒฝ์ฐ ๊ทธ๋ฅ ๊ฑฐ๊ธฐ์ ๋ฃ์ด์ ๊ฐ์ ธ์ค๊ธฐ ๋๋ฌธ์ด๋ค.
package com.dto.demo.service;
import com.dto.demo.lib.map;
import org.springframework.stereotype.Service;
@Service
public class mapService {
public map getData() {
map m = new map();
m.put("id", "testId");
m.put("name", "testName");
m.put("email", "test@test.com");
// ์ถ๊ฐ๋์์ด์!
m.put("info11", "info11");
m.put("info12", "info12");
m.put("info13", "info13");
m.put("info14", "info14");
m.put("info15", "info15");
m.put("info16", "info16");
m.put("info17", "info17");
m.put("info18", "info18");
m.put("info19", "info19");
m.put("info20", "info20");
return m;
}
}
์ํ์ด๊ธฐ ๋๋ฌธ์ ๊ทธ๋ฅ put์ ํ์ง๋ง. ์ด์ฐ๋๋ ๊ทธ๋ฅ ๊ฐ์ ธ์์ ๋ฃ๊ธฐ๋ง ํ๋ฉด ๋๋ค. ๊บผ๋ผ๋๋ ๋ง์ฐฌ๊ฐ์ง๊ณ . ๊ฒฐ๊ตญ ์์ ์๊ฐ ๋ณด๋ ์ ์ฅ์์๋ map์ผ๋ก ์์ ํ๋๊ฒ ๋ ์ ์ฐํ๊ณ ํธํ๋ค๊ณ ์๊ฐํ๋ค.
6. ๊ทธ๋ผ Map์ ๋ฌด์กฐ๊ฑด ์จ์ผ ํ๋?
๋ค์์ dto class์ map์ ์ฌ์ฉํ ์๋น์ค์์ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์ค๋ ๋ถ๋ถ์ ํธ์ถ ํ์ ๋์ ์์ ์๊ฐ ์ฐจ์ด์ด๋ค.
๊ทผ์ํ ์ฐจ์ด์ด๊ธด ํ์ง๋ง, dto๋ณด๋ค map ์ชฝ ๋ฐ์ดํฐ๋ฅผ ํธ์ถํ๋๋ฐ ๋ ๋ง์ ์๊ฐ์ด ์์๋๋ค. ๋จ์ String ๊ฐ์ setํ๊ณ ๊ฐ์ ธ์ค๋๋ฐ์๋ ์ด์ ๋์ ์ฐจ์ด๊ฐ ์๋๋ฐ, ๋ง์ฝ ๋ก์ง์ด ๋ค์ด๊ฐ ๋ถ๋ถ์์ ๋ฐ์ดํฐ ๊ฐ์ฒด๋ฅผ ์ฌ์ฉํ๋ค๊ณ ๊ฐ์ ํ๋ฉด ์ด๋ง์ด๋งํ ์ฐจ์ด๊ฐ ์์ ๊ฒ์ด๋ค.
๊ทธ๋๋ ์ฌ๋์ด ๋ดค์ ๋๋ ์ผ๋ง ์ฐจ์ด ์๋๋ค๊ณ ์๊ฐํ ์ ์์ง๋ง ๋ง์ด๋ค. ์กฐ๊ธ ๋ ํ์ ํค์๋ณด์.
์ด๋ฒ์๋ ๊ฐ ๋ฐ์ดํฐ๋ณ๋ก 10๋ง๊ฑด์ ์ธํ ํ์ฌ ํ ์คํธ๋ฅผ ํด๋ณด์๋ค.
์ด๋ฒ์๋ ์ฐจ์ด๊ฐ ํ์คํ ๋๋ ๊ฒ์ผ๋ก ๋ํ๋ฌ๋ค. ์ฌ์ค ํ ์คํธ์์ ๋ณด์ฌ์ง๋ ๊ฒ์ ๋จ์ํ String ๊ฐ์ผ๋ก ์ธํ ์ ํ๊ณ ๋ฐ๋ณต์ ๋๋ฆฌ๋ ๊ฒ์ด๋ฏ๋ก ์ค์ ์๋น์ค์์ ๋ฐ์ดํฐ ํธ์ถ ์ /ํ์ ์ด๋ค ์์ ์ ํ๋์ง์ ๋ฐ๋ผ์๋ ๋ ์ฐจ์ด๊ฐ ์์ ๊ฒ์ด๋ค.
๋จ์ ํ ์คํธ์์๋ ์ด์ ๋ ์ฐจ์ด๋ฅผ ๋ณด์ด๋๋ฐ, ์ค์ ์๋น์ค์์๋ ๋ง์ ๋ฐ์ดํฐ๋ฅผ ์ค๊ณ ๊ฐ๋ ์์ ์ ํ ๋๋ ๊ทธ ์ฐจ์ด๊ฐ ๋ ๋ช ํํ๊ฒ ๋ฒ์ด์ง ๊ฒ์ผ๋ก ํ๋จ๋๋ค.
์ด๋ฒ์๋ ๋์ ํฉ์ณ์ ํ ์คํธ ํด๋ณด์๋ค. ๊ณตํต ์ ๋ณด์ธ ์ธ์ ์ ๋ณด ๋น์ทํ ๊ฒ์ commonDto๋ก ๋นผ๊ณ , dto ํด๋์ค ๋ด๋ถ์ map์ ๊ฐ์ง๊ณ ์๋ ํํ๋ก ๋ง๋ค์ด ํ ์คํธ๋ฅผ ์งํํ๋ค.
ํผํฉํ์ฌ ์ฌ์ฉํ ๊ฒ์ ์คํ ์๋๊ฐ ์ ์ผ ๋น ๋ฅธ ๊ฒ์ผ๋ก ๋ํ๋ฌ๋ค. ๋ฌผ๋ก ์์ฃผ ๋ฏธ์ธํ ์ฐจ์ด๊ธด ํ์ง๋ง ๋ง์ด๋ค.
์ด๋ ๊ฒ ์ฌ์ฉํ๊ฒ๋๋ฉด RDB ์๋น์ค๋ฅผ ๊ธฐ์ค์ผ๋ก ๋ณด์์ ๋, ์ธ์ ๊ฐ์ด๋ ๊ณตํต ์ ๋ณด๋ค์ dto ํด๋์ค์ set์ ํ๊ฒ ๋๊ณ , DB์กฐํ ๊ฒฐ๊ณผ ๊ฐ์ map ํด๋์ค๋ก ๋ฐ์ ๊ฐ์ง๊ณ ์๊ฒ ๋ ๊ฒ ์ด๋ค. ์ฌ๋ฌ ์ฒ๋ฆฌ ๋ฐฉ๋ฒ์ด ์๊ฒ ์ง๋ง, ์ด๋ ๊ฒ ์ฒ๋ฆฌํ๋ ๋ฐฉ๋ฒ๋ ๋๋ฆ ํฉ๋ฆฌ์ ์ด๋ผ๋ ์๊ฐ์ด ๋ ๋ค.
์๋ํ๋ฉด, ๊ณตํต์ผ๋ก ์ฌ์ฉํ๋ ์ ๋ณด๋ค ์ธ์ ์กฐํ๋๋ ๋ฐ์ดํฐ๋ค์ ๊ฐ์ ธ์์ ์ฌ์ฉํ ๋ ์ผ์ผํ ์ธํ ํด์ฃผ๊ณ ํ๋ ๊ฒ๋ณด๋ค๋ ๊ทธ๋ฅ map ํํ๋ก ์ฒ๋ฆฌํด์ ๋๊ธฐ๋ฉด ํธํ๊ธฐ ๋๋ฌธ์ด๋ค. ๋์ , ๋ณ์กฐ๊ฐ ์ผ์ด๋๋ฉด ์๋๋ ๊ฐ๋ค์ ๋ํด์๋ dto ํด๋์ค๋ฅผ ํตํด ์๋ชป๋ ๊ฐ์ด set ๋๋ ๊ฒ์ ๋ฐฉ์ง ํ ์ ์๊ธฐ ๋๋ฌธ์ด๋ค.
ํ์ง๋ง ์ฌ์ ํ ์ํ์ฑ์ ๋จ์์๋ค. ์๋ํ๋ฉด map์ผ๋ก ์ฌ์ฉํ๋ ๊ฐ๋ค์ ๊บผ๋ด์ ์ฌ์ฉํ๊ฑฐ๋ ๋ฃ๋ ์์ ์ด ์ ์ผ ๋ง์ ๊ฒ์ด๊ธฐ ๋๋ฌธ์ map์ด ๊ฐ์ง๊ณ ์๋ ๋ฌธ์ ์ ์ ์ฌ์ ํ ์๊ณ ์๋ค๊ณ ๋ณผ ์ ์๋ค.
์ด๋ ๊ฒ ์๊ฐํ๋ฉด ๊ฐ ํ์ ๋ค์ด ๊ฐ์ง๋ ๋ฌธ์ ๋ค์ ๊ฐ์ ธ๊ฐ๋ฉด์ ๊ฒฐ๊ตญ ์๋๋ง ์ก๊ธฐ ์ํ ๋ฐฉ๋ฒ์ด๋ผ๋ ์๊ฐ์ด ๋ ๋ค.
... ์ ์ผ ์์ข์ ์ผ์ด์ค๋ผ๊ณ ๋ณผ ์๋ ์๊ฒ ๋ค.
7. ๊ฒฐ๋ก
๊ฒฐ๋ก ์ ์ํฉ์ ๋ฐ๋ผ ์ด๋ค ํ์ ์ ์ธ ์ง ๊ฒฐ์ ์ด ๋์ด์ผ ํ๋ ๊ฒ์ผ๋ก ์๊ฐํ๋ค. ๊ทธ ์ํฉ์ ๋ค์๊ณผ ๊ฐ์ด ๋๋ ์ ์๋ค
- ๊ฐ๋ฐ ์, ์๊ตฌ์ฌํญ์ ๋ณ๊ฒฝ์ด ๋ง๊ณ ์ ์ง๋ณด์ ์ฑ์ด ์ง์ ํ๋ก์ ํธ์ด๋ค.
- ๋ฐ์ดํฐ๋ฅผ ์กฐํํ ๋ ๋ณต์กํ ์กฐ์ธ์ด๋ ์๋ธ์ฟผ๋ฆฌ ๋ฑ์ผ๋ก ์ธํด ์ ์๋ ํ
์ด๋ธ ์ธ์ ์ ๋ณด๋ค์ ๋ง์ด ์กฐํํ๋ค.
(ํ๋ฉด์ ํํํ ์ ๋ณด๋ค์ด ๋ง๊ณ , ๋ณต์กํ๋ค) - ๋ฐ์ดํฐ ์์ฒญ ์, ๋์ด์ค๋ ํ๋ผ๋ฏธํฐ๊ฐ ๋ง์ผ๋ฉฐ ์ ๋ ฅ ๊ฐ์ ๋ํ ๊ฒ์ฆ ์์ ๊ณผ ์ถ๊ฐ ์์ ์ด ๋ง๋ค.
-> Map์ ์ฌ์ฉํ๋ ๊ฒ์ด ๋ซ๋ค!
- ๊ฐ๋ฐ ์, ์ด๋ฏธ Fix๋ ํญ๋ชฉ์ด ๋ง์ผ๋ฉฐ ํ ๋ฒ ๊ฐ๋ฐํ๋ฉด ๋ณ๊ฒฝ์ด ์ ์ ํ๋ก์ ํธ์ด๋ค.
- ๋ฐ์ดํฐ๋ฅผ ์กฐํํ ๋ ์ง์ ๋ ํญ๋ชฉ๋ค์ ๊ฐ์ ธ์ค๋ ๊ฒ์ด ์ผ๋ฐ์ ์ด๋ค.
(ํ๋ฉด์ ํํํ ์ ๋ณด๋ค์ด ์ ํด์ ธ์๊ณ , ๋จ์ํ๋ค) - ๋ฐ์ดํฐ ์์ฒญ ์, ๋์ด์ฌ ํ๋ผ๋ฏธํฐ๊ฐ ์ ํด์ ธ ์์ผ๋ฉฐ ๋ฒ์๊ฐ ์ง์ ๋์ด ์๊ณ ํด๋น ํ๋ผ๋ฏธํฐ๋ฅผ ๊ทธ๋๋ก ์ฌ์ฉํ๋ ์์ ์ด ๋ง๋ค.
-> DTO ํด๋์ค๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ด ๋ซ๋ค!
๊ฒฐ๊ตญ ๊ฐ ํ์ ์ ๋ฐ๋ผ ์ฅ๋จ์ ์ ๋ช ํํ ๋๋๋ฉฐ ๋ ์ค์ ํ๋์ ํ์ ์ด ๋ฌด์กฐ๊ฑด ์ข๋ค! ๋ผ๊ณ ๋ ํ ์ ์๋ค๋๊ฒ ๊ฒฐ๋ก ์ด๋ค. ์ฆ, ํด๋น ํ์ ์ ์ธ์ ์ด๋์ ์ฌ์ฉํ ์ง๋ ํ๋ก์ ํธ์ ๋ฐ๋ผ ๋ค๋ฅด๋ฉฐ, ๊ทธ ์ฑ๊ฒฉ์ ๋ฐ๋ผ ์์ํ๊ฒ ๊ฐ๋ฐ ์งํ์ด ๊ฐ๋ฅํ ํ์ ์ ์ ํํ๋ ๊ฒ์ด ๋ง๋ค๊ณ ๋ณธ๋ค.
์ค์ ๋ก ๋งต์ ์ฌ์ฉํด์ผํ ๊ฒ ๊ฐ์ ํ๋ก์ ํธ์ DTO ํด๋์ค๋ฅผ ์ฌ์ฉํ์ฌ ํ์ฌ๋ ๋ฌด์จ์ผ์ด ์ผ์ด๋ฌ๋ ํ๋ฉด...
- ๊ฑฐ์ ๋๋ค์์ DTO ํด๋์ค๊ฐ ๋ช๋ช ๊ฐ์ ์ ์ธํ๊ณค ์ ๋ถ ๋์ผํ ๋ฉค๋ฒ๋ณ์๋ฅผ ๊ฐ์ง๊ณ ์๋ค.
- ๋์ผํ ์๋ฏธ๋ฅผ ๊ฐ๋ ๋ฉค๋ฒ ๋ณ์์์๋ ํน์ DTO ํด๋์ค์์๋ ํ์ ์ด ๋ค๋ฅด๋ค.
- ์ ์ํ์์ ๊ฒฌ๋์ง ๋ชปํ ์ธ์์ด ๋ด๋นํ ์๋น์ค์์๋ MAP์ ์ฌ์ฉํด๋ฒ๋ ธ๋ค. ์ฐ๊ณ๊ฐ ๋๋ ์ํฉ์์๋ DTO์์ ๊ฐ์ ๋ฝ์๋ค๊ฐ MAP์ผ๋ก ์ฌ์ ์ํ์ฌ ๋๊ฒจ์ฃผ์ด์ผ ํ๋ค.
์ ๋ง ๋์งํ๊ธฐ ๊ทธ์ง ์๋ ์ํฉ์ด๋ค. ๊ฒฐ๋ก ์ ์ผ๋ก ์ ํ๋ก์ ํธ๋ ๋ง๋ฐ์ง๋ฅผ ํฅํด ๊ฐ๊ณ ์์ผ๋... ๋ฌธ์ ๊ฐ ๋ฐ์ํ๋ฉด ์ ๋ง ๊ฑด๋๋ฆฌ๊ธฐ ์ซ์ ํ๋ก์ ํธ๊ฐ ๋์ด๋ฒ๋ ธ๋ค.
๊ฒฐ๋ก ์, ๋ฌด์กฐ๊ฑด ํ ์ชฝ์ด ์ข์ ๊ฒ์ ์๋๋ ์ํฉ์ ๋ฐ๋ผ ํ๋จํ์ฌ ๊ฐ๋ฐํ๋ ๊ฒ์ด ์ข๋ค.
๊ทธ๋์ ์์ ๊ฐ์ ๊ณ ํต์ ๊ฒช์ง ์๊ธฐ๋ฅผ...