[ETC] ORM

ORM(Object-Relational Mapping)

๊ฐ์ฒด ์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์—์„œ์˜ ๊ฐ์ฒด(Object)์™€ ๊ด€๊ณ„ํ˜• ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค(Relational Database, RDB)์— ์žˆ๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ์ž๋™์œผ๋กœ ๋งคํ•‘ํ•ด์ฃผ๋Š” ๊ธฐ์ˆ ์ด๋‹ค.
๊ฐ์ฒด ์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์€ ํด๋ž˜์Šค๋ฅผ ์‚ฌ์šฉํ•˜๊ณ , ๊ด€๊ณ„ํ˜• ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋Š” ํ…Œ์ด๋ธ”์„ ์‚ฌ์šฉํ•œ๋‹ค.
๊ฐ์ฒด ๋ชจ๋ธ๊ณผ ๊ด€๊ณ„ํ˜• ๋ชจ๋ธ ๊ฐ„์— ๋ถˆ์ผ์น˜๊ฐ€ ์กด์žฌํ•œ๋‹ค.
ORM์€ ๊ฐ์ฒด ๊ฐ„์˜ ๊ด€๊ณ„๋ฅผ ๋ฐ”ํƒ•์œผ๋กœ SQL์„ ์ž๋™์œผ๋กœ ์ƒ์„ฑํ•˜์—ฌ ๋ถˆ์ผ์น˜๋ฅผ ํ•ด๊ฒฐํ•œ๋‹ค.

ORM ์žฅ์ 

  • ๊ฐ์ฒด ์ง€ํ–ฅ์ ์ธ ์ฝ”๋“œ๋กœ ์ธํ•ด ๋” ์ง๊ด€์ ์ด๊ณ  ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์— ๋” ์ง‘์ค‘ํ•  ์ˆ˜ ์žˆ๋‹ค.
    • SQL์˜ ์ ˆ์ฐจ์ /์ˆœ์ฐจ์  ์ ‘๊ทผ์ด ์•„๋‹Œ ์˜ค์ง ๊ฐ์ฒด์ง€ํ–ฅ์  ์ ‘๊ทผ์œผ๋กœ ์ธํ•ด ์ƒ์‚ฐ์„ฑ์ด ์ฆ๊ฐ€ํ•œ๋‹ค.
    • ๊ฐ ๊ฐ์ฒด๋ณ„๋กœ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜๋ฏ€๋กœ ๊ฐ€๋…์„ฑ์„ ์˜ฌ๋ ค์ค€๋‹ค.
  • ์žฌ์‚ฌ์šฉ ๋ฐ ์œ ์ง€๋ณด์ˆ˜์˜ ํŽธ๋ฆฌ์„ฑ์ด ์ฆ๊ฐ€ํ•œ๋‹ค.
    • ORM์€ ๋…๋ฆฝ์ ์œผ๋กœ ์ž‘์„ฑ๋˜์–ด์žˆ๊ณ  ํ•ด๋‹น ๊ฐ์ฒด๋“ค์€ ์žฌ์‚ฌ์šฉ์ด ๊ฐ€๋Šฅํ•˜๋‹ค.
  • DBMS์— ๋Œ€ํ•œ ์ข…์†์„ฑ์ด ์ค„์–ด๋“ ๋‹ค.
    • ๋Œ€๋ถ€๋ถ„์˜ ORM์€ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ๋น„์ข…์†์ ์ด๋‹ค.

ORM ๋‹จ์ 

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

ORM ์ข…๋ฅ˜

  • JAVA: Hibernate, JPA
  • Python(Django): ๋‚ด์žฅ ORM
  • Node.js: Sequalize
  • PHP(Laravel): Eloquent ORM

์ด ์™ธ์—๋„ ๋‹ค์–‘ํ•œ ORM์ด ์กด์žฌํ•œ๋‹ค.

Categories:

Updated:

Leave a comment