๐Ÿš€Java

Dto ์‚ฌ์šฉ์— ๊ด€ํ•œ ์ƒ๊ฐ

harry.93 2022. 5. 29. 19:11
๋ฐ˜์‘ํ˜•

1. ์„œ๋ก 

ํšŒ์‚ฌ์—์„œ ํ”„๋กœ์ ํŠธ๋ฅผ ์ง„ํ–‰ํ•˜๋‹ค๋ณด๋ฉด ๊ณ„์ธต ๊ฐ„ ๋ฐ์ดํ„ฐ ๊ตํ™˜์„ ์œ„ํ•ด ๊ธฐ๋ณธ์ ์œผ๋กœ DTO๋ฅผ ์ƒ์„ฑํ•˜์—ฌ ์‚ฌ์šฉํ•œ๋‹ค. ํšŒ์‚ฌ์—์„œ๋Š” ๋ณดํ†ต ๋ฏธ๋ฆฌ ์ •์˜๋œ ํŽธ์˜์„ฑ์„ ๊ฐ–์ถ˜ DTO๋ฅผ ์ •์˜ํ•ด ์‚ฌ์šฉํ•œ๋‹ค. ๋‹ค๋งŒ, ์ผ๋ถ€ ํ”„๋กœ์ ํŠธ์—์„œ๋Š” ํ”„๋ฆฌ๋žœ์„œ๊ฐ€ ์ฐธ์—ฌํ•˜์—ฌ ํ•ด๋‹น ํ”„๋ฆฌ๋žœ์„œ๊ฐ€ ์ œ๋กœ ๋ฒ ์ด์Šค๋ถ€ํ„ฐ ์‹œ์ž‘ํ•˜์—ฌ ๋‹จ๊ธฐ ํ”„๋กœ์ ํŠธ๋ฅผ ๋งˆ๋ฌด๋ฆฌํ•˜๊ณ , ์ดํ›„ ์ •์ง์›์ด ์ด์–ด๋ฐ›์•„ ์œ ์ง€๋ณด์ˆ˜๋ฅผ ํ•˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ์žˆ๋‹ค. 

์ด ๋•Œ, ์ฝ”๋“œ๋ฅผ ์‚ดํŽด๋ณด๋ฉด ๋Œ€๋ถ€๋ถ„ DTO๋กœ getter/setter๊ฐ€ ์ •์˜๋œ DTO๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค. ํ•˜์ง€๋งŒ, ์œ ์ง€๋ณด์ˆ˜๋ฅผ ์ง„ํ–‰ํ•˜๋‹ค๋ณด๋ฉด ์š”๊ตฌ์‚ฌํ•ญ์€ ํ•ญ์ƒ ๋ฐ”๋€Œ๊ธฐ ๋งˆ๋ จ์ด๊ณ  ์ •๋„๊ฐ€ ์‹ฌํ•˜๋ฉด, ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๊ธฐ์ค€์œผ๋กœ ์ž‘์„ฑ๋œ ๋ฐ์ดํ„ฐ ์ „๋‹ฌ์šฉ DTO๋“ค์€ ์ •์˜๋œ ๋ณ€์ˆ˜์— ๋ฌด์ƒ‰ํ•˜๊ฒŒ ๋ชจ๋“  case๋ฅผ ์ปค๋ฒ„ํ•  ์ˆ˜ ์žˆ๊ฒŒ extend ๋˜๊ฑฐ๋‚˜, ๋ณ€์ˆ˜ ๊ฐœ์ˆ˜๊ฐ€ ๋Š˜์–ด๋‚˜๊ฒŒ ๋œ๋‹ค. ์ด๋Š” ํ”„๋กœ์ ํŠธ๋ฅผ ์ง„ํ–‰ํ•˜๋‹ค๋ณด๋ฉด, ๋ฒˆ๊ฑฐ๋กœ์šด ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ–ˆ๋‹ค.

