DTO, DAO, VO

์œค๊ฒฝยท2021๋…„ 10์›” 1์ผ
0

์ง€์‹

๋ชฉ๋ก ๋ณด๊ธฐ
2/7
post-custom-banner


์˜ค๋Š˜์€ ์˜ˆ์ „์— ์ž ๊น ๋ง›๋ดค๋˜ DTO, DAO, VO์— ๋Œ€ํ•ด ์ •๋ฆฌํ•˜์ž.


DTO

: Data Transfer Object

ํ”„๋กœ์„ธ์Šค ๊ฐ„ ๋ฐ์ดํ„ฐ๋ฅผ ์ „๋‹ฌํ•˜๋Š” ๊ฐ์ฒด๋ฅผ ์ด๋ฅธ๋‹ค.

๐Ÿ“Œ ์‚ฌ์šฉ ๋™๊ธฐ

ํ”„๋กœ์„ธ์Šค ๊ฐ„ ํ†ต์‹ ์€ ์ผ๋ฐ˜์ ์œผ๋กœ ์›๊ฒฉ ์ธํ„ฐํŽ˜์ด์Šค (ex. ์›น ์„œ๋น„์Šค)๋กœ ์žฌ์ •๋ ฌํ•˜๋ฉฐ ์ด๋ฃจ์–ด์ง€๋Š”๋ฐ ์ด๋•Œ ๊ฐ ํ˜ธ์ถœ ๋น„์šฉ์ด ๋งŽ์ด ๋“ ๋‹ค.
ํด๋ผ์ด์–ธํŠธ์™€ ์„œ๋ฒ„ ๊ฐ„ ์™•๋ณต ์‹œ๊ฐ„์—์„œ ํ˜ธ์ถœ ๋น„์šฉ์ด ์ปค์ง€๊ธฐ ๋•Œ๋ฌธ์— ํ˜ธ์ถœ ์ˆ˜๋ฅผ ์ค„์ด๊ธฐ ์œ„ํ•ด ์—ฌ๋Ÿฌ ํ˜ธ์ถœ์— ์˜ํ•ด ์ „์†ก๋˜๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ์ถ•์ ํ•˜๋ฉฐ ์˜ค์ง ํ•˜๋‚˜์˜ ํ˜ธ์ถœ๋งŒ์œผ๋กœ ์„œ๋น„์Šค๋˜๋Š” DTO ๊ฐ์ฒด๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.

์•„๋ฌดํŠผ DTO๋Š” ๊ณ„์ธต ๊ฐ„ ๋ฐ์ดํ„ฐ ๊ตํ™˜์„ ์œ„ํ•œ ๊ฐ์ฒด๋ผ๋Š” ๊ฒƒ์ธ๋ฐ ์ด๋•Œ ๊ณ„์ธต์€ controller, view, business, persistent ๊ณ„์ธต์„ ๋งํ•œ๋‹ค.

๋Œ€ํ‘œ์ ์ธ DTO๋กœ๋Š” ํผ ๋ฐ์ดํ„ฐ๋นˆ, ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ํ…Œ์ด๋ธ”๋นˆ ๋“ฑ์ด ์žˆ์œผ๋ฉฐ ๊ฐ ํผ ์š”์†Œ๋‚˜ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๋ ˆ์ฝ”๋“œ์˜ ๋ฐ์ดํ„ฐ๋ฅผ ๋งคํ•‘ํ•˜๊ธฐ ์œ„ํ•œ ๋ฐ์ดํ„ฐ ๊ฐ์ฒด์ด๋‹ค.

๐Ÿ“Œ ์ฐธ๊ณ ๋กœ ์ผ๋ฐ˜์ ์ธ DTO๋Š” ๋กœ์ง์„ ๊ฐ€์ง€๊ณ  ์žˆ์ง€ ์•Š๋‹ค. ์ˆœ์ˆ˜ํ•œ ๋ฐ์ดํ„ฐ ๊ฐ์ฒด์ด๋ฉฐ ์†์„ฑ๊ณผ ๊ทธ ์†์„ฑ์— ์ ‘๊ทผํ•˜๊ธฐ ์œ„ํ•œ getter, setter ๋ฉ”์†Œ๋“œ๋งŒ ๊ฐ€์ง„ ํด๋ž˜์Šค๋ฅผ ๋งํ•œ๋‹ค.
์—ฌ๊ธฐ์— ์ถ”๊ฐ€์ ์œผ๋กœ toString(), equals() ๋“ฑ์˜ Object ํด๋ž˜์Šค ๋ฉ”์†Œ๋“œ๋ฅผ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ๋‹ค.

