๐Ÿ•น Level 1. ์ฒด์Šค ๋ฏธ์…˜ ์ •๋ฆฌ - DTO


์ด๋ฒˆ ์ฒด์Šค ๋ฏธ์…˜์—์„œ๋Š” ์›น ์ ์šฉ์„ ํ•˜๋ฉด์„œ ์ƒˆ๋กญ๊ฒŒ ๋ฐฐ์šด ๊ฐœ๋…๋“ค์ด ๋„ˆ๋ฌด ๋งŽ์•˜๋‹ค.
๋•Œ๋ฌธ์— ์ด๋ฒˆ ๋ฏธ์…˜์„ ์ง„ํ–‰ํ•˜๋ฉด์„œ ์ƒˆ๋กœ ๋ฐฐ์šด ๊ฐœ๋…๋“ค๊ณผ, ํœด๊ฐ€ ์ฃผ์‹  ํ”ผ๋“œ๋ฐฑ์„ ์ •๋ฆฌํ•˜๋Š” ๋ฐฉ์•ˆ์œผ๋กœ ๊ธฐ๋กํ•ด์•ผ๊ฒ ๋‹ค โœ๏ธ

step1์—์„œ์˜ DTO

image

์‚ฌ์‹ค DTO์˜ ๊ฐœ๋…์€ ๋Œ€๋žต ์•Œ๊ณ  ์žˆ์œผ๋‚˜,
์ „ ๋ฏธ์…˜๊นŒ์ง€๋Š” DTO์˜ ํ•„์š”์„ฑ์„ ์ž˜ ๋ชป๋Š๋ผ๊ณ  ์žˆ์–ด์„œ ์‚ฌ์šฉํ•˜์ง€๋Š” ์•Š์•˜์—ˆ๋‹ค.
์ด๋•Œ ๊ฐ™์€ ๊ฒฝ์šฐ๋Š” ํ˜„์žฌ ๊ธฐ๋ฌผ๋“ค์„ ๋‚˜ํƒ€๋‚ด๋Š” Pices ๊ฐ์ฒด๋“ค๋งŒ์ด ์กด์žฌํ•  ๋ฟ์ธ๋ฐ View์—์„œ๋Š” 64๊ฐœ์˜ position์— ๋Œ€ํ•œ ์ •๋ณด๋ฅผ ์ถœ๋ ฅํ•˜๊ธฐ ์œ„ํ•ด
Pieces์˜ ๋ฉ”์†Œ๋“œ๋ฅผ ํ†ตํ•ดpieces.findByPosition(CACHE.get(xy)); ๋กœ ๋„๋ฉ”์ธ์— ๋Œ€ํ•œ ์˜์กด์„ฑ์ด ์ƒ๊ธฐ๊ณ  ์žˆ์—ˆ๋‹ค.
๊ทธ๋ž˜์„œ ์ด๋ฅผ ์ œ๊ฑฐํ•˜๊ธฐ ์œ„ํ•ด ํœด์˜ ๋ฆฌ๋ทฐ๋Œ€๋กœ DTO๋ฅผ ๋งŒ๋“ค์–ด View์— ํ•„์š”ํ•œ ๋ฐ์ดํ„ฐ๋“ค์„ ์ „๋‹ฌํ•ด์ฃผ๊ธฐ๋กœ ํ•˜๊ณ 
์ด ๋ฐฉ๋ฒ•์— ๋Œ€ํ•œ ํ™•์‹ ์„ ์–ป๊ธฐ ์œ„ํ•ด ํœด์—๊ฒŒ ์งˆ๋ฌธ์„ ํ–ˆ์—ˆ๋‹ค.
ํ•˜์ง€๋งŒ ์งˆ๋‹ต์„ ํ•˜๋‹ค๊ฐ€ ์ด๋ฒˆ ๋‹จ๊ณ„์—์„œ DTO๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ ๋ณด๋‹ค ๋‹ค์Œ ๋‹จ๊ณ„ ์›น UI๋ฅผ ์ ์šฉํ•˜๋ฉด์„œ
DTO์˜ ํ•„์š”์„ฑ์„ ๋ผˆ์ €๋ฆฌ๊ฒŒ ๋Š๋ผ๊ธฐ๋กœ ํ–ˆ๋‹ค.
์‚ฌ์‹ค ์ง€๊ธˆ ์‹œ์ ์—์„œ ๋Œ์ด์ผœ๋ณด๋ฉด piecesDto๋ฅผ ๋งŒ๋“ค๋ฉด ํ•ด๊ฒฐ๋  ์ผ์ธ๊ฒƒ ๊ฐ™์ง€๋งŒ, ๋ง์”€๋Œ€๋กœ ๊ผญ DTO๊ฐ€ ํ•„์š”ํ–ˆ๋˜ ์‹œ์ ์ด ์•„๋‹ˆ์˜€๋˜ ๊ฒƒ ๊ฐ™๋‹ค.
์ผ๋‹จ ํœด์™€์˜ ์งˆ๋‹ต์„ ํ†ตํ•ด ์–ป์€ DTO์— ๊ด€ํ•œ ์ด์•ผ๊ธฐ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

  • DTO๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ์ „์†กํ•˜๊ธฐ ์œ„ํ•œ ๊ฐ์ฒด๋กœ์„œ ๋กœ์ง์ด ์—†์–ด์•ผ ํ•œ๋‹ค.
    ๋Œ€์‹  model -> modelDto๋กœ ๋ณ€ํ™˜ํ•˜๋Š” ๊ณผ์ •์—์„œ ํ•„์š”ํ•œ ์ž‘์—…์„ ๋ชจ๋‘ ์ˆ˜ํ–‰ํ•˜์—ฌ View์— ํ•„์š”ํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ์„ธํŒ…ํ•  ์ˆ˜ ์žˆ๋‹ค.
  • DTO์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ ๋กœ์ง์„ ์ˆ˜ํ–‰ํ•˜๋Š”๊ฒŒ ์•„๋‹Œ ์ƒ์„ฑ ํ•˜๋Š” ์‹œ์ ์— ๋ฏธ๋ฆฌ ๋ฐ์ดํ„ฐ๋ฅผ ๋‹ค ์„ธํŒ…ํ•˜๊ณ  DTO๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์‹œ์ ์—” ๋ฐ์ดํ„ฐ๋กœ์„œ๋งŒ ์‚ฌ์šฉํ•œ๋‹ค. (์ด ๋ถ€๋ถ„์ด dto ์ƒ์„ฑ์ž์—์„œ ํ•„์š”ํ•œ ๊ฐ’ ์„ธํŒ…์„ ๋งˆ์นœ๋‹ค๋Š” ์˜๋ฏธ)
  • ๊ฐ’์— ๋Œ€ํ•œ ํ‘œํ˜„์„ ์–ด๋–ป๊ฒŒ ํ• ์ง€์— ๋Œ€ํ•œ ui ๋กœ์ง์€ View์—์„œ ์ž์ฒด์ ์œผ๋กœ ํŒ๋‹จํ•ด๋„ ๋œ๋‹ค.

