ํ™ˆ DDD vs SQL ์ค‘์‹ฌ ์„ค๊ณ„
ํฌ์ŠคํŠธ
์ทจ์†Œ

DDD vs SQL ์ค‘์‹ฌ ์„ค๊ณ„

๐Ÿ’ป SQL ์ค‘์‹ฌ ์„ค๊ณ„๋ž€?

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

SQL ์ค‘์‹ฌ์„ค๊ณ„์˜ ๊ฐ€์žฅ ํฐ ๋‹จ์ ์€ ์Šคํ‚ค๋งˆ์™€ ๋น„์ฆˆ๋‹ˆ์Šค๋กœ์ง์˜ ๊ฐ•ํ•œ ๊ฒฐํ•ฉ์ž…๋‹ˆ๋‹ค. ์ด๋Ÿฐ ๋‹จ์ ์—์„œ ํŒŒ์ƒ๋˜๋Š” ๋ฌธ์ œ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

  1. ๋‚ฎ์€ ์œ ์—ฐ์„ฑ
    ์Šคํ‚ค๋งˆ์— ๋Œ€ํ•œ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์˜ ์˜์กด์„ฑ์˜ ๋†’์•„, DB ๊ตฌ์กฐ ๋ณ€๊ฒฝ์œผ๋กœ ์ธํ•ด ์ฟผ๋ฆฌ๋ฅผ ๋ณ€๊ฒฝํ•ด์•ผ ํ•  ์ƒํ™ฉ์ด ์ƒ๊ธฐ๊ฒŒ ๋˜๋ฉด ํ•ด๋‹น ์ฟผ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ๋Š” ๋กœ์ง๋“ค์„ ์ฐพ์•„ ๋ชจ๋‘ ๋ฐ”๊ฟ”์ค˜์•ผํ•˜๋Š” ๋ฌธ์ œ๊ฐ€ ์ƒ๊น๋‹ˆ๋‹ค.
  2. ํ…Œ์ŠคํŠธ ์ฝ”๋“œ ์ž‘์„ฑ์˜ ์–ด๋ ค์›€
    DB์— ๋Œ€ํ•œ ์˜์กด์„ฑ์ด ๋†’๊ธฐ ๋•Œ๋ฌธ์— ํ…Œ์ŠคํŠธ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•  ๊ฒฝ์šฐ DB๋„ ๊ฐ™์ด ์„ค์ •ํ•ด ์ค˜์•ผ ํ•˜๋Š” ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.
  3. ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์˜ ๋ณต์žก๋„ ์ฒ˜๋ฆฌ ์–ด๋ ค์›€
    ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์—์„œ ์ฟผ๋ฆฌ๋ฅผ ์ง์ ‘์‚ฌ์šฉํ•˜๊ณ  ์žˆ๊ธฐ ๋•Œ๋ฌธ์—, ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์ด ๋ณต์žกํ•ด์งˆ์ˆ˜๋ก ์ฝ”๋“œ๋„ ๋ณต์žกํ•ด์ง€๋Š” ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.
  4. ๊ฐ์ฒด์™€ DB ๊ฐ„์˜ ๋งคํ•‘ ๋ฌธ์ œ
    SQL ์ค‘์‹ฌ์„ค๊ณ„๋Š”, ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์—์„œ DB์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์ง์ ‘ ๊ฐ€์ ธ์˜ค๊ณ  ๊ทธ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ์ฒด์— ๋งคํ•‘ํ•ด ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ์ด๋•Œ ๋งคํ•‘ํ•˜๋Š” ๊ณผ์ •์—์„œ๋„ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. DB์™€ ๊ฐ์ฒด์ง€ํ–ฅ ์–ธ์–ด์‚ฌ์ด์—๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ๊ด€๋ฆฌํ•˜๋Š” ๋ฐฉ์‹์— ์ฐจ์ด๊ฐ€ ์กด์žฌํ•ฉ๋‹ˆ๋‹ค. ์ด๋•Œ๋ฌธ์— ๊ฐœ๋ฐœ์ž๊ฐ€ DB๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ์ฒด์— ๋งตํ•‘ํ•ด์ฃผ๋Š” ์ฝ”๋“œ๋ฅผ ์ง์ ‘ ์ž‘์„ฑํ•ด์•ผํ•˜๋Š” ๋ฌธ์ œ๊ฐ€ ์ƒ๊น๋‹ˆ๋‹ค.

๐Ÿ–Š ORM (Object-Relational Mapping)

