์Šคํ”„๋ง

[์Šคํ”„๋ง] DTO๋ฅผ ์™œ ์“ธ๊นŒ?

HHRR 2024. 1. 23. 18:17

Spring ํ”„๋กœ์ ํŠธ๋ฅผ ํ•˜๋ฉด์„œ DTO๋ฅผ ์™œ ์“ฐ๋Š”์ง€ ์˜๋ฌธ์ด ๋“ค์—ˆ๋‹ค. ์‚ฌ์‹ค DTO๊ฐ€ ์ •ํ™•ํžˆ ์™€๋‹ฟ์ง€๋„ ์•Š์•„์„œ ์ •๋ฆฌ๋ฅผ ํ•ด๋ณด๋ ค๊ณ  ํ•œ๋‹ค.

 

1. DTO(Data Transer Object)

DTO๋Š” ํ”„๋กœ์„ธ์Šค ๊ฐ„์— ๋ฐ์ดํ„ฐ๋ฅผ ์ „๋‹ฌํ•˜๋Š” ์šฉ๋„์˜ ๊ฐ์ฒด์ด๋‹ค. ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์„ ํฌํ•จํ•˜์ง€ ์•Š๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ์ „๋‹ฌํ•˜๊ธฐ ์œ„ํ•œ ๋‹จ์ˆœํ•œ ๊ฐ์ฒด์ด๋‹ค.

  • ํด๋ผ์ด์–ธํŠธ์™€ Controller ์‚ฌ์ด์—์„œ๋Š” DTO๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์ „๋‹ฌ๋ฐ›๊ณ 
  • ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋‚ด๋ถ€ (Service, Repository..)์—์„œ๋Š” Domain(Entity ๋˜๋Š” Model)์„ ํ†ตํ•ด ๋ฐ์ดํ„ฐ๋ฅผ ์ „๋‹ฌํ•œ๋‹ค.

Service, Repository์—์„œ๋Š” ๊ฐ์ฒด๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์ „๋‹ฌํ•˜๊ณ ,

Controller์—์„œ DTO ๊ฐ์ฒด๋กœ ๋งคํ•‘ํ•ด์„œ ํด๋ผ์ด์–ธํŠธ์— ๋ฆฌํ„ดํ•œ๋‹ค.

 

2. DTO๋ž‘ Domain ๋ถ„๋ฆฌํ•˜๋Š” ์ด์œ 

2-1. ๊ด€์‹ฌ์‚ฌ์˜ ๋ถ„๋ฆฌ (Separation of Concerns, SoC)

MVC ์‚ฌ์šฉํ•˜๋Š” ์ด์œ ๋Š” ๊ฐ๊ฐ์ด ์ž์‹ ์˜ ์—ญํ• ์„ ์ˆ˜ํ–‰ํ•˜๋ฉฐ ์œ ์ง€๋ณด์ˆ˜๊ฐ€ ํŽธ๋ฆฌํ•˜๊ฒŒ ๋•Œ๋ฌธ์— ์‚ฌ์šฉํ•œ๋‹ค.

Controller๋Š” ์ค‘๊ฐ„๋‹ค๋ฆฌ ์—ญํ• ๋กœ ํด๋ผ์ด์–ธํŠธ์™€ ์š”์ฒญ/์‘๋‹ต ํ•˜๋Š” ์ฑ…์ž„์ด ์žˆ๊ณ ,

Model์€ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์—์„œ ๋ฐ›์•„์˜จ ๋ฐ์ดํ„ฐ๋ฅผ ๋‹ค๋ฃจ๋Š” ์ฑ…์ž„์ด ์žˆ๋‹ค.

OOP ์„ธ์ƒ์—์„œ๋Š” ๊ด€์‹ฌ์‚ฌ์˜ ๋ถ„๋ฆฌ๋ฅผ ํ†ตํ•ด ๋ณต์žกํ•œ ์‹œ์Šคํ…œ์„ ํšจ์œจ์ ์œผ๋กœ ์ž‘๋™ํ•˜๊ฒŒ ํ•œ๋‹ค. ์ฆ‰, ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์— ๊ฐ™์€ ์˜ํ–ฅ์„ ๋ฏธ์น˜๋Š” ์ฝ”๋“œ๋“ค๋ผ๋ฆฌ ๋ถ„๋ฆฌํ•œ๋‹ค.

 

2-2. ๊ด€์‹ฌ์‚ฌ์˜ ์ˆ˜ํ‰์  ๋ถ„๋ฆฌ

  • Presentation Layer: ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ๊ธฐ๋Šฅ๊ณผ ๋ฐ์ดํ„ฐ๋ฅผ ์‚ฌ์šฉ์ž์—๊ฒŒ ์ œ๊ณต
  • Business Layer: ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ํ•ต์‹ฌ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง ๋ฐ ๋‚˜๋จธ์ง€ ๋‘ ๊ณ„์ธต ๊ฐ„์— ์ „๋‹ฌ๋˜๋Š” ๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌ
  • Data Access Layer: ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์™€ ์ƒํ˜ธ ์ž‘์šฉํ•˜๋Š” ์—ญํ• 

์—ฌ๊ธฐ์„œ DTO๋Š” ์˜ค์ง ๋ฐ์ดํ„ฐ๋ฅผ ์ „๋‹ฌํ•˜๋Š” ๋ชฉ์ ์œผ๋กœ Presentation Layer์— ์†ํ•œ๋‹ค.

๊ทธ๋ฆฌ๊ณ  Domain์€ ๋น„์ฆˆ๋‹ˆ์Šค๋กœ์ง์„ ๋‹ด์€ Business Layer์—์„œ ์—ญํ• ์„ ์ˆ˜ํ–‰ํ•œ๋‹ค.

๋‘ ๊ฐ์ฒด๋ฅผ ๋ถ„๋ฆฌํ•˜์ง€ ์•Š๋Š”๋‹ค๋ฉด Presentation๊ณผ Business๊ฐ€ ํ˜ผํ•ฉ๋œ ํด๋ž˜์Šค๊ฐ€ ํƒ„์ƒํ•˜๊ฒŒ๋˜๋Š”๋ฐ ์ข‹์€ OOP๋ฅผ ์œ„ํ•ด์„œ๋Š” ํ•˜๋‚˜์˜ ๊ฐ์ฒด์—๋Š” ํ•˜๋‚˜์˜ ์ฑ…์ž„๋งŒ ์กด์žฌํ•ด์•ผ ํ•œ๋‹ค(๋ณ€๊ฒฝ์ด ์žˆ์„ ๋•Œ ํŒŒ๊ธ‰ ํšจ๊ณผ๋ฅผ ์ตœ์†Œํ™”ํ•˜๊ธฐ ์œ„ํ•จ) ๊ทธ๋ž˜์„œ DTO๋ž‘ Domain์„ ๋ถ„๋ฆฌํ•ด์•ผํ•œ๋‹ค.

 

DTO ์˜ ์ฃผ์š” ๋ชฉ์ ์€ ํ•œ ๋ฒˆ์˜ ํ˜ธ์ถœ๋กœ ์—ฌ๋Ÿฌ ๋งค๊ฐœ ๋ณ€์ˆ˜๋ฅผ ์ผ๊ด„ ์ฒ˜๋ฆฌํ•ด์„œ ์„œ๋ฒ„์˜ ์™•๋ณต์„ ์ค„์ด๋Š” ๊ฒƒ!

 

 

์ถœ์ฒ˜
https://e-una.tistory.com/72#1.2.1