๋ณธ๋ฌธ์œผ๋กœ ๋ฐ”๋กœ๊ฐ€๊ธฐ
๋ฐ˜์‘ํ˜•

์›๋ž˜ ํ•™์›์—์„œ boot๋กœ Spring์„ ๋ฐฐ์›Œ์„œ

๋‚˜๋Š” Spring boot + jpa + mariaDB + ํƒ€์ž„๋ฆฌํ”„ or ๋ฆฌ์•กํŠธ๋ฅผ ์‚ฌ์šฉํ–ˆ์–ด์„œ

mvc ํŒจํ„ด์„ ๋งŒ๋“ค ๋•Œ

controller + dto + entity + repository + service ๋กœ ๊ตฌ์กฐ๋ฅผ ์žก์•˜๋Š”๋ฐ..

ํšŒ์‚ฌ์—์™€์„œ Spring mvc ๊ตฌ์กฐ๋กœ ๊ฐœ๋ฐœ์„ ํ•˜๊ฒŒ๋˜์—ˆ๋”ฐ.

๋งค์šฐ ๋‹นํ™ฉ์Šค๋Ÿฝ๊ณ  ๋ญ๊ฐ€ ๋ญ”์ง€ ๋ชจ๋ฅด๊ฒ ์—ˆ์ง€๋งŒ ์ด์ œ ์–ด์ฐŒ์ €์ฐŒ ์ชผ๋”์€ ์•Œ์•—๋‹ค.

 

๊ทธ ์ค‘ dao๊ฐ€ ์žˆ๊ณ  ์—†๋Š” ๊ตฌ์กฐ ์ฐจ์ด๊ฐ€ ๋ˆˆ์— ๋„์–ด์„œ ๋‘๊ฐœ์˜ ์ฐจ์ด๋ฅผ ์ง€ํ”ผํ‹ฐ์จฉ์—๊ฒŒ ๋ฌผ์–ด๋ดค๋‹ค.

 

1. DTO + DAO + Mapper + Service ๊ตฌ์กฐ

**DAO(Data Access Object)**๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ ‘๊ทผ์„ ๋‹ด๋‹นํ•˜๋Š” ๊ตฌ์กฐ.

 

 

๊ตฌ์กฐ

  1. DTO (Data Transfer Object) → ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๋Š” ๊ฐ์ฒด
  2. DAO (Data Access Object) → DB ์ ‘๊ทผ ๋กœ์ง์„ ๋”ฐ๋กœ ๊ด€๋ฆฌ (์ฟผ๋ฆฌ ์‹คํ–‰)
  3. Mapper (MyBatis XML) → SQL ์ฟผ๋ฆฌ ์ •์˜
  4. Service / ServiceImpl → ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง ์ฒ˜๋ฆฌ

์žฅ์ 

  1.  DAO๊ฐ€ DB ์ ‘๊ทผ์„ ์ „๋‹ด → Service๋Š” ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์—๋งŒ ์ง‘์ค‘ํ•  ์ˆ˜ ์žˆ์Œ
  2. ํ…Œ์ŠคํŠธ๊ฐ€ ์šฉ์ด → DAO๋ฅผ Mockingํ•˜๋ฉด DB ์—†์ด ํ…Œ์ŠคํŠธ ๊ฐ€๋Šฅ
  3. ์œ ์ง€๋ณด์ˆ˜ ํŽธ๋ฆฌ → DAO์—์„œ๋งŒ SQL์„ ์ˆ˜์ •ํ•˜๋ฉด ๋˜๋ฏ€๋กœ Service ์˜ํ–ฅ์ด ์ ์Œ
  4. ์ถ”ํ›„ JPA ๊ฐ™์€ ORM์œผ๋กœ ๋ณ€๊ฒฝ ์‹œ ์œ ์—ฐํ•จ → DAO๋ฅผ JPA๋กœ ๋ณ€๊ฒฝํ•  ์ˆ˜๋„ ์žˆ์Œ

 

๋‹จ์ 

  1. DAO ์ถ”๊ฐ€๋กœ ๊ณ„์ธต์ด ํ•˜๋‚˜ ๋” ์ƒ๊น€ → ๊ตฌ์กฐ๊ฐ€ ๋‹ค์†Œ ๋ณต์žกํ•ด์ง
  2. MyBatis์˜ Mapper ์ธํ„ฐํŽ˜์ด์Šค์™€ ์—ญํ• ์ด ๊ฒน์น  ์ˆ˜ ์žˆ์Œ

 

 