ํšŒ์‚ฌ์— ์ •์˜๋œ DTO ๊ฐ์ฒด๋Š” Mapํ˜•ํƒœ๋กœ ๋œ ๊ฐ์ฒด๋กœ ํ•„์š”ํ•œ ๋ชจ๋“  ๋ณ€์ˆ˜๋ฅผ Map ๋ณ€์ˆ˜์— ๋„ฃ์–ด ์‚ฌ์šฉํ•œ๋‹ค. ์ด ๊ฒฝ์šฐ์—๋Š” ๋ชจ๋“  ์ผ€์ด์Šค๋ฅผ ๊ฐ„๋‹จํ•˜๊ฒŒ ์ปค๋ฒ„๊ฐ€ ๊ฐ€๋Šฅํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๊ฐœ๋ฐœํ•˜๋Š”๋ฐ๋Š” ํŽธํ•˜์ง€๋งŒ, ์• ์ดˆ์— Mapํ˜•ํƒœ๋กœ ์ •์˜๋˜์–ด ์žˆ๋‹ค๋ณด๋‹ˆ ํšจ์œจ์„ฑ์— ๋ฌธ์ œ๊ฐ€ ์žˆ๊ณ , ์ปดํŒŒ์ผ ์—๋Ÿฌ ๋ฐœ์ƒ์‹œ ๋ฌธ์ œ๋ฅผ ์ฐพ๊ธฐ ํž˜๋“ค๋‹ค.

์—ฌ๋Ÿฌ ๊ธ€์„ ์ฐพ์•„๋ณด๋ฉด DTOํด๋ž˜์Šค๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์ข‹๋‹ค๊ณ ๋Š” ํ•˜์ง€๋งŒ ์ด๋ก  ์ƒ์œผ๋กœ ์ข‹๋‹ค๊ณ  ํ•ด๋„ ์‹ค์ œ ํ˜„์—…์—์„œ ์‚ฌ์šฉํ•  ๋•Œ ์ฝ”๋“œ ์ƒ์ด ์•„๋‹Œ ์—…๋ฌด ์ ์œผ๋กœ ๋ถˆํŽธํ•œ ์ ์ด ์žˆ๋‹ค๊ณ ๋Š” ํ•ด๋„ ๊ณผ์–ธ์ด ์•„๋‹ ๋“ฏ ์‹ถ๋‹ค. 

์ด์— ๋”ฐ๋ผ DTO๋ฅผ ์–ด๋–ป๊ฒŒ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ๊ฐ€์žฅ ํ•ฉ๋ฆฌ์ ์ด๊ณ  ์ข‹์€ ๊ฒƒ์ธ๊ฐ€๋ฅผ ์•Œ์•„๋ณด๊ณ ์ž ํ•œ๋‹ค.

2. ํ…Œ์ŠคํŠธ ์šฉ ์ƒ˜ํ”Œ ํ”„๋กœ์ ํŠธ ์ƒ์„ฑ

์œ„์™€ ๊ฐ™์ด ์ƒ˜ํ”Œ ํ”„๋กœ์ ํŠธ๋ฅผ ์ƒ์„ฑํ–ˆ๋‹ค. ์‹ค์ œ ํ”„๋กœ์ ํŠธ์—์„œ๋Š” ๋” ์ •์˜๋˜์–ด ์žˆ๊ณ , ๋ณต์žกํ•˜๊ฒŒ ์‚ฌ์šฉํ•˜๊ธด ํ•˜์ง€๋งŒ ๊ธฐ๋ณธ์ ์œผ๋กœ ์ •์˜ํ•ด๋†“๊ณ  ํ…Œ์ŠคํŠธ๋ฅผ ์ง„ํ–‰ํ•˜๋ฉด์„œ ๋””๋ฒจ๋กญ ํ•˜๊ณ ์ž ํ•œ๋‹ค.

 


3. ๊ฐ ๊ฐ์ฒด์˜ ์žฅ๋‹จ์ 

