DTO?

  • ํ”„๋กœ์„ธ์Šค ๊ฐ„ ํ†ต์‹ (IPC, Inter-Process Communication)์— ์‚ฌ์šฉ๋œ๋‹ค.

    • IPC๋ž€ ? ์„œ๋กœ ๋‹ค๋ฅธ ํ”„๋กœ์„ธ์Šค๋‚˜ ๋‹ค๋ฅธ ํ”„๋กœ๊ทธ๋žจ์ด ์›๊ฒฉ์œผ๋กœ ํ†ต์‹ ํ•˜๋Š” ๋ฐฉ์‹์ด๋‹ค. ์š”์ฆ˜์—๋Š” B/E์™€ F/E Tier๊ฐ€ ๋งŽ๊ธฐ ๋•Œ๋ฌธ์— ํ•„์ˆ˜์ ์ธ ๊ตฌ์กฐ์ด๋‹ค.

      • File ํ˜•ํƒœ์˜ ์ ‘๊ทผ์ด ๊ธฐ๋ณธ์ ์œผ๋กœ ๊ฐ€๋Šฅํ•˜์ง€๋งŒ ์„œ๋กœ ๊ฐ™์€ ํŒŒ์ผ์„ ์ˆ˜์ •ํ•˜๊ณ  ์ฝ๋Š” ๋™์‹œ์„ฑ ๋ฌธ์ œ ๋“ฑ์œผ๋กœ ์ธํ•ด ํ™œ์šฉ์ด ์–ด๋ ค์šธ ์ˆ˜ ์žˆ๋‹ค.

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

    • HTTP์™€ REST๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด Resource์— ๋Œ€ํ•œ CRUD๋ฅผ ์ •๋ฆฌํ•˜๊ณ  ๊ณต์œ ํ•ด์•ผ ํ•œ๋‹ค.

    • JAVA์—์„œ๋Š” RMI๋ผ๋Š” ๊ธฐ์ˆ ์„ ํ†ตํ•ด์„œ RPC๋ฅผ ์ œ๊ณตํ•œ๋‹ค.

      • RPC : ์›๊ฒฉ ํ”„๋กœ์‹œ์ € ํ˜ธ์ถœ์ด๋ผ๋Š” ์˜๋ฏธ(wikipedia)์ธ๋ฐ, ๊ฑฐ์น ๊ฒŒ ๋งํ•ด์„œ ์›๊ฒฉ์— ์žˆ๋Š” ํ•จ์ˆ˜๋‚˜ ๋ฉ”์„œ๋“œ๋ฅผ ํ˜ธ์ถœํ•˜๋Š” ํ†ต์‹  ๊ธฐ์ˆ ์ด๋‹ค.

      • ์š”์ฆ˜์—๋Š” ์ž˜ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š”๋‹ค๊ณ  ํ•œ๋‹ค.

  • REST์—๋Š” DTO๋ฅผ ํ†ตํ•ด ํ‘œํ˜„(representation)์„ ๋‹ค๋ฃฌ๋‹ค. ํ‘œํ˜„์ด๋ž€ ์ƒํƒœ๋ฅผ ๊ฐ€์ง„ ๋ฐ์ดํ„ฐ๋ผ๊ณ  ์ดํ•ดํ•˜๋ฉด ๋˜๊ฒ ๋‹ค. ์ด ๋ฐ์ดํ„ฐ๋ฅผ ๋‹ด๋Š” ๊ฒƒ ์™ธ์—๋Š” ๋ณ„๋‹ค๋ฅธ ๊ธฐ๋Šฅ์ด ์—†๊ธฐ ๋•Œ๋ฌธ์— ๊ฐ์ฒด๋กœ์„œ์˜ ์—ญํ• ์„ ํ•˜์ง€๋Š” ์•Š๋Š”๋‹ค๊ณ  ๋ณผ ์ˆ˜ ์žˆ๋‹ค.

  • โ€œ๋ฌด๊ธฐ๋ ฅํ•œ ๋„๋ฉ”์ธ ๋ชจ๋ธโ€(Anemic Domain Model) ์ด๋ž€ ๊ทธ๋ฆฌ๊ณ  ์•ˆํ‹ฐ ํŒจํ„ด์ธ ์ด์œ 

    • Martin Fowler : "์™œ ์ด๋ ‡๊ฒŒ Anemic Domain Model์„ ๋งŽ์ด ์“ฐ๋Š”์ง€ ๋ชจ๋ฅด๊ฒ ๋‹ค. ์ด๊ฑด ์•ˆํ‹ฐํŒจํ„ด์ด๋‹ค. J2EE's Entity Bean์ด ์›์ธ์ด์ง€ ์•Š์„๊นŒ?"

    • ๊ฐ์ฒด์ง€ํ–ฅ์—์„œ๋Š” ๊ฐ์ฒด๋Š” ์„œ๋กœ ํ˜‘๋ ฅํ•˜๊ณ  ์ฑ…์ž„์ด ์žˆ์ง€๋งŒ, ๊ทธ๋Ÿฐ๊ฒŒ ํ•˜๋‚˜๋„ ์—†์ด ๋‹จ์ˆœํžˆ ๋ฐ์ดํ„ฐ ๋ฉ์–ด๋ฆฌ์ด๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

  • ๋‹จ์ˆœํ•˜๊ฒŒ setter์™€ getter๋กœ ์ด๋ฃจ์–ด์ ธ ์žˆ๋‹ค. ์ด ๋ฉ”์†Œ๋“œ๋“ค์€ public์œผ๋กœ ๋ผ ์žˆ๋‹ค.

  • ์ด setter/getter ํ˜•ํƒœ๋Š” JavaBeans์—์„œ ์œ ๋ž˜๋œ ํ˜•ํƒœ์— ๊ฐ€๊น๋‹ค.๊ทธ๋ž˜์„œ ๋ถ€๋ฅผ๋•Œ JavaBeans ํ˜น์€ ๊ทธ๋ƒฅ Beans๋ผ๊ณ  ๋ถ€๋ฅด๊ธฐ๋„ ํ•œ๋‹ค. Spring Beans์™€๋Š” ๋‹ค๋ฅด๋‹ค.

  • ์ž๋ฐ”๋นˆ์ฆˆ(JavaBeans)์™€ ๊ด€๋ จ์ด ์žˆ๋Š” DTO

    • ์ž๋ฐ”๋กœ ์ž‘์„ฑ๋œ ์†Œํ”„ํŠธ์›จ์–ด ์ปดํฌ๋„ŒํŠธ์ด๋‹ค. ๊ณผ๊ฑฐ์— ์ฌ ๋งˆ์ดํฌ๋กœ์‹œ์Šคํ…œ์ฆˆ์— ์†Œ์œ ๊ถŒ์ด ์žˆ๋‹ค๊ฐ€, ์ตœ๊ทผ ์˜ค๋ผํด์— ์ธ์ˆ˜๋˜์—ˆ๋‹ค.

    • ์ž๋ฐ”๋นˆ์ฆˆ์˜ ๊ด€๋ก€

      • ์ž๋ฐ”๋นˆ์ฆˆ ํด๋ž˜์Šค๋กœ์„œ ์ž‘๋™ํ•˜๋ ค๋ฉด ๋ช…๋ช…๋ฒ•, ์ƒ์„ฑ๋ฒ• ํ–‰๋™๊ณผ ๊ด€๋ จ๋œ ๊ด€๋ก€๋ฅผ ๋”ฐ๋ผ์•ผ ํ•˜๋Š”๋ฐ, ์ด ๊ด€๋ก€๋ฅผ ํ†ตํ•ด์„œ ํด๋ž˜์Šค์˜ ์‚ฌ์šฉ๊ณผ ์žฌ์‚ฌ์šฉ, ์žฌ๋ฐฐ์น˜ ๋“ฑ์˜ ์‚ฌ์šฉ์„ฑ์„ ๋†’์ธ๋‹ค.

      • ํด๋ž˜์Šค๋Š” ์ง๋ ฌํ™”๋˜์–ด์•ผ ํ•œ๋‹ค.

      • ํด๋ž˜์Šค๋Š” ํŒŒ๋ผ๋ฏธํ„ฐ๋ฅผ ๋ฐ›์ง€ ์•Š๋Š” ๊ธฐ๋ณธ ์ƒ์„ฑ์ž๊ฐ€ ์žˆ์–ด์•ผ ํ•œ๋‹ค.

      • getter , setter ๋ฉ”์„œ๋“œ์— ์ ‘๊ทผ ๊ฐ€๋Šฅํ•ด์•ผ ํ•œ๋‹ค.

      • ํด๋ž˜์Šค๋Š” ํ•„์š”ํ•œ ์ด๋ฒคํŠธ ์ฒ˜๋ฆฌ ๋ฉ”์„œ๋“œ๋“ค์„ ํฌํ•จํ•ด์•ผ ํ•œ๋‹ค.

  • C/C++์—์„œ๋Š” ๊ตฌ์กฐ์ฒด(struct)๋กœ ๊ตฌ๋ถ„ํ•  ์ˆ˜ ์žˆ๋‹ค.

  • Java์—์„œ๋Š” data๋ฅผ ๋”ฐ๋กœ ํด๋ž˜์Šค๋กœ ๊ตฌ๋ถ„ํ•  ์ˆ˜ ์—†๋‹ค. ์ตœ์‹  Java์—์„œ๋Š” record๋กœ ๊ตฌ๋ถ„ํ•˜์ง€๋งŒ, ์˜ค๋ž˜๋œ Bean๊ด€๋ จ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์—์„œ๋Š” ์ง€์›ํ•˜์ง€ ์•Š๋Š”๋‹ค.

  • kotlin์—์„œ๋Š” dataํด๋ž˜์Šค๋กœ ๋”ฐ๋กœ ์ทจ๊ธ‰ํ•  ์ˆ˜ ์žˆ๋‹ค.

  • DTO๋Š” Tier๊ฐ„ ํ†ต์‹ ์— ์‚ฌ์šฉ๋œ๋‹ค.

    • F/E์™€ B/E ์‚ฌ์ด

      • DTO๋„ ๊ฒฐ๊ตญ์—๋Š” ๊ฐ์ฒด์ด๋‹ค. ๊ทธ๋Œ€๋กœ ์ „์†กํ•˜๋ฉด ์‚ฌ์šฉํ•˜๊ธฐ ์–ด๋ ต๊ธฐ ๋•Œ๋ฌธ์— ์ง๋ ฌํ™”(๋งˆ์ƒฌ๋ง)์„ ๊ฑฐ์ณ์•ผ ํ•œ๋‹ค. ์ง๋ ฌํ™” ๊ธฐ์ˆ ๋„ ์—ฌ๋Ÿฌ๊ฐ€์ง€์ธ๋ฐ ์š”์ฆ˜์—๋Š” JSON์„ ๋งŽ์ด ์‚ฌ์šฉํ•œ๋‹ค. XML๋„ ์žˆ๊ธด ํ•˜๋‹ค. JSON์€ ๊ตฌ์กฐ๊ฐ€ ํ›จ์”ฌ ๋‹จ์ˆœํ•˜๊ธฐ ๋•Œ๋ฌธ์— ํŽธ๋ฆฌํ•˜๋‹ค.

    • B/E์™€ DB(๋ฐ์ดํ„ฐ ๊ณ„์ธต) ์‚ฌ์ด

      • 3 Tier๋ฅผ ๋ถ„๋ฆฌํ•œ๋‹ค๋ฉด ํ‘œํ˜„๊ณ„์ธต , ๋น„์ฆˆ๋‹ˆ์Šค ๊ณ„์ธต, ๋ฐ์ดํ„ฐ ๊ณ„์ธต์œผ๋กœ ๋‚˜๋ˆŒ ์ˆ˜ ์žˆ๋‹ค. B/E์™€ DB์‚ฌ์ด์—์„œ๋„ ๋ฐ์ดํ„ฐ ๊ต๋ฅ˜๋ฅผ ์œ„ํ•ด ์‚ฌ์šฉ๋  ์ˆ˜ ์žˆ๋‹ค.

      • ์˜ˆ์ „์—๋Š” Value Object(VO)๋ผ๋Š” ์šฉ์–ด๋กœ๋„ ๋งŽ์ด ์“ฐ์˜€๋‹ค. Sun์‚ฌ์—์„œ ์ž์‹ ๋“ค์˜ ํŒจํ„ด ์šฉ์–ด์ง‘์„ ๋ƒˆ๋Š”๋ฐ ๊ฑฐ๊ธฐ์„œ VO๋ฅผ DTO๋กœ ์‚ฌ์šฉํ–ˆ์—ˆ๋‹ค๊ฐ€, ๋‹ค์‹œ DTO๋กœ ์ •์ •ํ–ˆ๋‹ค.

