[Spring] ORM์ด๋ž€?

์ตœํ˜œ์›ยท2023๋…„ 10์›” 9์ผ
1

Spring

๋ชฉ๋ก ๋ณด๊ธฐ
5/19
post-thumbnail

๐Ÿ“ORM์ด๋ž€?

๐Ÿ’กORM : Object-Relational Mapping(๊ฐ์ฒด-๊ด€๊ณ„ ๋งคํ•‘)
Object : "๊ฐ์ฒด"์ง€ํ–ฅ ์–ธ์–ด (์ž๋ฐ”, ํŒŒ์ด์ฌ)
Relational : "๊ด€๊ณ„ํ˜•" ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค (H2, MySQL)

๐Ÿ“Œ ๋ฐ˜๋ณต์ ์ด๊ณ  ๋ฒˆ๊ฑฐ๋กœ์šด ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋‹จ์—์„œ์˜ SQL ์ž‘์—…์„ ์ค„์—ฌ์ฃผ๊ธฐ ์œ„ํ•ด์„œ ORM(๊ฐ์ฒด ๊ด€๊ณ„ ๋งคํ•‘)๊ธฐ์ˆ ๋“ค์ด ๋“ฑ์žฅ ํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

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

ORM์˜ ์žฅ๋‹จ์ 

์žฅ์ 

  • ๊ฐ์ฒด ์ง€ํ–ฅ์ ์ธ ์ฝ”๋“œ๋กœ ์ธํ•ด ๋” ์ง๊ด€์ ์ด๊ณ  ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์— ๋” ์ง‘์ค‘ํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋„์™€์ค๋‹ˆ๋‹ค.
    • ORM์„ ์ด์šฉํ•˜๋ฉด SQL Query๊ฐ€ ์•„๋‹Œ ์ง๊ด€์ ์ธ ์ฝ”๋“œ(๋ฉ”์„œ๋“œ)๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์กฐ์ž‘ํ•  ์ˆ˜ ์žˆ์–ด ๊ฐœ๋ฐœ์ž๊ฐ€ ๊ฐ์ฒด ๋ชจ๋ธ๋กœ ํ”„๋กœ๊ทธ๋ž˜๋ฐํ•˜๋Š” ๋ฐ ์ง‘์ค‘ํ•  ์ˆ˜ ์žˆ๋„๋ก ๋„์™€์ค๋‹ˆ๋‹ค.
    • ์„ ์–ธ๋ฌธ, ํ• ๋‹น, ์ข…๋ฃŒ ๊ฐ™์€ ๋ถ€์ˆ˜์ ์ธ ์ฝ”๋“œ๊ฐ€ ์—†๊ฑฐ๋‚˜ ๊ธ‰๊ฒฉํžˆ ์ค„์–ด๋“ญ๋‹ˆ๋‹ค.
    • ๊ฐ์ข… ๊ฐ์ฒด์— ๋Œ€ํ•œ ์ฝ”๋“œ๋ฅผ ๋ณ„๋„๋กœ ์ž‘์„ฑํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ฝ”๋“œ์˜ ๊ฐ€๋…์„ฑ์„ ์˜ฌ๋ ค์ค€๋‹ค.
    • SQL์˜ ์ ˆ์ฐจ์ ์ด๊ณ  ์ˆœ์ฐจ์ ์ธ ์ ‘๊ทผ์ด ์•„๋‹Œ ๊ฐ์ฒด ์ง€ํ–ฅ์ ์ธ ์ ‘๊ทผ์œผ๋กœ ์ธํ•ด ์ƒ์‚ฐ์„ฑ์ด ์ฆ๊ฐ€ํ•œ๋‹ค.
  • ์žฌ์‚ฌ์šฉ ๋ฐ ์œ ์ง€๋ณด์ˆ˜์˜ ํŽธ๋ฆฌ์„ฑ์ด ์ฆ๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.
    • ORM์€ ๋…๋ฆฝ์ ์œผ๋กœ ์ž‘์„ฑ๋˜์–ด์žˆ๊ณ , ํ•ด๋‹น ๊ฐ์ฒด๋“ค์„ ์žฌํ™œ์šฉ ํ•  ์ˆ˜ ์žˆ๋‹ค.
    • ๋•Œ๋ฌธ์— ๋ชจ๋ธ์—์„œ ๊ฐ€๊ณต๋œ ๋ฐ์ดํ„ฐ๋ฅผ ์ปจํŠธ๋กค๋Ÿฌ์— ์˜ํ•ด ๋ทฐ์™€ ํ•ฉ์ณ์ง€๋Š” ํ˜•ํƒœ๋กœ ๋””์ž์ธ ํŒจํ„ด์„ ๊ฒฌ๊ณ ํ•˜๊ฒŒ ๋‹ค์ง€๋Š”๋ฐ ์œ ๋ฆฌํ•ฉ๋‹ˆ๋‹ค.
    • ๋งคํ•‘์ •๋ณด๊ฐ€ ๋ช…ํ™•ํ•˜์—ฌ, ERD๋ฅผ ๋ณด๋Š” ๊ฒƒ์— ๋Œ€ํ•œ ์˜์กด๋„๋ฅผ ๋‚ฎ์ถœ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • DBMS์— ๋Œ€ํ•œ ์ข…์†์„ฑ์ด ์ค„์–ด๋“ญ๋‹ˆ๋‹ค.
    • ๊ฐ์ฒด ๊ฐ„์˜ ๊ด€๊ณ„๋ฅผ ๋ฐ”ํƒ•์œผ๋กœ SQL์„ ์ž๋™์œผ๋กœ ์ƒ์„ฑํ•˜๊ธฐ ๋•Œ๋ฌธ์— RDBMS์˜ ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ์™€ Java์˜ ๊ฐ์ฒด์ง€ํ–ฅ ๋ชจ๋ธ ์‚ฌ์ด์˜ ๊ฐ„๊ฒฉ์„ ์ขํž ์ˆ˜ ์žˆ๋‹ค.
    • ๋Œ€๋ถ€๋ถ„ ORM ์†”๋ฃจ์…˜์€ DB์— ์ข…์†์ ์ด์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
    • ์ข…์†์ ์ด์ง€ ์•Š๋‹ค๋Š”๊ฒƒ์€ ๊ตฌํ˜„ ๋ฐฉ๋ฒ• ๋ฟ๋งŒ์•„๋‹ˆ๋ผ ๋งŽ์€ ์†”๋ฃจ์…˜์—์„œ ์ž๋ฃŒํ˜• ํƒ€์ž…๊นŒ์ง€ ์œ ํšจํ•ฉ๋‹ˆ๋‹ค.
    • ํ”„๋กœ๊ทธ๋ž˜๋จธ๋Š” Object์— ์ง‘์ค‘ํ•จ์œผ๋กœ ๊ทน๋‹จ์ ์œผ๋กœ DBMS๋ฅผ ๊ต์ฒดํ•˜๋Š” ๊ฑฐ๋Œ€ํ•œ ์ž‘์—…์—๋„ ๋น„๊ต์  ์ ์€ ๋ฆฌ์Šคํฌ์™€ ์‹œ๊ฐ„์ด ์†Œ์š”๋ฉ๋‹ˆ๋‹ค.
    • ๋˜ํ•œ ์ž๋ฐ”์—์„œ ๊ฐ€๊ณตํ• ๊ฒฝ์šฐ equals, hashCode์˜ ์˜ค๋ฒ„๋ผ์ด๋“œ ๊ฐ™์€ ์ž๋ฐ”์˜ ๊ธฐ๋Šฅ์„ ์ด์šฉํ•  ์ˆ˜ ์žˆ๊ณ , ๊ฐ„๊ฒฐํ•˜๊ณ  ๋น ๋ฅธ ๊ฐ€๊ณต์ด ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.