๋˜ํ•œ DTO๋ฅผ ์ ์šฉํ•˜๊ธฐ ์ „ DTO์— ๊ด€ํ•ด ์•Œ์•„๋ณด๊ณ  ์•ฝ๊ฐ„์˜ ์ •๋ฆฌ๋ฅผ ํ–ˆ๋‹ค.


๐Ÿ“ DTO vs VO ๊ฐ„๋‹จ ์ •๋ฆฌ

DTO VO ํ˜ผ๋™์˜ ์ด์œ 

๋ฐ์ดํ„ฐ ์ „๋‹ฌ์šฉ ๊ฐ์ฒด๋ฅผ VO์—์„œ TO๋กœ ๋ณ€๊ฒฝ๋˜์—ˆ๊ธฐ ๋•Œ๋ฌธ์— ํ˜ผ๋™์ด ์˜จ๋‹ค.

DTO = Data Transfer Object

โ€œ๊ณ„์ธต ๊ฐ„โ€ ๋ฐ์ดํ„ฐ๋ฅผ ์ „๋‹ฌํ•˜๊ธฐ ์œ„ํ•œ ๊ฐ์ฒด๋กœ, ๋ฐ์ดํ„ฐ๋ฅผ ๋‹ด์•„์„œ ์ „๋‹ฌํ•˜๋Š” ๋ฐ”๊ตฌ๋‹ˆ ์—ญํ• ์„ ํ•œ๋‹ค.

  • ์šฉ๋„ : ๋ ˆ์ด์–ด ๊ฐ„ ๋ฐ์ดํ„ฐ ์ „๋‹ฌ
  • ๋™๋“ฑ ๊ฒฐ์ • : ์†์„ฑ ๊ฐ’์ด ๋ชจ๋‘ ๊ฐ™๋‹ค๊ณ  ํ•ด์„œ ๊ฐ™์€ ๊ฐ์ฒด๋Š” ์•„๋‹ˆ๋‹ค.
  • ๊ฐ€๋ณ€ / ๋ถˆ๋ณ€ : setter ์กด์žฌ ์‹œ ๊ฐ€๋ณ€, setter ๋น„ ์กด์žฌ ์‹œ ๋ถˆ๋ณ€
  • ๋กœ์ง : getter / setter ์™ธ์˜ ๋กœ์ง์„ ๊ฐ€์ง€์ง€ ์•Š๋Š”๋‹ค.

