2021-06-03(Thu)

Facts (์‚ฌ์‹ค, ๊ฐ๊ด€)

์˜ค๋žœ๋งŒ์— ๋Šฆ์ž ์„ ์žค๋‹ค.

์ง€์›ํ–ˆ๋˜ ๊ธฐ์—…์—์„œ ์˜คํผ๋ฅผ ๋ฐ›์•˜๋‹ค.

pepple ์‹œํ€€์Šค ๋‹ค์ด์–ด๊ทธ๋žจ์„ ๊ทธ๋ฆฌ๊ณ , ๊ฒฐ์›์„ ๋ฉ”๊พธ๋Š” ๋ฐฉ์‹์— ๋Œ€ํ•ด ๋…ผ์˜ํ–ˆ๋‹ค.

Feelings (๋Š๋‚Œ, ์ฃผ๊ด€)

ํ‘น ์ž๋‹ˆ ๊ฐœ์šดํ•˜๋‹ค.

์ฒ˜์Œ์—” ๋‹ด๋‹ดํ–ˆ๋‹ค. ์˜คํผ ๋ฉ”์ผ์„ ํ›‘๊ณ  ๊ถ๊ธˆํ•œ ์ ์„ ์ฒดํฌํ–ˆ๋‹ค. ํ  ๋‚˜๋Š” ์ด๋Ÿฐ ์ผ์„ ๋งŒ๋‚˜๋„ ๊ฐ์ •์ด ํ™• ์›€์ง์ด์ง„ ์•Š๋Š” ๊ฒƒ ๊ฐ™๋‹ค.

์ด๊ฒƒ ์ €๊ฒƒ ์ฒดํฌํ•˜๊ณ ๋‚˜๋‹ˆ ๊ทธ ๋•Œ๋ถ€ํ„ฐ ๊ธฐ์จ์ด ์ซ™ ์˜ฌ๋ผ์™”๋‹ค. ์ทจ์ค€ ์‹œ์ž‘ํ•˜๊ณ  ์ฒ˜์Œ ์ง€์›ํ•˜์ž๋งˆ์ž ์›ํ•˜๋Š” ํŒ€์— ํ•ฉ๋ฅ˜ํ•  ์ˆ˜ ์žˆ๋‹ค๋‹ˆ..! ์•„ ๋„˜๋‚˜ ์ข‹์€ ์ผ์ด๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๋‚˜๋ฅผ ์ญ‰ ์‘์›ํ•ด์คฌ๋˜ ์•„๋‚ด๊ฐ€ ๊ทผ์‹ฌ์„ ๋œ ๊ฒƒ์ด๋ผ๋Š” ์ƒ๊ฐ์— ๋”์šฑ ๊ธฐ๋ปค๋‹ค.

๋ฌผ๋ก  ๊ธฐ์˜๊ธฐ๋งŒํ•œ ๊ฒƒ์€ ์•„๋‹ˆ์—ˆ๋‹ค. ์†”์งํžˆ ์•ฝ๊ฐ„ ๋‘๋ ค์›€๊ณผ ๊ธด์žฅ๋„ ์˜ฌ๋ผ์™”๋‹ค. ๋‚ด ์ƒ๊ฐ๋ณด๋‹ค ๋‚˜์— ๋Œ€ํ•œ ๊ธฐ๋Œ€๊ฐ€ ๋†’์€ ๊ฒƒ ๊ฐ™์€๋ฐ ์ž˜ ํ•ด๋‚ผ ์ˆ˜ ์žˆ์„๊นŒ? ํ•˜๋Š” ์ƒ๊ฐ์ด ๋“ค์—ˆ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