๋‹จ์ 

  • ์™„๋ฒฝํ•œ ORM ์œผ๋กœ๋งŒ ์„œ๋น„์Šค๋ฅผ ๊ตฌํ˜„ํ•˜๊ธฐ๊ฐ€ ์–ด๋ ต์Šต๋‹ˆ๋‹ค.
    • ์‚ฌ์šฉํ•˜๊ธฐ๋Š” ํŽธํ•˜์ง€๋งŒ ์„ค๊ณ„๋Š” ๋งค์šฐ ์‹ ์ค‘ํ•˜๊ฒŒ ํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค.
    • ํ”„๋กœ์ ํŠธ์˜ ๋ณต์žก์„ฑ์ด ์ปค์งˆ๊ฒฝ์šฐ ๋‚œ์ด๋„ ๋˜ํ•œ ์˜ฌ๋ผ๊ฐˆ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
    • ์ž˜๋ชป ๊ตฌํ˜„๋œ ๊ฒฝ์šฐ์— ์†๋„ ์ €ํ•˜ ๋ฐ ์‹ฌ๊ฐํ•  ๊ฒฝ์šฐ ์ผ๊ด€์„ฑ์ด ๋ฌด๋„ˆ์ง€๋Š” ๋ฌธ์ œ์ ์ด ์ƒ๊ธธ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
    • ์ผ๋ถ€ ์ž์ฃผ ์‚ฌ์šฉ๋˜๋Š” ๋Œ€ํ˜• ์ฟผ๋ฆฌ๋Š” ์†๋„๋ฅผ ์œ„ํ•ด SP๋ฅผ ์“ฐ๋Š” ๋“ฑ ๋ณ„๋„์˜ ํŠœ๋‹์ด ํ•„์š”ํ•œ ๊ฒฝ์šฐ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.
    • DBMS์˜ ๊ณ ์œ  ๊ธฐ๋Šฅ์„ ์ด์šฉํ•˜๊ธฐ ์–ด๋ ต์Šต๋‹ˆ๋‹ค. (ํ•˜์ง€๋งŒ ์ด๊ฑด ๋‹จ์ ์œผ๋กœ๋งŒ ๋ณผ ์ˆ˜ ์—†๋‹ค : ํŠน์ • DBMS์˜ ๊ณ ์œ ๊ธฐ๋Šฅ์„ ์ด์šฉํ•˜๋ฉด ์ด์‹์„ฑ์ด ์ €ํ•˜๋œ๋‹ค.)
  • ํ”„๋กœ์‹œ์ €๊ฐ€ ๋งŽ์€ ์‹œ์Šคํ…œ์—์„  ORM์˜ ๊ฐ์ฒด ์ง€ํ–ฅ์ ์ธ ์žฅ์ ์„ ํ™œ์šฉํ•˜๊ธฐ ์–ด๋ ต์Šต๋‹ˆ๋‹ค.
    • ์ด๋ฏธ ํ”„๋กœ์‹œ์ €๊ฐ€ ๋งŽ์€ ์‹œ์Šคํ…œ์—์„  ๋‹ค์‹œ ๊ฐ์ฒด๋กœ ๋ฐ”๊ฟ”์•ผํ•˜๋ฉฐ, ๊ทธ ๊ณผ์ •์—์„œ ์ƒ์‚ฐ์„ฑ ์ €ํ•˜๋‚˜ ๋ฆฌ์Šคํฌ๊ฐ€ ๋งŽ์ด ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
profile
์–ด์ œ๋ณด๋‹ค ๋‚˜์€ ์˜ค๋Š˜

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