getter/setter ๋ฉ”์„œ๋“œ๋งŒ์„ ๊ฐ–๋Š”๋‹ค.
๋ณด๋‚ด๋Š” ์ชฝ์—์„œ setter๋ฅผ ์‚ฌ์šฉํ•ด ๊ฐ’์„ ์„ค์ •ํ•˜๊ณ  getter๋ฅผ ์‚ฌ์šฉํ•ด ๊ฐ’์„ ๋ฐ›๋Š”๋‹ค.

setter ๋ฉ”์†Œ๋“œ๋ฅผ ๊ฐ€์งˆ ๊ฒฝ์šฐ ๋ฐ์ดํ„ฐ๊ฐ€ ๊ฐ€๋ณ€์ด๊ธฐ ๋•Œ๋ฌธ์— ํ•„๋“œ๋ฅผ final ๋กœ ํ•˜๊ณ  ์ƒ์„ฑ์ž๋ฅผ ํ†ตํ•ด set์„ ํ•˜๋ฉด ๋” ์•ˆ์ •์ ์ด๋‹ค.

โž• Entity

์—”ํ‹ฐํ‹ฐ ํด๋ž˜์Šค๋Š” ์š”์ฒญ์ด๋‚˜ ์‘๋‹ต ๊ฐ’์„ ์ „๋‹ฌํ•˜๋Š” ํด๋ž˜์Šค๊ฐ€ ์•„๋‹Œ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์™€ ๋งคํ•‘๋œ ํ•ต์‹ฌ ํด๋ž˜์Šค๋‹ค.
์ด ์—”ํ‹ฐํ‹ฐ ํด๋ž˜์Šค๋ฅผ ๊ธฐ์ค€์œผ๋กœ ํ…Œ์ด๋ธ”์ด ์ƒ์„ฑ๋œ๋‹ค.
๋ทฐ์™€ ์—”ํ‹ฐํ‹ฐ๊ฐ€ ์ง์ ‘ ์—ฐ๊ฒฐ๋˜์–ด ์žˆ์œผ๋ฉด ์—”ํ‹ฐํ‹ฐ์— ๋ณ€๊ฒฝ์ด ์ผ์–ด๋‚  ๋•Œ, ๋ทฐ์˜ ๋ชจ๋“  ๋ถ€๋ถ„์„ ์ˆ˜์ •ํ•ด์ฃผ์–ด์•ผ ํ•œ๋‹ค.

