2021-05-31(Mon)

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

์ฝ”๋“œ์ˆจ 5์ฃผ์ฐจ ๊ฐ•์˜๋ฅผ ์ˆ˜๊ฐ•ํ–ˆ๋‹ค.

์ˆ˜์š”์ผ์— ์žˆ์„ ์ง€์› ๊ธฐ์—… ์ตœ์ข…๋ฉด์ ‘์„ ์กฐ๊ธˆ ์ค€๋น„ํ–ˆ๋‹ค.

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

๊ฒฝํ—˜์ƒ ๊ธฐ์ˆ ์„ ํ•™์Šตํ•  ๋• '๋ถˆํŽธํ•จ'์„ ๋จผ์ € ๋Š๋ผ๋Š” ๊ฒƒ์ด ํšจ๊ณผ์ ์ด๋‹ค. ๋•๋ถ„์— lombok๊ณผ dozer๋ฅผ ํšจ๊ณผ์ ์œผ๋กœ ํ•™์Šตํ•  ์ˆ˜ ์žˆ์—ˆ๋‹ค.

ํ•œํŽธ ์•„๋ž˜ ์ฝ”๋“œ์ˆจ ๊ฐ•์˜๋ฅผ ์ˆ˜๊ฐ•ํ•˜๋ฉฐ ์•„๋ž˜ ์˜๋ฌธ์ด ๋“ค์—ˆ๋‹ค.

์œ ํšจ์„ฑ ๊ฒ€์‚ฌ๋Š” Entity์—์„œ๋Š” ํ•˜์ง€ ์•Š๊ณ  DTO์—์„œ๋งŒ ํ•ด์•ผํ• ๊นŒ?

์ฝ”๋“œ์ˆจ ๊ฐ•์˜์—์„œ๋Š” Entity์—์„œ ํ•˜๋Š” ์œ ํšจ์„ฑ ๊ฒ€์‚ฌ ์กฐ๊ฑด์„ ์‚ญ์ œํ•˜๊ณ  DTO ๊ฐ์ฒด์—๋งŒ ์œ ํšจ์„ฑ ๊ฒ€์‚ฌ ์กฐ๊ฑด์„ ์‚ฝ์ž…ํ•˜๋Š” ๋‚ด์šฉ์ด ์žˆ์—ˆ๋‹ค. ์ด์œ ๋Š” DTO๋ฅผ ๋งŒ๋“ค์—ˆ์œผ๋‹ˆ Entity ๊ฐ์ฒด๋Š” '์›น์ด ๋” ์ด์ƒ ์•„๋‹ˆ๋‹ˆ๊นŒ'์˜€๋‹ค. ์ด๋Š” DTO ๊ฐ์ฒด๋ฅผ ์‚ฌ์šฉํ•จ์œผ๋กœ์จ ์™ธ๋ถ€์—์„œ Entity ์ƒ์„ฑ์— ๊ด€์—ฌํ•˜๋Š” ๋ถ€๋ถ„์ด ์‚ฌ๋ผ์กŒ์œผ๋ฏ€๋กœ, DTO์—์„œ๋งŒ ์œ ํšจ์„ฑ ๊ฒ€์‚ฌํ•˜๋ฉด ๋œ๋‹ค๋Š” ๋ง์”€์œผ๋กœ ์ดํ•ดํ–ˆ๋Š”๋ฐ, ๋ญ”๊ฐ€ ์œ„ํ™”๊ฐ์ด ๋Š๊ปด์กŒ๋‹ค. ๊ทธ๋ž˜์„œ ๋‹ค๋ฅธ ๊ฐœ๋ฐœ์ž๋“ค์˜ ์˜๊ฒฌ์„ ์ฐพ์•„๋ดค๋‹ค.

๋งŒ์•ฝ ์œ ํšจ์„ฑ ๊ฒ€์‚ฌ ๋Œ€์ƒ์„ Entity์—์„œ ์ œ๊ฑฐํ•˜๊ณ  DTO์— ์ถ”๊ฐ€ํ•˜๋ฉด ์•„๋ž˜ ์žฅ๋‹จ์ ์ด ์žˆ๋‹ค.

  • ์žฅ์ : Entity ๊ฐ์ฒด ์ƒ์„ฑ ๋ฉ”์„œ๋“œ๋ฅผ ๋ถ€๋ฅด๊ธฐ ์ „์— ์œ ํšจ์„ฑ ์˜ˆ์™ธ๊ฐ€ ๊ฒ€์ถœ๋˜๋ฏ€๋กœ ์˜ค๋ฒ„ํ—ค๋“œ๋ฅผ ์ค„์ผ ์ˆ˜ ์žˆ๋‹ค.

  • ๋‹จ์ : DTO๋ฅผ ๊ฑฐ์น˜์ง€ ์•Š๊ณ  Entity๋ฅผ ์ƒ์„ฑํ•˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ์žˆ๋‹ค๋ฉด, ๋…ผ๋ฆฌ์ƒ ์œ ํšจํ•˜์ง€ ์•Š์€ Entity๊ฐ€ ๋งŒ๋“ค์–ด์งˆ ์ˆ˜ ์žˆ๋‹ค๋Š” ์œ„ํ—˜์ด ์žˆ๋‹ค.