Map ๋Œ€์‹  Dto ํด๋ž˜์Šค๋ฅผ ์‚ฌ์šฉํ•ด์•ผ ํ•˜๋Š” ์ด์œ ๋Š” ๊ฒ€์ƒ‰ํ•ด๋ณด๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋Œ€ํ‘œ์ ์ธ ๋ช‡๊ฐ€์ง€ ์ด์œ ๊ฐ€ ์žˆ๋‹ค.

  1. DTO ํด๋ž˜์Šค๋Š” ์ปดํŒŒ์ผ ์—๋Ÿฌ๋ฅผ ์œ ๋ฐœํ•˜์ง€ ์•Š๋Š”๋‹ค.
  2. MAP์€ String์„ ํ‚ค ๊ฐ’์œผ๋กœ ์‚ฌ์šฉํ•˜๊ธฐ ๋•Œ๋ฌธ์—, ์˜คํƒ€๊ฐ€ ๋ฐœ์ƒํ•˜๋Š” ๊ฒฝ์šฐ ํŒŒ์•…ํ•˜๊ธฐ ํž˜๋“ค๋‹ค.
  3. MAP์€ ๊ฐ€๋…์„ฑ์ด ๋–จ์–ด์ง„๋‹ค. ์ฝ”๋“œ๊ฐ€ ์‹คํ–‰๋˜๋Š” ์ค‘๊ฐ„์— ์–ด๋–ค ๊ฐ’์ด ๋ณ€ํ˜•๋˜๊ณ  ๋ณ€์กฐ๋˜๋Š”์ง€ ํŒŒ์•…ํ•˜๊ธฐ ํž˜๋“ค๋‹ค.
  4. MAP์€ ํƒ€์ž… ์บ์ŠคํŒ… ๋น„์šฉ์ด ๋ฐœ์ƒํ•œ๋‹ค. value์— ๊ธฐ๋ณธ์ ์œผ๋กœ Object๊ฐ€ ์ตœ์ƒ์œ„ ํด๋ž˜์Šค์ด๊ธฐ์—, ํ˜•๋ณ€ํ™˜์„ ํ•ด์ฃผ์–ด์•ผ ํ•œ๋‹ค.
  5. MAP์€ ๋ถˆ๋ณ€์„ฑ์„ ํ™•๋ณดํ•  ์ˆ˜ ์—†๋‹ค. ์ค‘๊ฐ„์— ๋ณ€๊ฒฝ์ด ์ผ์–ด๋‚  ์—ฌ์ง€๊ฐ€ ๋” ๋งŽ๋‹ค.

 

์–ด๋А ์ •๋„ ์ผ๋ฆฌ๊ฐ€ ์žˆ๋Š” ๋ง ๋“ค์ด๋‹ค. ๋ณธ์ธ๋„ ์ด๋Ÿฌํ•œ ์ด์œ  ๋•Œ๋ฌธ์— ์—๋Ÿฌ๋ฅผ ๊ฒช๊ณ ๋„ ๊ฝค ์˜ค๋žœ์‹œ๊ฐ„์ด ๊ฑธ๋ ค ๋ชป ์ฐพ์€ ์ ์ด๋‚˜, ๊ฐœ๋ฐœํ•  ๋•Œ๋„ ๋‹ค๋ฅธ ์‚ฌ๋žŒ์ด ์งœ๋†“์€ ์ฝ”๋“œ์—์„œ ์ด๋Ÿฌํ•œ ๋ฌธ์ œ๋ฅผ ๋ณธ ์ ์ด ์žˆ๋‹ค.

[๊ฒฝํ—˜ํ•œ ๋ฌธ์ œ]

  1. name๊ฐ’์ด ์—†๋Š” ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•˜์—ฌ ์ฐพ์•„๋ณด๋‹ˆ map.put("name",value); ๊ฐ€ ์•„๋‹Œ map.put("names",value); ๋ฅผ ํ•˜๊ณ  ์žˆ์—ˆ๋‹ค.
  2. typecast DB์—๋Ÿฌ๊ฐ€ ๋‚˜์„œ ์‚ดํŽด๋ณด๋‹ˆ map์— int๋กœ ๋‹ด๊ธด๊ฒŒ ์•„๋‹Œ String์œผ๋กœ ๋‹ด๊ธด ๊ฐ’์œผ๋กœ DB์กฐํšŒ๋ฅผ ์‹œ๋„ํ–ˆ๋‹ค. 
  3. ๋ถ„๋ช… ๋ฉ”์†Œ๋“œ ์‹œ์ž‘ ์ „์—๋Š” map์— ์„ธ์…˜๋ฐ–์— ์—†์—ˆ๊ณ , ๋ฉ”์†Œ๋“œ ์‹คํ–‰ ๊ณผ์ •์—์„œ๋Š” ํ•ด๋‹น map์— ์กฐํšŒํ•œ list๋ฅผ ๋‹ด๋Š” ์ž‘์—…์ด์—ˆ์ง€๋งŒ ์‹คํ–‰ ํ›„ map์„ ๋ณด๋‹ˆ ์˜ค๋งŒ๊ฐ€์ง€ ๊ฐ’๋“ค์ด ์ „๋ถ€ ๋“ค์–ด์™€ ์žˆ์—ˆ๋‹ค.

 