VO = Value Object

๊ฐ’ ๊ทธ ์ž์ฒด๋ฅผ ํ‘œํ˜„ํ•˜๋Š” ๊ฐ์ฒด๋กœ ๋ถˆ๋ณ€์ด์–ด์•ผ ํ•œ๋‹ค.

๊ฐ’์œผ๋กœ๋งŒ ๋น„๊ต๋˜๋Š” ๊ฐ์ฒด๋กœ equals / hashCode ์˜ค๋ฒ„๋ผ์ด๋”ฉ์ด ํ•ต์‹ฌ์ด๋‹ค.
์ƒ์„ฑ์ž๋ฅผ ํ†ตํ•ด์„œ๋งŒ ๊ฐ’์„ ์ดˆ๊ธฐํ™”ํ•ด์•ผ ํ•œ๋‹ค.

  • ์šฉ๋„ : ๊ฐ’ ์ž์ฒด ํ‘œํ˜„
  • ์†์„ฑ ๊ฐ’์ด ๋ชจ๋‘ ๊ฐ™์œผ๋ฉด ๊ฐ™์€ ๊ฐ์ฒด
  • ๊ฐ€๋ณ€ / ๋ถˆ๋ณ€ : ๋ถˆ๋ณ€
  • ๋กœ์ง : getter / setter ์™ธ์˜ ๋กœ์ง์„ ๊ฐ€์งˆ ์ˆ˜ ์žˆ๋‹ค.

step2์—์„œ์˜ DTO

View์— ๋ฐ์ดํ„ฐ๋ฅผ ์ „๋‹ฌํ•˜๋Š” ๋ชฉ์ 

4, 5๋‹จ๊ณ„๋ฅผ ์ง„ํ–‰ํ•˜๋ฉด์„œ ์›น UI๋ฅผ ๊ทธ๋ฆฌ๊ธฐ ์œ„ํ•ด Gson์„ ์‚ฌ์šฉํ•˜์˜€๊ณ , ์ด๋กœ ๋ทฐ์— ๋ณด๋‚ด์ค„ ๋ฐ์ดํ„ฐ๋ฅผ Json์œผ๋กœ ๋งŒ๋“ค ์ˆ˜ ์žˆ์—ˆ๋‹ค.
String chessGameListJson = gson.toJson(chessGameList);
์ด๋ ‡๊ฒŒ Gson ๊ฐ์ฒด๋ฅผ ํ†ตํ•ด string ํ˜•ํƒœ์˜ json์„ ๋งŒ๋“ค๊ณ  spark java์—์„œ ๋‹ค์Œ๊ณผ ๊ฐ™์ด res ๊ฐ์ฒด์˜ body์— ์ด json์„ ๋‹ด์•„ ๋ณด๋‚ธ๋‹ค.

get("/chess-game-list", (req, res) -> {
  List<Integer> chessGameList = chessService.getAllChessGameId();
  return gson.toJson(chessGameList);
});

โž• ์ž ๊น Gson์— ๋Œ€ํ•ด ์ข€ ๋” ์–ธ๊ธ‰ํ•˜๋ฉด,
json์˜ ํ‚ค ๊ฐ’๊ณผ ๊ฐ์ฒด์˜ ํ•„๋“œ๋ฅผ ๋งค์นญ ์‹œํ‚ค๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์ด req๋กœ ๋‚ ์•„์˜จ json ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ์ฒด๋กœ ์‰ฝ๊ฒŒ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ๋‹ค.

MoveRequestDto moveRequestDto = gson.fromJson(req.body(), MoveRequestDto.class);

