DTO์™€ Domain ์ฐจ์ด

์œ ๋‚˜๋ž‘ยท2024๋…„ 10์›” 17์ผ

์ฝ”๋”ฉ์˜จ X SeSAC

๋ชฉ๋ก ๋ณด๊ธฐ
30/30
post-thumbnail

spring boot์™€ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์—ฐ๊ฒฐ ์ฝ”๋“œ ํ•™์Šตํ•˜๋ฉด์„œ DTO์™€ Domain์˜ ๊ฐœ๋…์„ ๋ฐฐ์šฐ๊ฒŒ ๋˜์—ˆ๋‹ค. ๋‘ ์ฝ”๋“œ๊ฐ€ ๋น„์Šทํ•ด๋ณด์ด๋Š”๋ฐ ํ•˜๋Š” ์—ญํ• ์ด ๋‹ค๋ฅด๋‹ค. ํ—ท๊ฐˆ๋ฆฌ๋Š” ๋ถ€๋ถ„์ด ์žˆ์–ด ์ •๋ฆฌํ•ด๋ณด๋ ค๊ณ  ํ•œ๋‹ค!!

Layered Architecture

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

1. Presentation Layer

  • ์Šคํ”„๋ง ๋ถ€ํŠธ์˜ controller ํŒจํ‚ค์ง€์— ํ•ด๋‹น
  • HTTP ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•˜๊ณ  ์‘๋‹ต์„ ๋ฐ˜ํ™˜ -> ํด๋ผ์ด์–ธํŠธ ์š”์ฒญ ์ˆ˜์‹  ๋ฐ ํŒŒ๋ผ๋ฏธํ„ฐ ์ถ”์ถœ
  1. Business Layer
  • ์Šคํ”„๋ง๋ถ€ํŠธ์˜ service ํŒจํ‚ค์ง€์— ํ•ด๋‹น
  • ๋ณต์žกํ•œ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง ๊ตฌํ˜„
  • DTO, Domain ๊ฐ์ฒด๊ฐ„ ๋ณ€ํ™˜ ๋กœ์ง ๊ตฌํ˜„
  1. Persistence Layer
  • ์Šคํ”„๋ง๋ถ€ํŠธ์˜ repository ํŒจํ‚ค์ง€ ํ•ด๋‹น(์ธํ„ฐํŽ˜์ด์Šค)
  • ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์™€์˜ ์ƒํ˜ธ์ž‘์šฉ ๋ฐ ๋ฐ์ดํ„ฐ ์ ‘๊ทผ ๋กœ์ง ๊ตฌํ˜„ -> CRUD ์—ฐ์‚ฐ ์ˆ˜ํ–‰
  1. Database Layer
  • ์‹ค์ œ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์‹œ์Šคํ…œ

DTO์™€ Domain์˜ ์ฐจ์ด

DTO๋ž€?

  • Data Transfer Object๋กœ ๊ณ„์ธต ๊ฐ„์˜ ๋ฐ์ดํ„ฐ ๊ตํ™˜์„ ์œ„ํ•œ ์ž๋ฐ” ๊ฐ์ฒด.(= Java Beans)
  • DB์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ์–ป์–ด service๋‚˜ controller๋กœ ๋ณด๋‚ผ ๋•Œ ์‚ฌ์šฉํ•˜๋Š” ๊ฐ์ฒด. -> ๊ณ„์ธต ๊ฐ„์˜ ๋ฐ์ดํ„ฐ ๊ตํ™˜์„ ์œ„ํ•ด ์‚ฌ์šฉ
    ex) View <- DTO -> Controller <- DTO -> Service
  • View์™€ ํ†ต์‹ ํ•˜๊ธฐ ์œ„ํ•œ ํด๋ž˜์Šค.
  • ๋น„๋™๊ธฐ ์ฒ˜๋ฆฌ๋ฅผ ์œ„ํ•ด ์‚ฌ์šฉ

Domain์ด๋ž€?(= Entity)

  • DB ํ…Œ์ด๋ธ”์— ์กด์žฌํ•˜๋Š” Column๋“ค์„ ํ•„๋“œ๋กœ ๊ฐ€์ง€๋Š” ๊ฐ์ฒด. -> DB ํ…Œ์ด๋ธ”๊ณผ 1๋Œ€ 1 ๋Œ€์‘
  • ํ…Œ์ด๋ธ”๊ณผ ๋งํฌ๋  ํด๋ž˜์Šค.