ํ”ํžˆ VO์™€ ํ˜ผ์šฉํ•ด ์‚ฌ์šฉํ•˜๋Š”๋ฐ ๊ทธ๋Ÿผ VO๋Š” ๋ฌด์—‡์ผ๊นŒ?


VO

: Value Object

๋„๋ฉ”์ธ์—์„œ ํ•œ ๊ฐœ ๋˜๋Š” ๊ทธ ์ด์ƒ์˜ ์†์„ฑ์„ ๋ฌถ์–ด ํŠน์ • ๊ฐ’์„ ๋‚˜ํƒ€๋‚ด๋Š” ๊ฐ์ฒด๋ฅผ ์ด๋ฅธ๋‹ค.

ํฐ ํŠน์ง•์œผ๋กœ๋Š” setter ์ฆ‰, ์ˆ˜์ •์ž๊ฐ€ ์—†์–ด ๋ถˆ๋ณ€ ๊ฐ์ฒด์ด๋‹ค. (read only)

DTO์™€ VO์˜ ์ฐจ์ด์ 

์ฃผ ๋ชฉ์ ์€ ๊ฐ™๋‹ค. ํ•˜์ง€๋งŒ,

  • VO๋Š” DTO์™€ ๋™์ผํ•œ ๊ฐœ๋…์ด์ง€๋งŒ read only ์†์„ฑ์„ ๊ฐ€์ง„๋‹ค.
    (์ฆ‰, ๊ฐ’์ด ๋ณ€๊ฒฝ๋˜์ง€ ์•Š๋Š”๋‹ค. ๋ฐ˜๋ฉด DTO๋Š” setter๋ฅผ ๊ฐ€์ ธ ๊ฐ’์ด ๋ณ€๊ฒฝ๋  ์ˆ˜ ์žˆ๋‹ค.)
  • VO๋Š” ํŠน์ •ํ•œ ๋น„์ฆˆ๋‹ˆ์Šค ๊ฐ’์„ ๋‹ด๋Š” ๊ฐ์ฒด์ด๊ณ , DTO๋Š” ๊ณ„์ธต ๊ฐ„ ํ†ต์‹  ์šฉ๋„๋กœ ์˜ค๊ณ ๊ฐ€๋Š” ๊ฐ์ฒด์ด๋‹ค.

DAO

: Data Access Object

์‹ค์งˆ์ ์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์ ‘๊ทผํ•˜๋Š” ๊ฐ์ฒด๋ฅผ ์ด๋ฅธ๋‹ค.
ํšจ์œจ์ ์ธ ์ปค๋„ฅ์…˜ ๊ด€๋ฆฌ์™€ ๋ณด์•ˆ์„ฑ๋•Œ๋ฌธ์— ์‚ฌ์šฉํ•œ๋‹ค.

๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ ๋ฐ์ดํ„ฐ์— ์ ‘๊ทผํ•˜๋Š”๋ฐ DAO๋Š” ์ €์ˆ˜์ค€ logic, ๊ณ ๊ธ‰ ๋น„์ฆˆ๋‹ˆ์Šค logic์„ ๋ถ„๋ฆฌํ•ด ์ถ”ํ›„ ์ˆ˜์ •์‹œ domain logic ๋Œ€์‹  DAO๋ฅผ ์ˆ˜์ •ํ•˜๋ฉด ๋œ๋‹ค.

๐Ÿ“Œ ์‚ฌ์šฉ ๋™๊ธฐ

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