Gson์„ ํ†ตํ•ด์„œ ๊ฐ์ฒด๋ฅผ json์œผ๋กœ ๋ณ€๊ฒฝํ•  ๋•Œ์— gson์ด ๊ฐ์ฒด์˜ ํ•„๋“œ์— ์žˆ๋Š” ๊ฐ’๋“ค์„ ์ž๋™์œผ๋กœ key-value์˜ json์œผ๋กœ ๋งŒ๋“ค์–ด ์ค€๋‹ค.
๊ทธ๋Ÿฐ๋ฐ, ๊ฐ์ฒด ์ž์ฒด๋ฅผ Gson์„ ํ†ตํ•ด json์œผ๋กœ ๋งŒ๋“ค๋ฉด
View์—์„œ ์›ํ•˜๋Š” ๋ฐ์ดํ„ฐ ์–‘์‹์„ ๋งž์ถœ ์ˆ˜ ์—†๊ณ , ๋˜ View์—์„œ ์›ํ•˜์ง€ ์•Š๋Š” ๋ฐ์ดํ„ฐ๋„ ํ•จ๊ป˜ ๋“ค์–ด๊ฐ€๊ฒŒ ๋œ๋‹ค.

๊ทธ๋ž˜์„œ ์ด๋•Œ ํ•„์š”ํ•œ ๊ฒƒ์ด ๋ฐ”๋กœ DTO ์˜€๋‹ค.
View์— ํ•„์š”ํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ์›์‹œ๊ฐ’ ํ•„๋“œ๋กœ ๊ฐ€์ง„ DTO๋ฅผ ๋งŒ๋“ค๊ณ  View์—๊ฒŒ ๋ฐ์ดํ„ฐ ์ „์†ก์„ ์œ„ํ•ด ์ด๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด๋‹ค.
์ด ๊ฒฝํ—˜ ๋•๋ถ„์— ํœด๊ฐ€ step1์—์„œ ์–ธ๊ธ‰ํ–ˆ๋˜ DTO์˜ ์ฐ ํ•„์š”์„ฑ์„ ๋Š๋‚„ ์ˆ˜ ์žˆ์—ˆ๋‹ค.

DAO์—์„œ ์ž˜๋ชป๋œ DTO ์‚ฌ์šฉ

DTO์— ๋Œ€ํ•œ ๊ฐœ๋…์„ ์‚ดํŽด๋ณด๋ฉด์„œ ๊ณ„์ธต ๊ฐ„ ๋ฐ์ดํ„ฐ๋ฅผ ์ „๋‹ฌํ•˜๊ธฐ ์œ„ํ•œ ๊ฐ์ฒด๋ผ๋Š” ์‚ฌ์‹ค์— ์ง‘์ค‘ํ•˜์—ฌ
๋งจ ์ฒ˜์Œ์—๋Š” DAO์™€ Service ๋ ˆ์ด์–ด๊ฐ€ ์ฃผ๊ณ  ๋ฐ›๋Š” ๋ฐ์ดํ„ฐ์—์„œ๋„ DTO๋ฅผ ์‚ฌ์šฉํ•˜์˜€์—ˆ๋‹ค.
์ด์— ๋Œ€ํ•ด์„œ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ ํ”ผ๋“œ๋ฐฑ์„ ๋ฐ›์•˜๋‹ค.

image