์ง€๊ธˆ์€ ๋‘๋ ค์›€๊ณผ ๊ธด์žฅ์ด ๊ฐ€์‹œ๊ณ  ํ•œ์ฐฝ ์„ค๋ ˆ๋Š” ์ƒํƒœ๋‹ค. ์ƒ๊ฐํ•ด๋ณด๋ฉด ๋‚˜๋Š” ์ปดํฌํŠธ ์กด์„ ๊นฐ ๋•Œ๋งˆ๋‹ค ๋น„์Šทํ•œ ๋‘๋ ค์›€์„ ๋Š๊ปด์™”๋‹ค. ํ•˜์ง€๋งŒ ๋‘๋ ค์›€์€ ๋Œ€๊ฒŒ ์‹ค์ œ์™€ ๋‹ฌ๋ž๊ณ , ์ƒˆ๋กœ์šด ๊ฒฝํ—˜์€ ์–ด๋–ค ์‹์œผ๋กœ๋“  ๋‚˜๋ฅผ ์„ฑ์žฅ์‹œ์ผฐ๋‹ค. ์šฐ์„  3๋‹ฌ์˜ Try-out ๊ธฐ๊ฐ„ ๋™์•ˆ ๋‚˜๋ฅผ ๋ฏฟ๊ณ  ์ œ๋Œ€๋กœ ์ผ์— ๋ชฐ์ž…ํ•ด๋ณด์ž.

์ฝ”๋“œ์ˆจ ๊ณผ์ œ๋ฅผ ์ œ๋Œ€๋กœ ์ง„ํ–‰ํ•˜์ง€ ๋ชปํ•ด์„œ ์•„์‰ฝ๋‹ค. ๊ฐ€์กฑ์—๊ฒŒ ์ถ•ํ•˜ ๋ฐ›๊ณ , ๋„์›€ ์ฃผ์…จ๋˜ ๋ถ„๋“ค๊ป˜ ๊ฐ์‚ฌ๋ฅผ ํ‘œํ•˜๊ณ , ๊ทธ๊ฐ„ ๋ฒŒ๋ ค๋†“์•˜๋˜ ์‚ฌ์ด๋“œ ํ”„๋กœ์ ํŠธ๋“ค์˜ ๋’ค์ฒ˜๋ฆฌ๋ฅผ ํ•˜๋‹ค๋ณด๋‹ˆ ์‹œ๊ฐ„์ด ํ›…ํ›… ์ง€๋‚˜๊ฐ€๋”๋ผ. ์ถœ๊ทผ ์ „์— ์ฒ˜๋ฆฌํ•  ์ผ์„ ๋‹ค ์ฒ˜๋ฆฌํ•ด๋†“์ž.

Findings (๋ฐฐ์šด ์ )

์—ญ์‹œ PR, Summary ๊ฐ™์€ ๊ฒƒ์€ ์˜ˆ์‹œ๋ฅผ ํ•จ๊ป˜ ์ ์–ด์ฃผ๋Š” ๊ฒƒ์ด ์ข‹๋‹ค๋Š” ๊ฒƒ์„ ํ•™์Šตํ–ˆ๋‹ค. ์˜ˆ์‹œ

JavaDoc์˜ description๊ณผ @return ์— ์ค‘๋ณต๋˜๋Š” ์„ค๋ช…์„ ์ ๋Š” ๊ฒฝ์šฐ์— ๊ทธ ์ด์œ ๋ฅผ ์•Œ๊ฒŒ ๋˜์—ˆ๋‹ค.๊ธฐ๋ณธ์ ์œผ๋กœ ๋‘˜์€ ์—ญํ• ์ด ๋‹ค๋ฅด๋‹ค. ์ค‘๋ณต๋˜๋”๋ผ๋„ ์—ญํ• ์— ์ถฉ์‹คํ•˜๊ฒŒ ์ ๋Š” ๊ฒƒ์ด ์ฝ๋Š” ์‚ฌ๋žŒ ์ž…์žฅ์—์„œ ๋ฉ”์„œ๋“œ๋ฅผ ํŒŒ์•…ํ•˜๊ธฐ ํŽธํ•˜๋‹ค.