2. DTO + Mapper + Service ๊ตฌ์กฐ 

DAO ์—†์ด MyBatis์˜ Mapper ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๋ฐ”๋กœ ํ™œ์šฉํ•˜๋Š” ๊ตฌ์กฐ

๊ตฌ์กฐ

  1. DTO (Data Transfer Object) → ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๋Š” ๊ฐ์ฒด
  2. Mapper (MyBatis XML / ์ธํ„ฐํŽ˜์ด์Šค) → SQL ์ฟผ๋ฆฌ ์ •์˜ (DAO ์—ญํ• ์„ ํ•จ)
  3. Service / ServiceImpl → ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง ์ฒ˜๋ฆฌ

์žฅ์ 

  1. ๊ตฌ์กฐ๊ฐ€ ๊ฐ„๊ฒฐ → DAO๋ฅผ ์ƒ๋žตํ•˜์—ฌ ์ฝ”๋“œ๊ฐ€ ์งง์•„์ง
  2. MyBatis ์‚ฌ์šฉ ์‹œ ์ง๊ด€์  → Mapper ์ž์ฒด๊ฐ€ SQL ์‹คํ–‰ ์—ญํ• ์„ ํ•จ
  3.  Mapper ์ธํ„ฐํŽ˜์ด์Šค๋กœ ์ธํ„ฐํŽ˜์ด์Šค ๊ธฐ๋ฐ˜ ๊ฐœ๋ฐœ ๊ฐ€๋Šฅ

 

๋‹จ์ 

  1. Service๊ฐ€ DB ๋กœ์ง์„ ์ง์ ‘ ํ˜ธ์ถœํ•˜๊ฒŒ ๋จ → Service๊ฐ€ DB ์ ‘๊ทผ๊ณผ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์„ ๊ฐ™์ด ๋‹ด๋‹น
  2. ORM ๋ณ€๊ฒฝ ์‹œ ์–ด๋ ค์›€ → MyBatis์—์„œ JPA๋กœ ๋ณ€๊ฒฝํ•  ๋•Œ ์ˆ˜์ •ํ•  ๋ถ€๋ถ„์ด ๋งŽ์•„์ง
  3. ํ…Œ์ŠคํŠธ๊ฐ€ ์–ด๋ ต๋‹ค → DAO์ฒ˜๋Ÿผ ์ถ”์ƒํ™”๋œ ๊ณ„์ธต์ด ์—†์–ด์„œ Mocking์ด ์–ด๋ ต๋‹ค.

 

MyBatis๋ฅผ ์œ ์ง€ํ•˜๋ฉด์„œ ๊ฐ„๋‹จํ•œ ๊ตฌ์กฐ๋ฅผ ์›ํ•œ๋‹ค๋ฉด?
โžก DTO + Mapper + Service ์œ ์ง€ํ•ด๋„ ๊ดœ์ฐฎ์Œ

์ถ”ํ›„ ํ™•์žฅ์„ฑ(ORM ๋ณ€๊ฒฝ ๊ฐ€๋Šฅ์„ฑ) & ํ…Œ์ŠคํŠธ ์šฉ์ด์„ฑ์„ ๊ณ ๋ คํ•œ๋‹ค๋ฉด?
โžก DTO + DAO + Mapper + Service๋กœ ๋ณ€๊ฒฝํ•˜๋Š” ๊ฒƒ๋„ ์ข‹์Œ

 

ํ˜„์žฌ MyBatis ๊ธฐ๋ฐ˜์ด๊ณ , ๊ตฌ์กฐ๋ฅผ ์ตœ๋Œ€ํ•œ ๊ฐ„๊ฒฐํ•˜๊ฒŒ ์œ ์ง€ํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด ๊ตณ์ด DAO๋ฅผ ์ถ”๊ฐ€ํ•  ํ•„์š”๋Š” ์—†์Œ!
ํ•˜์ง€๋งŒ, JPA ๊ฐ™์€ ORM์„ ๊ณ ๋ คํ•œ๋‹ค๋ฉด DAO๋ฅผ ์ถ”๊ฐ€ํ•˜๋Š” ๊ฒŒ ๋‚˜์ค‘์— ์œ ๋ฆฌํ•  ์ˆ˜๋„ ์žˆ์Œ!

 

๋ฐ˜์‘ํ˜•