dao๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์ „๋‹ฌํ•˜๊ธฐ ์œ„ํ•ด ์„œ๋น„์Šค์—์„œ dto๋กœ ์‹ธ๊ณ , dao์—์„œ dto๋กœ ๋ฐ˜ํ™˜ํ•˜์—ฌ ์„œ๋น„์Šค ๋ ˆ์ด์–ด์—์„œ ๊บผ๋‚ด ์“ฐ๋Š” ์ด ๊ณผ์ •์ด,
๋Œ์ด์ผœ๋ณด๋‹ˆ ๋„๋ฉ”์ธ์—์„œ ๊บผ๋‚ด ์“ธ ์ˆ˜ ์žˆ๋Š” ๊ฐ’๋“ค์„ ๊ตณ์ด dto๋กœ ์ „๋‹ฌํ•˜๋ฉด์„œ ๋ถˆํ•„์š”ํ•œ dto ๊ฐ์ฒด ์ƒ์„ฑ๊ณผ ์ฝ”๋“œ๋งŒ ๋Š˜์–ด๋‚˜๊ณ  ์žˆ์—ˆ๋‹ค.
๋ทฐ์—์„œ๋Š” gson์„ ์‚ฌ์šฉํ•ด json์œผ๋กœ ๋งŒ๋“ค๊ธฐ ์œ„ํ•ด dto์˜ ํ•„์š”์„ฑ์„ ์ ˆ์‹คํžˆ ๋Š๋‚„ ์ˆ˜ ์žˆ์—ˆ์ง€๋งŒ, dao์—์„œ ๋ถˆํ•„์š”ํ•œ dto๋“ค์„ ์ œ๊ฑฐํ–ˆ๋”๋‹ˆ dto๋ฅผ ๋ถˆํ•„์š”ํ•˜๊ฒŒ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์—ˆ๊ตฌ๋‚˜๋ฅผ ๋Š๊ผˆ๋‹ค.

๋ฐ์ดํ„ฐ ์ „๋‹ฌ ๋ชฉ์ 

image

image

ํœด์˜ ๋ง๋Œ€๋กœ ๋‚˜์˜ ๊ตฌ์กฐ์—์„œ, ChessGame ๊ฐ์ฒด์™€ chess_game ํ…Œ์ด๋ธ” ๊ฐ„์˜ ๋ถˆ์ผ์น˜๋Š” ๋ช…ํ™•ํžˆ ์กด์žฌํ–ˆ๋‹ค.
์‚ฌ์‹ค DB ์—ฐ๋™ ๊ฒฝํ—˜์ด ์žˆ์ง€๋งŒ ์ด๋ฒˆ ๋ฏธ์…˜์—์„œ DB๋ฅผ ์—ฐ๋™ํ•˜๋Š”๋ฐ ์™œ์ด๋ ‡๊ฒŒ ๋ง‰๋ง‰ํ• ๊นŒ ๋งŽ์ด ๊ณ ๋ฏผ์ด ๋˜์—ˆ๋Š”๋ฐ,
๊ฐ์ฒด๋ฅผ ํ…Œ์ด๋ธ”๋กœ 1:1 ๋งตํ•‘์„ ํ•˜๋ คํ•˜๋‹ค ๋ณด๋‹ˆ ์ƒ๊ธด ๋ฌธ์ œ์˜€๋‹ค.
(ํœด์˜ ๋ง๋Œ€๋กœ ๋‚˜์ค‘์—๋Š” ORM์„ ํ†ตํ•ด ํ•ด๊ฒฐ์ด ๋˜๊ฒ ์ง€..!)
์ด๋ฒˆ ๋‹จ๊ณ„์—์„œ๋Š” ๊ฐ์ฒด์™€ ํ…Œ์ด๋ธ” ๊ฐ„์˜ ๋ถˆ์ผ ์น˜ ๋ฌธ์ œ๋ฅผ DTO๋กœ ํ•ด๊ฒฐํ•  ๊ฒƒ์„ ์ œ์‹œํ•ด์ฃผ์…จ๊ณ ,
ChessGame์— ๋Œ€ํ•ด์„œ๋Š” DAO์™€ Service ๊ฐ„์— ๋ฐ์ดํ„ฐ ์ „๋‹ฌ์—์„œ DTO๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ €์žฅํ•  ๋ฐ์ดํ„ฐ๋ฅผ ์ฃผ๊ณ  ๋ฐ›๋„๋ก ํ•˜์˜€๋‹ค.

  • ChessGameDao ์ผ๋ถ€