์‚ฌ์‹ค ์œ„์—์„œ ๊ฒฝํ—˜ํ•œ ๋ฌธ์ œ๋“ค์ด ๋” ์œ„์—์„œ ์–ธ๊ธ‰ํ•œ DTO๋ฅผ ์‚ฌ์šฉํ•ด์•ผ ํ•˜๋Š” ์ด์œ ์— ๋ถ€ํ•ฉํ•œ๋‹ค๊ณ  ๋ณผ ์ˆ˜ ์žˆ๊ฒ ๋‹ค. ํ•˜์ง€๋งŒ ์ €๋Ÿฐ ๊ฒฝํ—˜ ์™ธ์—๋„ ์ด๋Ÿฐ ๊ฒฝํ—˜์„ ํ–ˆ๋‹ค.

[ Map์„ ์‚ฌ์šฉํ•˜์˜€์„ ๋•Œ ์žฅ์ ? ]

  1. ํ†ต๊ณ„๋ฅผ ๋‚ด๊ธฐ ์œ„ํ•œ DB ํ…Œ์ด๋ธ”์—์„œ ํ•ญ๋ชฉ๋“ค์„ ๊ฐ€์ ธ์˜ฌ ๋•Œ, ํ•ญ๋ชฉ์ด 4,50๊ฐœ ์ •๋„ ๋˜๋Š” ์ฟผ๋ฆฌ๋ฅผ ์ž‘์„ฑํ•˜์—ฌ ๋งต์œผ๋กœ ๊ฐ€์ ธ์˜ค๋ฉด ํ•ด๋‹น ๋งต์— ์•Œ์•„์„œ ๋‹ด๊ฒจ์ ธ์˜ค๊ธฐ ๋•Œ๋ฌธ์—(Mybatis parameterType์— map์„ ์ง€์ •ํ•จ์œผ๋กœ์จ) ํ•ญ๋ชฉ์ด ๋งŽ์€ ๊ฒฝ์šฐ ์‚ฌ์šฉํ•˜๊ธฐ ํŽธํ–ˆ๋‹ค. 
  2. ํ•„์š”ํ•œ ๊ฐ’๋“ค์ด 4,5๊ฐœ ๋˜๋Š” ํ…Œ์ด๋ธ”์—์„œ ์ฐธ์กฐํ•˜์—ฌ ๊ตฌ์„ฑํ•ด์•ผ ํ•˜๋Š” ๊ฒฝ์šฐ. map์œผ๋กœ ์ž‘์„ฑํ•˜๋ฉด ํŽธํ–ˆ๋‹ค.
  3. ํŒŒ๋ผ๋ฏธํ„ฐ๊ฐ€ ์ถ”๊ฐ€๋˜์–ด์•ผ ํ•˜๋Š” ๊ฒฝ์šฐ, ๊ทธ๋ƒฅ ๊ฐ€์ ธ์™€์„œ ๋„ฃ์œผ๋ฉด ๋œ๋‹ค.
  4. ๊ธ‰ํ•˜๊ฒŒ ํ•„์š”ํ•œ ์ž‘์—…์ด ์žˆ๋Š” ๊ฒฝ์šฐ, ์‚ฌ์šฉํ•˜๊ธฐ ํŽธํ–ˆ๋‹ค.

 

ํƒ€์ž… ์บ์ŠคํŒ… ๋น„์šฉ์— ์กฐ์ฐจ๋„ ์‹ ๊ฒฝ์„ ์จ์•ผ ํ•˜๋Š” ๋Œ€ํ˜• ํ”„๋กœ์ ํŠธ๋‚˜ ํšจ์œจ์„ ๊ฐ•์กฐํ•œ ํ”„๋กœ์ ํŠธ๋ผ๋ฉด ๋ชจ๋ฅด๊ฒ ์ง€๋งŒ, ์œ„ ์žฅ์ ์„ ๋ณด์•˜์„ ๋•Œ๋Š” 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๋งŒ๊ฑด์„ ์„ธํŒ…ํ•˜์—ฌ ํ…Œ์ŠคํŠธ๋ฅผ ํ•ด๋ณด์•˜๋‹ค.

dto vs map