๊ทธ๋Ÿฐ๋ฐ ์œ„ ๋‹จ์ ์€ Entity์—๋„ ์œ ํšจ์„ฑ ๊ฒ€์‚ฌ ์กฐ๊ฑด์„ ๋„ฃ์œผ๋ฉด ํ•ด๊ฒฐ๋˜๋ฉฐ, ์—ฌ๊ธฐ์— ๋”ฐ๋ฅด๋Š” ๊ตฌํ˜„ ๋น„์šฉ์ด ์ ๊ณ , ์„ฑ๋Šฅ์ƒ ๋น„์šฉ๋„ ๋ง‰ ํฌ๋ฆฌํ‹ฐ์ปฌํ•˜๊ฒŒ ํฌ์ง€ ์•Š์œผ๋ฏ€๋กœ, ์™ ๋งŒํ•œ ์ƒํ™ฉ์—์„  Entity์™€ DTO ์–‘ ์ชฝ์—์„œ ์œ ํšจ์„ฑ ๊ฒ€์‚ฌ๋ฅผ ํ•˜๋Š”๊ฒŒ ์ข‹๋‹ค๊ณ  ํŒ๋‹จํ–ˆ๋‹ค. ์Šคํƒ์˜ค๋ฒ„ํ”Œ๋กœ์šฐ ์ฐธ๊ณ .

ํ•œํŽธ ๋™์‹œ์„ฑ ์ œ์–ด์— ๋Œ€ํ•ด์„œ ๋ฉด์ ‘ ๋•Œ ๋ถ€์กฑํ•จ์„ ๋Š๊ผˆ๋Š”๋ฐ, ํ•™์Šตํ•˜๋ฉด ํ•  ์ˆ˜๋ก ๋ฏผ๋งํ•จ์€ ์ปค์ ธ๋งŒ ๊ฐ„๋‹ค..

Findings (๋ฐฐ์šด ์ )

java bean validation ํ‘œ์ค€์˜ ๊ฐœ๋…, ์ด๋ฅผ ์• ๋„ˆํ…Œ์ด์…˜์œผ๋กœ ์ถ”๊ฐ€ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ํ•™์Šตํ–ˆ๋‹ค.

lombok์œผ๋กœ ๊ฐ์ฒด์˜ Constructor, Getter, Setter ๋“ฑ ๋ณด์ผ๋Ÿฌ ํ”Œ๋ ˆ์ดํŠธ๋ฅผ ์ œ๊ฑฐํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ํ•™์Šตํ–ˆ๋‹ค.

Object Mapper์ธ dozer ์‚ฌ์šฉ๋ฒ•์„ ํ•™์Šตํ–ˆ๋‹ค.

๋™์‹œ์„ฑ ์ œ์–ด์— ๋Œ€ํ•ด์„œ ํ•™์Šตํ–ˆ๋‹ค. ์ƒ์šฉ web์—์„œ ๋™์‹œ์„ฑ ์ œ์–ด๋ฅผ ํ•œ๋‹ค๋ฉด, ์„ฑ๋Šฅ ์ €ํ•˜์™€ ๋ฐ๋“œ๋ฝ์˜ ์œ„ํ—˜, Read-Write ๋น„์œจ์„ ๊ณ ๋ คํ•˜์—ฌ ์™ ๋งŒํ•˜๋ฉด locking๋ณด๋‹ค๋Š” Timestamp Ordering์ด๋‚˜ ๋‚™๊ด€์  ๊ฒ€์ฆ๊ธฐ๋ฒ•์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์ ์ ˆํ•˜๋‹ค๋Š” ๋‚˜๋ฆ„์˜ ๊ฒฐ๋ก ์„ ์–ป์—ˆ๋‹ค. ๋‚ด๊ฐ€ ์ด์ „์— ํ–ˆ๋˜ ๊ฒŒ์ž„ ์‚ฌ์ดํŠธ ํ”„๋กœ์ ํŠธ์—์„œ๋Š” ๊ฒŒ์ž„์— ๋™์‹œ ์ ‘์†ํ•  ๋•Œ lock์„ ์‚ฌ์šฉํ–ˆ์—ˆ๋Š”๋ฐ, ์˜ ์ข‹์ง€ ์•Š์€ ๋ฐฉ๋ฒ•์ด์—ˆ๋˜ ์…ˆ์ด๋‹ค.

lock์— ๋Œ€ํ•ด์„œ๋„ ์–ด์„คํ”„๊ฒŒ ์•Œ๊ณ  ์žˆ๋Š” ๊ฒƒ์„ ๋Š๊ปด์„œ ์žฌํ•™์Šตํ–ˆ๋‹ค.

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

๋‚˜๋Š” ์„ฑ์žฅํ•œ๋‹ค-์‹คํŒจํ–ˆ๋˜ ๋ถ€๋ถ„์€ ๋ฐ˜๋ณตํ•˜์ง€ ์•Š๊ณ , ๋ชฐ๋ž๋˜ ๋ถ€๋ถ„์€ ์„ค๋ช…ํ•  ์ˆ˜ ์žˆ๋„๋ก ์ดํ•ดํ•œ๋‹ค.

Last updated