Dozer Mapper ์‚ฌ์šฉ๋ฒ•์— ๋Œ€ํ•ด์„œ ํ•™์Šตํ–ˆ๊ณ  ์•„๋ž˜ ๋‚ด์šฉ๋Œ€๋กœ ์ •๋ฆฌํ–ˆ๋‹ค.

DozerMapper๋ž€?

Dozer is a Java Bean to Java Bean mapper that recursively copies data from one object to another, it is an open source mapping framework that is robust, generic, flexible, reusable, and configurable.

ํ•œ ๊ฐ์ฒด์—์„œ ๋‹ค๋ฅธ ๊ฐ์ฒด๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์žฌ๊ท€์ ์œผ๋กœ ๋ณต์‚ฌํ•˜๋Š” ์˜คํ”ˆ์†Œ์Šค ๋งตํ•‘ ํ”„๋ ˆ์ž„์›Œํฌ์ž…๋‹ˆ๋‹ค. ํŠนํžˆ layered architecture์—์„œ layer๊ฐ„ ๋ฐ์ดํ„ฐ๋ฅผ ์ „๋‹ฌํ•˜๊ธฐ ์œ„ํ•ด DTO๋ฅผ ๋งŒ๋“ค ๋•Œ ํ•„์š”ํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ๋งตํ•‘ํ•˜๋Š”๋ฐ ๋„์›€์„ ์ค๋‹ˆ๋‹ค.

๋„์ž…๊ณ„๊ธฐ

Entity ๊ฐ์ฒด์˜ attribute ์ •๋ณด๋ฅผ DTO๋กœ, ํ˜น์€ DTO attribute ์ •๋ณด๋ฅผ Entity ๊ฐ์ฒด๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์˜ฎ๊ธธ ๋•Œ, getter/setter๋ฅผ ํ™œ์šฉํ•ด์„œ ์ผ์ผ์ด ๋งตํ•‘ํ•ด์•ผ ํ–ˆ์Šต๋‹ˆ๋‹ค. DozerMapper๋Š” ์ด ๋งตํ•‘ ์ž‘์—… ๊ณต์ˆ˜๋ฅผ ์—†์• ๊ธฐ ์œ„ํ•ด ๋„์ž…ํ–ˆ์Šต๋‹ˆ๋‹ค.

์žฅ์ 

  • ๊ฐ์ฒด๊ฐ„ ๋ฐ์ดํ„ฐ ๋งคํ•‘์„ ์‰ฝ๊ฒŒ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  • reflection์„ ์‚ฌ์šฉํ•˜๊ธฐ ๋•Œ๋ฌธ์—, bytecode generation์„ ํ™œ์šฉํ•œ ๋งตํ•‘ ํ”„๋ ˆ์ž„์›Œํฌ์— ๋น„ํ•ด ์ผ์ •ํ•œ ํผํฌ๋จผ์Šค๋ฅผ ๋ƒ…๋‹ˆ๋‹ค.

๋‹จ์ 

  • runtime ์‹œ์ ์— reflection์„ ํ†ตํ•ด ๋งตํ•‘์„ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋งตํ•‘ํ•  ๊ฐ์ฒด ์‚ฌ์ด์ฆˆ๊ฐ€ ์ปค์งˆ ์ˆ˜๋ก ์„ฑ๋Šฅ ์ด์Šˆ๊ฐ€ ์ƒ๊ธธ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  • custom mapping์„ ์œ„ํ•ด์„œ๋Š” XML ํŒŒ์ผ์„ ๋”ฐ๋กœ ์ž‘์„ฑํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค.

์ฐธ๊ณ 

Affimation (์ž๊ธฐ ์„ ์–ธ)

๋‚˜๋Š” ์ ์–ด๋„ ํ•œ ์‚ฌ๋žŒ ๋ชซ์„ ํ•˜๋Š” ๊ฐœ๋ฐœ์ž๋‹ค.

Last updated