์ด๋ฒˆ์—๋Š” ์ฐจ์ด๊ฐ€ ํ™•์‹คํžˆ ๋‚˜๋Š” ๊ฒƒ์œผ๋กœ ๋‚˜ํƒ€๋‚ฌ๋‹ค. ์‚ฌ์‹ค ํ…Œ์ŠคํŠธ์—์„œ ๋ณด์—ฌ์ง€๋Š” ๊ฒƒ์€ ๋‹จ์ˆœํžˆ String ๊ฐ’์œผ๋กœ ์„ธํŒ…์„ ํ•˜๊ณ  ๋ฐ˜๋ณต์„ ๋Œ๋ฆฌ๋Š” ๊ฒƒ์ด๋ฏ€๋กœ ์‹ค์ œ ์„œ๋น„์Šค์—์„œ ๋ฐ์ดํ„ฐ ํ˜ธ์ถœ ์ „/ํ›„์— ์–ด๋–ค ์ž‘์—…์„ ํ•˜๋Š”์ง€์— ๋”ฐ๋ผ์„œ๋„ ๋” ์ฐจ์ด๊ฐ€ ์žˆ์„ ๊ฒƒ์ด๋‹ค.

๋‹จ์ˆœ ํ…Œ์ŠคํŠธ์—์„œ๋„ ์ด์ •๋„ ์ฐจ์ด๋ฅผ ๋ณด์ด๋Š”๋ฐ, ์‹ค์ œ ์„œ๋น„์Šค์—์„œ๋Š” ๋งŽ์€ ๋ฐ์ดํ„ฐ๋ฅผ ์˜ค๊ณ ๊ฐ€๋Š” ์ž‘์—…์„ ํ•  ๋•Œ๋Š” ๊ทธ ์ฐจ์ด๊ฐ€ ๋” ๋ช…ํ™•ํ•˜๊ฒŒ ๋ฒŒ์–ด์งˆ ๊ฒƒ์œผ๋กœ ํŒ๋‹จ๋œ๋‹ค.

์ด๋ฒˆ์—๋Š” ๋‘˜์„ ํ•ฉ์ณ์„œ ํ…Œ์ŠคํŠธ ํ•ด๋ณด์•˜๋‹ค. ๊ณตํ†ต ์ •๋ณด์ธ ์„ธ์…˜์ •๋ณด ๋น„์Šทํ•œ ๊ฒƒ์„ commonDto๋กœ ๋นผ๊ณ , dto ํด๋ž˜์Šค ๋‚ด๋ถ€์— map์„ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ํ˜•ํƒœ๋กœ ๋งŒ๋“ค์–ด ํ…Œ์ŠคํŠธ๋ฅผ ์ง„ํ–‰ํ–ˆ๋‹ค.

dto๋ฅผ ๋ฒ ์ด์Šค๋กœ ํ•˜์ง€๋งŒ, ๋‚ด๋ถ€์— map ํด๋ž˜์Šค๋ฅผ ๋ฐ์ดํ„ฐ ์šด๋ฐ˜์šฉ์œผ๋กœ ์‚ฌ์šฉ.

ํ˜ผํ•ฉํ•˜์—ฌ ์‚ฌ์šฉํ•œ ๊ฒƒ์€ ์‹คํ–‰ ์†๋„๊ฐ€ ์ œ์ผ ๋น ๋ฅธ ๊ฒƒ์œผ๋กœ ๋‚˜ํƒ€๋‚ฌ๋‹ค. ๋ฌผ๋ก  ์•„์ฃผ ๋ฏธ์„ธํ•œ ์ฐจ์ด๊ธด ํ•˜์ง€๋งŒ ๋ง์ด๋‹ค.