DTO์™€ Domain๋ฅผ ๋ถ„๋ฆฌํ•˜๋Š” ์ด์œ 

  • Domain์€ ํ…Œ์ด๋ธ” ๋งคํ•‘ ํด๋ž˜์Šค๋กœ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์ด ์ƒ๊ธฐ๋ฉด ๋‹ค๋ฅธ ์—ฌ๋Ÿฌ ํด๋ž˜์Šค์— ์˜ํ–ฅ์„ ์ฃผ๊ธฐ ๋•Œ๋ฌธ
  • DTO์€ request/reponse ์— ๋Œ€ํ•œ ๋ถ€๋ถ„์ด๋‚˜ View ๊ด€๋ จ Presentation Logic์„ ๊ฐ€์ง€๋Š” ์ž์ฃผ ๋ณ€๊ฒฝ๋˜๋Š” ํด๋ž˜์Šค์ด๋‹ค.
  • ์ฆ‰, DTO๋Š” Domain ์„ ๋ณต์‚ฌํ•ด์™€์„œ Presentation Logic์„ ์ถ”๊ฐ€ํ•˜๊ฑฐ๋‚˜ DTO ์ƒ์—์„œ๋งŒ ํ•„์š”ํ•œ ํ•„๋“œ๋ฅผ ์ถ”๊ฐ€, ์‚ญ์ œํ•œ ํด๋ž˜์Šค ๊ตฌ์กฐ์ด๋‹ค.

๊ฒฐ๋ก 

Layed Architecture๋Š” ๊ฐ ๊ณ„์ธต ๊ฐ„ ์ฑ…์ž„์ด ๋ช…ํ™•ํžˆ ๋ถ„๋ฆฌ๋˜์–ด์žˆ๋‹ค. ์ด ํŠน์ง•์œผ๋กœ ํด๋ผ์ด์–ธํŠธ์™€์˜ ํ†ต์‹ ์ด๋‚˜ ์„œ๋น„์Šค ๊ฐ„ ๋ฐ์ดํ„ฐ ์ „์†ก์„ ๋‹ด๋‹นํ•˜๋Š” DTO, ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์™€ ๋งคํ•‘๋˜๋Š” Domain(Entity)์„ ๋ถ„๋ฆฌํ•˜์—ฌ ์‚ฌ์šฉ!!!

๋งˆ๋ฌด๋ฆฌํ•˜๋ฉฐ

๋‘ ๊ฐ์ฒด๊ฐ€ ๋น„์Šทํ•ด๋ณด์—ฌ ๋ถ„๋ฆฌํ•ด์„œ ์‚ฌ์šฉํ•ด์•ผํ•˜๋‚˜? ์‹ถ์—ˆ๋Š”๋ฐ ๊ฐ ๊ณ„์ธต์˜ ์ฑ…์ž„์„ ๋ถ„๋ฆฌํ•˜๊ธฐ ์œ„ํ•˜์—ฌ ์‚ฌ์šฉํ•ด์•ผํ•œ๋‹ค๋Š” ๊ฒƒ์„ ๊นจ๋‹ฌ์•˜๋‹ค. Domain์˜ ๋ณ€๊ฒฝ์ด ์™ธ๋ถ€์— ์˜ํ–ฅ์„ ๋ฏธ์น˜์ง€ ์•Š๊ณ  DTO๋Š” ํ•„์š”์— ๋”ฐ๋ผ ์œ ์—ฐํ•˜๊ฒŒ ์ˆ˜์ •ํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ์—ญํ• ๋„ ํ™•์‹คํžˆ ์ •๋ฆฌํ•˜๊ฒŒ ๋˜์—ˆ๋‹ค. ๋-- (์ž๋ฐ” ๊ฐœ๋… ์ฐธ ์–ด๋ ต๋‹ค...)

์ฐธ๊ณ  ๋ฐ ์ถœ์ฒ˜
1. [์ƒˆ์‹น X ์ฝ”๋”ฉ์˜จ] ์˜๋“ฑํฌ ์บ ํผ์Šค 6๊ธฐ ์ž…๋ฌธ์ž๋„ ๊ฐ€๋Šฅํ•œ ์›น ๊ฐœ๋ฐœ์ž ๋ถ€ํŠธ์บ ํ”„ ๊ฐ•์˜ ๊ต์•ˆ
2. https://youwjune.tistory.com/39
3. https://velog.io/@linger0310/DDD
4. https://silverline.tistory.com/134

0๊ฐœ์˜ ๋Œ“๊ธ€