ConnectionPool: ์ปค๋„ฅ์…˜ ๊ฐ์ฒด๋ฅผ ๋ฏธ๋ฆฌ ๋งŒ๋“ค์–ด๋‘๊ณ  ๊ฐ€์ ธ๋‹ค ์“ฐ๊ณ  ์‚ฌ์šฉ ์™„๋ฃŒ์‹œ ๋ฐ˜ํ™˜ํ•˜๋Š” ๊ฒƒ

ConnectionPool์€ ์ปค๋„ฅ์…˜์„ ๋˜ ๋งŒ๋“œ๋Š” ์˜ค๋ฒ„ํ—ค๋“œ๋ฅผ ํšจ์œจ์ ์œผ๋กœ ํ•˜๊ธฐ ์œ„ํ•ด ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์ ‘์†ํ•˜๋Š” ๊ฐ์ฒด๋ฅผ ์ „์šฉ์œผ๋กœ ํ•˜๋‚˜๋งŒ ๋งŒ๋“ค๊ณ , ๋ชจ๋“  ํŽ˜์ด์ง€์—์„œ ๊ทธ ๊ฐ์ฒด๋ฅผ ํ˜ธ์ถœํ•ด ์‚ฌ์šฉํ•˜๋Š”๋ฐ ์ด๋ ‡๊ฒŒ ์ปค๋„ฅ์…˜์„ ํ•˜๋‚˜๋งŒ ๊ฐ€์ ธ์˜ค๊ณ  ๊ทธ ์ปค๋„ฅ์…˜์„ ๊ฐ€์ ธ์˜จ ๊ฐ์ฒด๊ฐ€ ๋ชจ๋“  ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์—ฐ๊ฒฐ์„ ์ˆ˜ํ–‰ํ•˜๋Š” ๊ฒƒ์ด DAO ๊ฐ์ฒด์ด๋‹ค.

์ฆ‰, DAO๋Š” DB๋ฅผ ์‚ฌ์šฉํ•ด ๋ฐ์ดํ„ฐ๋ฅผ ์กฐํšŒํ•˜๊ฑฐ๋‚˜ ์กฐ์ž‘ํ•˜๋Š” ๊ธฐ๋Šฅ์„ ์ „๋‹ดํ•˜๋„๋ก ๋งŒ๋“  ์˜ค๋ธŒ์ ํŠธ์ด๋‹ค.

์‚ฌ์šฉ์ž๋Š” ์ž์‹ ์ด ํ•„์š”ํ•œ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ DAO์—๊ฒŒ ๋˜์ง€๊ณ  DAO๋Š” ์ด ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ตฌํ˜„ํ•œ ๊ฐ์ฒด๋ฅผ ์‚ฌ์šฉ์ž์—๊ฒŒ ํŽธ๋ฆฌํ•˜๊ฒŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ๋ฐ˜ํ™˜ํ•ด์ค€๋‹ค.

DB์— ๋Œ€ํ•œ ์ ‘๊ทผ์„ DAO๊ฐ€ ๋‹ด๋‹นํ•˜๋„๋ก ํ•˜์—ฌ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์•ก์„ธ์Šค๋ฅผ DAO์—์„œ๋งŒ ํ•˜๊ฒŒ๋˜๋ฉด ๋‹ค์ˆ˜์˜ ์›๊ฒฉ ํ˜ธ์ถœ์„ ํ†ตํ•œ ์˜ค๋ฒ„ํ—ค๋“œ๋ฅผ VO๋‚˜ DTO๋ฅผ ํ†ตํ•ด ์ค„์ผ ์ˆ˜ ์žˆ๊ณ  ๋‹ค์ˆ˜์˜ DB ํ˜ธ์ถœ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ๋‹ค. ๋˜ํ•œ, ๋‹จ์ˆœํžˆ ์ฝ๊ธฐ๋งŒ ํ•˜๋Š” ์—ฐ์‚ฐ์ด๋ฏ€๋กœ ํŠธ๋žœ์žญ์…˜ ๊ฐ„ ์˜ค๋ฒ„ํ—ค๋“œ๋ฅผ ๊ฐ์†Œ์‹œํ‚ฌ ์ˆ˜ ์žˆ๋‹ค.


profile
๊ฐœ๋ฐœ ๋ฐ”๋ณด ์ด์‚ฌ ์ค‘
post-custom-banner

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