์ด๋ ‡๊ฒŒ ์‚ฌ์šฉํ•˜๊ฒŒ๋˜๋ฉด RDB ์„œ๋น„์Šค๋ฅผ ๊ธฐ์ค€์œผ๋กœ ๋ณด์•˜์„ ๋•Œ, ์„ธ์…˜ ๊ฐ’์ด๋‚˜ ๊ณตํ†ต ์ •๋ณด๋“ค์„ dto ํด๋ž˜์Šค์— set์„ ํ•˜๊ฒŒ ๋˜๊ณ , DB์กฐํšŒ ๊ฒฐ๊ณผ ๊ฐ’์€ map ํด๋ž˜์Šค๋กœ ๋ฐ›์•„ ๊ฐ€์ง€๊ณ  ์žˆ๊ฒŒ ๋  ๊ฒƒ ์ด๋‹ค. ์—ฌ๋Ÿฌ ์ฒ˜๋ฆฌ ๋ฐฉ๋ฒ•์ด ์žˆ๊ฒ ์ง€๋งŒ, ์ด๋ ‡๊ฒŒ ์ฒ˜๋ฆฌํ•˜๋Š” ๋ฐฉ๋ฒ•๋„ ๋‚˜๋ฆ„ ํ•ฉ๋ฆฌ์ ์ด๋ผ๋Š” ์ƒ๊ฐ์ด ๋“ ๋‹ค.

์™œ๋ƒํ•˜๋ฉด, ๊ณตํ†ต์œผ๋กœ ์‚ฌ์šฉํ•˜๋Š” ์ •๋ณด๋“ค ์™ธ์— ์กฐํšŒ๋˜๋Š” ๋ฐ์ดํ„ฐ๋“ค์„ ๊ฐ€์ ธ์™€์„œ ์‚ฌ์šฉํ• ๋•Œ ์ผ์ผํžˆ ์„ธํŒ…ํ•ด์ฃผ๊ณ  ํ•˜๋Š” ๊ฒƒ๋ณด๋‹ค๋Š” ๊ทธ๋ƒฅ map ํ˜•ํƒœ๋กœ ์ฒ˜๋ฆฌํ•ด์„œ ๋„˜๊ธฐ๋ฉด ํŽธํ•˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. ๋Œ€์‹ , ๋ณ€์กฐ๊ฐ€ ์ผ์–ด๋‚˜๋ฉด ์•ˆ๋˜๋Š” ๊ฐ’๋“ค์— ๋Œ€ํ•ด์„œ๋Š” dto ํด๋ž˜์Šค๋ฅผ ํ†ตํ•ด ์ž˜๋ชป๋œ ๊ฐ’์ด set ๋˜๋Š” ๊ฒƒ์„ ๋ฐฉ์ง€ ํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

ํ•˜์ง€๋งŒ ์—ฌ์ „ํžˆ ์œ„ํ—˜์„ฑ์€ ๋‚จ์•„์žˆ๋‹ค. ์™œ๋ƒํ•˜๋ฉด map์œผ๋กœ ์‚ฌ์šฉํ•˜๋Š” ๊ฐ’๋“ค์„ ๊บผ๋‚ด์„œ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ๋„ฃ๋Š” ์ž‘์—…์ด ์ œ์ผ ๋งŽ์„ ๊ฒƒ์ด๊ธฐ ๋•Œ๋ฌธ์— map์ด ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ๋ฌธ์ œ์ ์€ ์—ฌ์ „ํžˆ ์•ˆ๊ณ  ์žˆ๋‹ค๊ณ  ๋ณผ ์ˆ˜ ์žˆ๋‹ค.

์ด๋ ‡๊ฒŒ ์ƒ๊ฐํ•˜๋ฉด ๊ฐ ํƒ€์ž…๋“ค์ด ๊ฐ€์ง€๋Š” ๋ฌธ์ œ๋“ค์„ ๊ฐ€์ ธ๊ฐ€๋ฉด์„œ ๊ฒฐ๊ตญ ์†๋„๋งŒ ์žก๊ธฐ ์œ„ํ•œ ๋ฐฉ๋ฒ•์ด๋ผ๋Š” ์ƒ๊ฐ์ด ๋“ ๋‹ค. 

... ์ œ์ผ ์•ˆ์ข‹์€ ์ผ€์ด์Šค๋ผ๊ณ  ๋ณผ ์ˆ˜๋„ ์žˆ๊ฒ ๋‹ค.

7. ๊ฒฐ๋ก 