๊ด€๋ จ ํ‚ค์›Œ๋“œ

  • EJB(Enterprise JavaBeans)

    • ๊ธฐ์—…ํ™˜๊ฒฝ์˜ ์‹œ์Šคํ…œ์„ ๊ตฌํ˜„ํ•˜๊ธฐ ์œ„ํ•œ ์„œ๋ฒ„ ์ธก ์ปดํฌ๋„ŒํŠธ ๋ชจ๋ธ์ด๋‹ค. ์ผ๋ฐ˜์ ์œผ๋กœ ์—…๋ฌด ๋กœ์ง์„ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ์„œ๋ฒ„ ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์„ EJB๋ผ๊ณ  ํ•œ๋‹ค. ๋‹ค์–‘ํ•œ Platform๊ณผ์˜ ์—ฐ๊ณ„๋ฅผ ์ถ”๊ตฌํ•˜๊ณ , ๋น„์ฆˆ๋‹ˆ์Šค๋กœ์ง๊ณผ ์‹œ์Šคํ…œ ๋กœ์ง์„ ๋ถ„์‚ฐํ•ด ๊ทธ ์‚ฌ์ด์˜ ๊ทœ์•ฝ์„ ๊ทœ์ •ํ•˜๊ณ  ์žˆ๋‹ค.

      • ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์„ ํƒ‘์žฌํ•œ ๋ถ€๋ถ„์„ "Enterprise Bean"์ด๋ผ๊ณ  ๋ถ€๋ฅด๊ณ 

      • DataBase์™€ Transaction ์ฒ˜๋ฆฌ ๋“ฑ์˜ ์‹œ์Šคํ…œ ์„œ๋น„์Šค ๊ด€๋ จ ๋กœ์ง ๋ถ€๋ถ„์„ container๋ผ๊ณ  ๋ถ€๋ฅธ๋‹ค.

    • EJB๋ฅผ ์‚ฌ์šฉํ•œ ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜๋ผ๋ฆฌ๋Š” container๋ผ๋Š” ๊ทœ๊ฒฉํ™”๋œ ๋ถ€ํ’ˆ์ด ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์„ ํƒ‘์žฌํ•œ Enterprise Bean๋ถ€๋ถ„์— ๋” ์ง‘์ค‘ํ•  ์ˆ˜ ์žˆ๊ณ , ๊ณตํ†ต๋œ ๊ทœ๊ฒฉ์„ ์‚ฌ์šฉํ•œ EJB๋ผ๋ฆฌ๋Š” ์ด๋™์„ฑ์ด ์ข‹๋‹ค.

    • ์ข€๋” ๊ตฌ์ฒด์ ์ธ ๊ตฌ์กฐ

      • Enterprise Bean

      • Container

      • EJB server

      • Client application

    • EJB๋Š” ์‚ฌ์‹ค์ƒ ํ˜„์žฌ๋Š” ๋งŽ์ด ์“ฐ์ด์ง€ ์•Š๋Š”๋‹ค. ์ด์œ ๋Š” ๋‹น์—ฐํžˆ ์žฅ์ ๋ณด๋‹ค ๋‹จ์ ์ด ์ปค์„œ์ผํ…๋ฐ ์•„๋ž˜์™€ ๊ฐ™์€ ๋‹จ์ ์ด ์žˆ๋‹ค.

      1. ๊ฐ์ฒด์ง€ํ–ฅ์ ์ด์ง€ ์•Š๋‹ค.

      2. ๋ณต์žกํ•˜๋‹ค.

      3. ํŠน์ • ํ™˜๊ฒฝ์ด๋‚˜ ๊ธฐ์ˆ ์— ์ข…์†์ ์ด๋‹ค.

      4. ์ปจํ…Œ์ด๋„ˆ ์•ˆ์—์„œ๋งŒ ๋™์ž‘์ด ๊ฐ€๋Šฅํ•œ ๊ฐ์ฒด๊ตฌ์กฐ

      5. ์ž๋™ํ™”๋œ ํ…Œ์ŠคํŠธ๊ฐ€ ์–ด๋ ต๋‹ค.

  • Java์˜ record

    • ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๊ธฐ ์œ„ํ•œ ํด๋ž˜์Šค ํƒ€์ž…์ด๋‹ค.

    • jdk14์—์„œ ์†Œ๊ฐœ๋๊ณ , 16์—์„œ ์ •์‹์œผ๋กœ ํฌํ•จ๋๋‹ค.

    • ์ด์ „๊นŒ์ง€ ๋ถˆ๋ณ€๊ฐ์ฒด๋ฅผ ๋งŒ๋“ค๊ธฐ ์œ„ํ•ด์„œ, final๊ณผ ๋ชจ๋“  ํ•„๋“œ๊ฐ€ ํฌํ•จ๋œ ์ƒ์„ฑ์ž ๋“ฑ์„ ์‚ฌ์šฉํ•ด์™”๊ณ , toString / hashCode / equals ๋ฉ”์„œ๋“œ๋“ค์„ ์žฌ์ •์˜ ํ–ˆ์ง€๋งŒ, record์—์„œ๋Š” ๊ธฐ๋ณธ์œผ๋กœ ๊ตฌํ˜„ํ•ด์ค€๋‹ค.

    • record ํด๋ž˜์Šค๋ฅผ ํ†ตํ•ด ๊ฐ์ฒด๋ฅผ ์„ ์–ธํ•˜๋ฉด ๋ถˆ๋ณ€๊ฐ์ฒด๋กœ ์ƒ์„ฑ๋  ๋ฟ ์•„๋‹ˆ๋ผ toString / hashCode / equals ๋ฉ”์„œ๋“œ๋ฅผ ๊ธฐ๋ณธ์œผ๋กœ ๊ตฌํ˜„ํ•ด์ค€๋‹ค.

    • ๋‹ค๋งŒ ์•”๋ฌต์  finalํด๋ž˜์Šค์ด๊ธฐ ๋•Œ๋ฌธ์— ์ƒ์†์ด ๋ถˆ๊ฐ€ํ•˜๊ณ , ๋˜ํ•œ abstract ์„ ์–ธ์ด ๋ถˆ๊ฐ€ํ•˜๋‹ค(final์ด๋ฏ€๋กœ ์žฌ์ •์˜๊ฐ€ ์•ˆ๋˜๊ธฐ ๋•Œ๋ฌธ์ธ ๊ฒƒ ๊ฐ™๋‹ค.). ๊ฐ™์€ ๋งฅ๋ฝ์œผ๋กœ ์ƒ์†์„ ๋ฐ›์„ ์ˆ˜๋„ ์—†๋‹ค. ์˜ˆ์™ธ์ ์œผ๋กœ interface ๊ตฌํ˜„์€ ๊ฐ€๋Šฅํ•˜๋‹ค.

    • ORM(JPA, ํ•˜์ด๋ฒ„๋„ค์ดํŠธ)์€ Active Record + DTO ํ˜•ํƒœ๋กœ ์ ‘๊ทผํ•˜๊ธฐ๋„ ํ•œ๋‹ค.

  • DAO

    • Data access object์˜ ์ค„์ž„๋ง

    • ์ผ๋ฐ˜์ ์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์ ‘๊ทผํ•˜๊ธฐ ์œ„ํ•œ ๊ฐ์ฒด์ด๋ฉฐ, ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ ‘๊ทผ์„ ์œ„ํ•œ ๋กœ์ง๊ณผ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์„ ๋ถ„๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉ๋œ๋‹ค.

  • ORM

    • Object Relationship Mapping

    • ๊ด€๊ณ„ํ˜• ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์™€ ๊ฐ์ฒด์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ(OOP)์„ ์—ฐ๊ฒฐํ•˜๋Š” ๋‹ค๋ฆฌ์™€ ๊ฐ™์€ ๊ธฐ์ˆ ์ด๋‹ค. OOP์–ธ์–ด๋ฅผ ์‚ฌ์šฉํ•ด์„œ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์™€ ์ƒํ˜ธ ์ž‘์šฉํ•  ๋•Œ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— CRUD์™€ ๊ฐ™์€ ์ž‘์—…์„ ํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ค€๋‹ค.

Last updated