public ChessGameStatusDto findChessGameStateById(int chessGameId) {
  String query = "SELECT turn, IF(isFinish, 'true', 'false') isFinish FROM chess_game WHERE id = ?";
  try (Connection connection = dbManager.getConnection();
       PreparedStatement pstmt = connection.prepareStatement(query)) {
    pstmt.setInt(1, chessGameId);
    ResultSet rs = pstmt.executeQuery();
    if (!rs.next()) return null;
    return new ChessGameStatusDto(rs.getString("turn"), rs.getBoolean("isFinish"));
  } catch (SQLException e) {
    e.printStackTrace();
  }
  return null;
}
  • ChessService ์ผ๋ถ€
public ChessGame findChessGameById(int chessGameId) {
  ChessGameStatusDto chessGameStatusDto = chessGameDao.findChessGameStateById(chessGameId);
  List<Piece> pieces = pieceDao.findAllByChessGameId(chessGameId);
  return ChessGameFactory.loadChessGameByInfo(pieces, chessGameStatusDto.getTurn(), chessGameStatusDto.isFinish());
}

์ด์— ๋Œ€ํ•œ ํœด์˜ ํ”ผ๋“œ๋ฐฑ์€ OK ์˜€์ง€๋งŒ DTO์— ๋Œ€ํ•ด์„œ ๋ฆฌ๋ทฐ์–ด๋งˆ๋‹ค ๋‹ค๋ฅธ ๊ด€์ ์„ ๊ฐ€์ง€๊ณ  ์žˆ์„ ๊ฒƒ์ด๋ผ ํ•˜์˜€๋‹ค.


DTO์— ๋Œ€ํ•œ ๊ฒฐ๋ก 

DTO์— ๋Œ€ํ•ด์„œ ํœด๊ฐ€ ์ฃผ์‹  ์ฐธ๊ณ  ์ž๋ฃŒ๋ฅผ ์ฝ๊ณ , ์ด๋ฒˆ ๋ฏธ์…˜์—์„œ ๊ฒฝํ—˜ํ•œ DTO๋ฅผ ๊ฐ„๋žตํžˆ ์ •๋ฆฌํ•˜๊ณ  ๋งˆ๋ฌด๋ฆฌํ•œ๋‹ค.

ํ˜น์‹œ DTO(VO) ์ž‘์„ฑํ•˜์‹œ๋‚˜์š”?

๊ฐ์ฒด๋ฅผ ์ž๋™์œผ๋กœ Json์œผ๋กœ ๋ณ€๊ฒฝํ•  ๊ฒฝ์šฐ ๊ฐ์ฒด์— ์กด์žฌํ•˜๋Š” ๋ชจ๋“  ์†์„ฑ๊ณผ ์กฐํ•ฉ ๊ด€๊ณ„์— ์žˆ๋Š” ๊ฐ์ฒด์˜ ์†์„ฑ๊นŒ์ง€ Json์œผ๋กœ ์ž๋™์œผ๋กœ ๋ณ€ํ™˜๋œ๋‹ค.
์ด ๊ฒฝ์šฐ View์—์„œ ๋ถˆํ•„์š”ํ•œ ์†์„ฑ๊นŒ์ง€ Json์œผ๋กœ ๋ณ€ํ™˜๋œ๋‹ค.
์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด์„œ ๊ฐ์ฒด์—์„œ View์—์„œ ํ•„์š”ํ•œ ์†์„ฑ๋งŒ์„ ๋ฝ‘์•„์„œ DTO๋กœ ๋งŒ๋“ค์–ด ๊ณ„์ธต ๊ฐ„ ๋ฐ์ดํ„ฐ๋ฅผ ์ „๋‹ฌํ•œ๋‹ค.

ํ•˜์ง€๋งŒ ๋„๋ฉ”์ธ์—์„œ ํŠน์ • ์†์„ฑ๋งŒ์„ ๋ฝ‘์•„ ๋ฐ์ดํ„ฐ๋ฅผ ์ „๋‹ฌํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด, ์ถ”ํ›„์— Lombok์„ ํ†ตํ•ด ํ•„์š”ํ•œ ์†์„ฑ๋งŒ์„ ์ „๋‹ฌํ•  ์ˆ˜ ์žˆ๋‹ค.