๊ฒฐ๋ก ์€ ์ƒํ™ฉ์— ๋”ฐ๋ผ ์–ด๋–ค ํƒ€์ž…์„ ์“ธ ์ง€ ๊ฒฐ์ •์ด ๋˜์–ด์•ผ ํ•˜๋Š” ๊ฒƒ์œผ๋กœ ์ƒ๊ฐํ•œ๋‹ค. ๊ทธ ์ƒํ™ฉ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๋‚˜๋ˆŒ ์ˆ˜ ์žˆ๋‹ค

  1. ๊ฐœ๋ฐœ ์‹œ, ์š”๊ตฌ์‚ฌํ•ญ์˜ ๋ณ€๊ฒฝ์ด ๋งŽ๊ณ  ์œ ์ง€๋ณด์ˆ˜ ์„ฑ์ด ์ง™์€ ํ”„๋กœ์ ํŠธ์ด๋‹ค.
  2. ๋ฐ์ดํ„ฐ๋ฅผ ์กฐํšŒํ•  ๋•Œ ๋ณต์žกํ•œ ์กฐ์ธ์ด๋‚˜ ์„œ๋ธŒ์ฟผ๋ฆฌ ๋“ฑ์œผ๋กœ ์ธํ•ด ์ •์˜๋œ ํ…Œ์ด๋ธ” ์™ธ์˜ ์ •๋ณด๋“ค์„ ๋งŽ์ด ์กฐํšŒํ•œ๋‹ค.
    (ํ™”๋ฉด์— ํ‘œํ˜„ํ•  ์ •๋ณด๋“ค์ด ๋งŽ๊ณ , ๋ณต์žกํ•˜๋‹ค)
  3. ๋ฐ์ดํ„ฐ ์š”์ฒญ ์‹œ, ๋„˜์–ด์˜ค๋Š” ํŒŒ๋ผ๋ฏธํ„ฐ๊ฐ€ ๋งŽ์œผ๋ฉฐ ์ž…๋ ฅ ๊ฐ’์— ๋Œ€ํ•œ ๊ฒ€์ฆ ์ž‘์—…๊ณผ ์ถ”๊ฐ€ ์ž‘์—…์ด ๋งŽ๋‹ค.

-> Map์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ๋‚ซ๋‹ค!

  1. ๊ฐœ๋ฐœ ์‹œ, ์ด๋ฏธ Fix๋œ ํ•ญ๋ชฉ์ด ๋งŽ์œผ๋ฉฐ ํ•œ ๋ฒˆ ๊ฐœ๋ฐœํ•˜๋ฉด ๋ณ€๊ฒฝ์ด ์ ์€ ํ”„๋กœ์ ํŠธ์ด๋‹ค.
  2. ๋ฐ์ดํ„ฐ๋ฅผ ์กฐํšŒํ•  ๋•Œ ์ง€์ •๋œ ํ•ญ๋ชฉ๋“ค์„ ๊ฐ€์ ธ์˜ค๋Š” ๊ฒƒ์ด ์ผ๋ฐ˜์ ์ด๋‹ค. 
    (ํ™”๋ฉด์— ํ‘œํ˜„ํ•  ์ •๋ณด๋“ค์ด ์ •ํ•ด์ ธ์žˆ๊ณ , ๋‹จ์ˆœํ•˜๋‹ค)
  3. ๋ฐ์ดํ„ฐ ์š”์ฒญ ์‹œ, ๋„˜์–ด์˜ฌ ํŒŒ๋ผ๋ฏธํ„ฐ๊ฐ€ ์ •ํ•ด์ ธ ์žˆ์œผ๋ฉฐ ๋ฒ”์œ„๊ฐ€ ์ง€์ •๋˜์–ด ์žˆ๊ณ  ํ•ด๋‹น ํŒŒ๋ผ๋ฏธํ„ฐ๋ฅผ ๊ทธ๋Œ€๋กœ ์‚ฌ์šฉํ•˜๋Š” ์ž‘์—…์ด ๋งŽ๋‹ค.

-> DTO ํด๋ž˜์Šค๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ๋‚ซ๋‹ค!