SQL ์ค‘์‹ฌ์„ค๊ณ„์˜ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•œ ๋ฐฉ๋ฒ• ์ค‘ ํ•˜๋‚˜๋กœ ORM์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
ORM์€ ๊ฐ์ฒด์™€ ๊ด€๊ณ„ํ˜• DB๊ฐ„์˜ ๋ฐ์ดํ„ฐ ๋งคํ•‘์„ ์ž๋™ํ™”ํ•ด์ฃผ๋Š” ํ”„๋ ˆ์ž„์›Œํฌ๋‚˜ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ๋งํ•ฉ๋‹ˆ๋‹ค. ORM์„ ์‚ฌ์šฉํ•˜๊ฒŒ ๋˜๋ฉด, SQL ์ค‘์‹ฌ์„ค๊ณ„์—์„œ ๊ฐ์ฒด์™€ ๊ด€๊ณ„ํ˜• DB๊ฐ„์˜ ๋ฐ์ดํ„ฐ ๊ด€๋ฆฌ ๋ฐฉ์‹์˜ ์ฐจ์ด๋กœ ์ธํ•œ ๋งคํ•‘ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
๋˜ํ•œ ์ฟผ๋ฆฌ๋ฌธ์„ ์ง์ ‘ ์ž‘์„ฑํ•  ํ•„์š” ์—†์ด ๊ฐ์ฒด ์ง€ํ–ฅ์  ํ”„๋กœ๊ทธ๋ž˜๋ฐ์˜ ํŠน์„ฑ์„ ํ™œ์šฉํ•ด DB๋ฅผ ์ œ์–ดํ•  ์ˆ˜ ์žˆ์–ด ๊ฐ€๋…์„ฑ๊ณผ ์œ ์ง€๋ณด์ˆ˜์„ฑ์ด ์ฆ๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.

๐Ÿ’ป DDD(Domain Driven Design)๋ž€?

์˜จ๋ผ์ธ ์„œ์ ์„ ๊ตฌํ˜„ํ•˜๋Š” ์ƒํ™ฉ์„ ๊ฐ€์ •ํ•ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.
์ด๋ฅผ ๊ตฌํ˜„ํ•˜๋ ค๋ฉด, ์ƒํ’ˆ์กฐํšŒ, ๊ตฌ๋งค, ๊ฒฐ์ œ, ๋ฐฐ์†ก ์ถ”์ ๋“ฑ์˜ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ด ๋•Œ ์˜จ๋ผ์ธ ์„œ์ ์€ ํ•ด๊ฒฐํ•˜๊ณ ์ž ํ•˜๋Š” ๋ฌธ์ œ์˜ ์˜์—ญ ์ฆ‰ ๋„๋ฉ”์ธ(domain)์— ํ•ด๋‹นํ•ฉ๋‹ˆ๋‹ค.

ํ•˜๋‚˜์˜ ๋„๋ฉ”์ธ์€ ๋‹ค์‹œ ํ•˜์œ„ ๋„๋ฉ”์ธ์œผ๋กœ ๋‚˜๋ˆŒ ์ˆ˜ ์žˆ๋Š”๋ฐ ์˜จ๋ผ์ธ ์„œ์ ์„ ์˜ˆ๋กœ ๋“ค์–ด๋ณด๋ฉด, ์ฃผ๋ฌธ, ํ˜œํƒ, ๋ฐฐ์†ก, ํšŒ์›, ์นดํ…Œ๊ณ ๋ฆฌ, ๋ฆฌ๋ทฐ๋“ฑ์˜ ํ•˜์œ„ ๋„๋ฉ”์ธ์œผ๋กœ ๋‚˜๋ˆŒ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํ˜œํƒ์˜ ํ•˜์œ„ ๋„๋ฉ”์ธ์€ ์ฟ ํฐ์ด๋‚˜ ํ• ์ธ๊ณผ ๊ฐ™์€ ์„œ๋น„์Šค๋ฅผ ์ œ๊ณตํ•˜๊ณ , ๋ฐฐ์†ก ํ•˜์œ„ ๋„๋ฉ”์ธ์€ ๋ฐฐ์†ก๊ณผ ๊ด€๋ จ๋œ ์„œ๋น„์Šค๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

์ด๋ ‡๊ฒŒ ๋ถ„๋ฆฌํ•œ ๋„๋ฉ”์ธ ์ค‘์‹ฌ์œผ๋กœ ์„œ๋น„์Šค๋ฅผ ์„ค๊ณ„ํ•œ๋Š” ๋ฐฉ๋ฒ•์„ ๋„๋ฉ”์ธ ์ฃผ๋„ ์„ค๊ณ„ DDD๋ผ๊ณ  ํ•ฉ๋‹ˆ๋‹ค.
DDD๋ฅผ ์‚ฌ์šฉํ•ด ์„œ๋น„์Šค๋ฅผ ์„ค๊ณ„ํ•  ๊ฒฝ์šฐ ๋„๋ฉ”์ธ ๋ชจ๋ธ์„ ์šฐ์„ ์ ์œผ๋กœ ๊ณ ๋ คํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์˜ ๋ณต์žก๋„๊ฐ€ ๋–จ์–ด์ง€๋ฉด ์œ ์ง€๋ณด์ˆ˜ ๋˜ํ•œ ์‰ฌ์›Œ์ง‘๋‹ˆ๋‹ค.

์ด ๊ธฐ์‚ฌ๋Š” ์ €์ž‘๊ถŒ์ž์˜ CC BY 4.0 ๋ผ์ด์„ผ์Šค๋ฅผ ๋”ฐ๋ฆ…๋‹ˆ๋‹ค.

DI ์™€ IoC

Entity, DTO, VO