๊ฒฐ๊ตญ ๊ฐ ํƒ€์ž…์— ๋”ฐ๋ผ ์žฅ๋‹จ์ ์€ ๋ช…ํ™•ํžˆ ๋‚˜๋‰˜๋ฉฐ ๋‘˜ ์ค‘์˜ ํ•˜๋‚˜์˜ ํƒ€์ž…์ด ๋ฌด์กฐ๊ฑด ์ข‹๋‹ค! ๋ผ๊ณ ๋Š” ํ•  ์ˆ˜ ์—†๋‹ค๋Š”๊ฒŒ ๊ฒฐ๋ก ์ด๋‹ค. ์ฆ‰, ํ•ด๋‹น ํƒ€์ž…์„ ์–ธ์ œ ์–ด๋””์„œ ์‚ฌ์šฉํ•  ์ง€๋Š” ํ”„๋กœ์ ํŠธ์— ๋”ฐ๋ผ ๋‹ค๋ฅด๋ฉฐ, ๊ทธ ์„ฑ๊ฒฉ์— ๋”ฐ๋ผ ์ˆ˜์›”ํ•˜๊ฒŒ ๊ฐœ๋ฐœ ์ง„ํ–‰์ด ๊ฐ€๋Šฅํ•œ ํƒ€์ž…์„ ์„ ํƒํ•˜๋Š” ๊ฒƒ์ด ๋งž๋‹ค๊ณ  ๋ณธ๋‹ค.

์‹ค์ œ๋กœ ๋งต์„ ์‚ฌ์šฉํ•ด์•ผํ•  ๊ฒƒ ๊ฐ™์€ ํ”„๋กœ์ ํŠธ์— DTO ํด๋ž˜์Šค๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํ˜„์žฌ๋Š” ๋ฌด์Šจ์ผ์ด ์ผ์–ด๋‚ฌ๋ƒ ํ•˜๋ฉด...

  1. ๊ฑฐ์˜ ๋Œ€๋‹ค์ˆ˜์˜ DTO ํด๋ž˜์Šค๊ฐ€ ๋ช‡๋ช‡ ๊ฐ’์„ ์ œ์™ธํ•˜๊ณค ์ „๋ถ€ ๋™์ผํ•œ ๋ฉค๋ฒ„๋ณ€์ˆ˜๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค.
  2. ๋™์ผํ•œ ์˜๋ฏธ๋ฅผ ๊ฐ–๋Š” ๋ฉค๋ฒ„ ๋ณ€์ˆ˜์ž„์—๋„ ํŠน์ • DTO ํด๋ž˜์Šค์—์„œ๋Š” ํƒ€์ž…์ด ๋‹ค๋ฅด๋‹ค.
  3. ์œ„ ์ƒํƒœ์—์„œ ๊ฒฌ๋””์ง€ ๋ชปํ•œ ์ธ์›์ด ๋‹ด๋‹นํ•œ ์„œ๋น„์Šค์—์„œ๋Š” MAP์„ ์‚ฌ์šฉํ•ด๋ฒ„๋ ธ๋‹ค. ์—ฐ๊ณ„๊ฐ€ ๋˜๋Š” ์ƒํ™ฉ์—์„œ๋Š” DTO์—์„œ ๊ฐ’์„ ๋ฝ‘์•„๋‹ค๊ฐ€ MAP์œผ๋กœ ์žฌ์ •์˜ํ•˜์—ฌ ๋„˜๊ฒจ์ฃผ์–ด์•ผ ํ•œ๋‹ค.

์ •๋ง ๋”์งํ•˜๊ธฐ ๊ทธ์ง€ ์—†๋Š” ์ƒํ™ฉ์ด๋‹ค. ๊ฒฐ๋ก ์ ์œผ๋กœ ์œ„ ํ”„๋กœ์ ํŠธ๋Š” ๋ง‰๋ฐ”์ง€๋ฅผ ํ–ฅํ•ด ๊ฐ€๊ณ  ์žˆ์œผ๋‚˜... ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉด ์ •๋ง ๊ฑด๋“œ๋ฆฌ๊ธฐ ์‹ซ์€ ํ”„๋กœ์ ํŠธ๊ฐ€ ๋˜์–ด๋ฒ„๋ ธ๋‹ค. 

๊ฒฐ๋ก ์€, ๋ฌด์กฐ๊ฑด ํ•œ ์ชฝ์ด ์ข‹์€ ๊ฒƒ์€ ์•„๋‹ˆ๋‹ˆ ์ƒํ™ฉ์— ๋”ฐ๋ผ ํŒ๋‹จํ•˜์—ฌ ๊ฐœ๋ฐœํ•˜๋Š” ๊ฒƒ์ด ์ข‹๋‹ค.

๊ทธ๋ž˜์„œ ์œ„์™€ ๊ฐ™์€ ๊ณ ํ†ต์€ ๊ฒช์ง€ ์•Š๊ธฐ๋ฅผ...

 

 

 

 

728x90
๋ฐ˜์‘ํ˜•