Orm.md


๊ฐœ๋…

  • ๊ฐ์ฒด์™€ ๊ด€๊ณ„ํ˜• ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์ž๋™์œผ๋กœ **๋งคํ•‘(์—ฐ๊ฒฐ)**ํ•ด์ฃผ๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

    • ๊ฐ์ฒด ์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์—์„œ์˜ ํด๋ž˜์Šค == RDB์˜ ํ…Œ์ด๋ธ”

    • ๊ฐ์ฒด ๋ชจ๋ธ๊ณผ ๊ด€๊ณ„ํ˜• ๋ชจ๋ธ ๊ฐ„์˜ ๋ถˆ์ผ์น˜(๊ฐ์ฒด ์ž„ํ”ผ๋˜์Šค ๋ถ€์กฐํ™”) ๋ฌธ์ œ๊ฐ€ ์กด์žฌํ•ฉ๋‹ˆ๋‹ค.

    • ORM์„ ์‚ฌ์šฉํ•ด ๊ฐ์ฒด ๊ฐ„์˜ ๊ด€๊ณ„๋ฅผ ๋ฐ”ํƒ•์œผ๋กœ SQL์„ ์ž๋™ ์ƒ์„ฑํ•˜์—ฌ ๋ถˆ์ผ์น˜ ๋ฌธ์ œ๋ฅผ ๊ฐœ์„ ํ•ฉ๋‹ˆ๋‹ค.

์žฅ/๋‹จ์ 

์žฅ์ 

  • ๊ฐ์ฒด ์ง€ํ–ฅ์ ์ธ ์ฝ”๋“œ๋กœ ์ธํ•ด ๋” ์ง๊ด€์ ์œผ๋กœ ๋กœ์ง์— ์ง‘์ค‘ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

    • ORM์„ ์‚ฌ์šฉํ•˜์—ฌ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์™€์˜ CRUD ์ž‘์—…์„ SQL(Raw) Query๊ฐ€ ์•„๋‹Œ ์ฝ”๋“œ(๋ฉ”์„œ๋“œ)๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

    • ๊ฐ์ฒด์— ๋Œ€ํ•œ ์ฝ”๋“œ๋ฅผ ๋ณ„๋„๋กœ ์ž‘์„ฑํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ฝ”๋“œ์˜ ๊ฐ€๋…์„ฑ์ด ์˜ฌ๋ผ๊ฐ‘๋‹ˆ๋‹ค.

  • ์žฌ์‚ฌ์šฉ ๋ฐ ์œ ์ง€๋ณด์ˆ˜์˜ ํŽธ๋ฆฌ์„ฑ

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

  • DBMS์— ๋Œ€ํ•œ ์ข…์†์„ฑ ๊ฐ์†Œ

    • ๋Œ€๋ถ€๋ถ„์˜ ORM ์†”๋ฃจ์…˜์€ DB์— ์ข…์†์ ์ด์ง€ ์•Š๊ณ , ๊ฐ์ฒด ๊ฐ„์˜ ๊ด€๊ณ„์— ๋”ฐ๋ผ SQL์„ ์ž๋™์œผ๋กœ ์ƒ์„ฑํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๊ฐ๊ธฐ ๋‹ค๋ฅธ DBMS์— ๋งž์ถ”์–ด ์„ค๊ณ„ํ•  ํ•„์š”๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค.

    • ๊ฐ์ฒด์— ์ง‘์ค‘ํ•จ์œผ๋กœ์จ DBMS๋ฅผ ๊ต์ฒดํ•˜๋Š” ๊ฑฐ๋Œ€ํ•œ ์ž‘์—…์—์„œ ๋น„๊ต์  ์ ์€ ๋ฆฌ์Šคํฌ์™€ ์‹œ๊ฐ„์ด ์†Œ์š”๋ฉ๋‹ˆ๋‹ค.

๋‹จ์ 

  • ORM์œผ๋กœ๋งŒ ์„œ๋น„์Šค๋ฅผ ๊ตฌํ˜„ํ•˜๊ธฐ๋Š” ์–ด๋ ต์Šต๋‹ˆ๋‹ค.

    • ์‚ฌ์šฉํ•˜๊ธฐ ํŽธํ•˜์ง€๋งŒ ํ”„๋กœ์ ํŠธ์˜ ๋ณต์žก์„ฑ์ด ์ปค์งˆ๊ฒฝ์šฐ ๋‚œ์ด๋„ ๋˜ํ•œ ์˜ฌ๋ผ๊ฐ€๊ธฐ ๋–„๋ฌธ์— ์„ค๊ณ„๋ฅผ ๋งค์šฐ ์‹ ์ค‘ํ•˜๊ฒŒ ํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค.

    • ์ž๋™์œผ๋กœ SQL์„ ์ƒ์„ฑํ•ด์ฃผ๊ธฐ ๋•Œ๋ฌธ์— ์ƒ์„ฑ๋˜๋Š” ์ฟผ๋ฆฌ์— ๋ถˆํ•„์š”ํ•œ ์ œ์•ฝ๋“ค์ด ์˜ฌ๋ผ๊ฐ€๊ธฐ๋„ ํ•˜๋ฉฐ ์ฟผ๋ฆฌ์˜ ์†๋„๊ฐ€ ํ•˜๋ฝํ•ฉ๋‹ˆ๋‹ค.

์‚ฌ์šฉ

  • Python

    • SQLAlchemy

    • Django Framework => ORM์„ ๊ธฐ๋ณธ ์ œ๊ณต

  • Java

    • Hibernate

    • JPQL

    • Mybatis & JPA

  • Javascript

    • Sequelize.js

    • TypeORM ๋“ฑ๋“ฑ

๊ฐ์ฒด-์ž„ํ”ผ๋˜์Šค ๋ถ€์กฐํ™” (The Object-Relational Impedance Mismatch)

  • ์„ธ๋ถ„์„ฑ

    • ๊ฒฝ์šฐ์— ๋”ฐ๋ผ DB์— ์žˆ๋Š” ํ…Œ์ด๋ธ” ์ˆ˜๋ณด๋‹ค ๋” ๋งŽ์€ ํด๋ž˜์Šค๋ฅผ ๊ฐ€์ง„ ๊ฐ์ฒด ๋ชจ๋ธ์„ ๊ฐ€์งˆ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

      • ์˜ˆ๋ฅผ ๋“ค์–ด, ์‚ฌ์šฉ์ž ์„ธ๋ถ€ ์‚ฌํ•ญ์ด๋ผ๋Š” ํ…Œ์ด๋ธ”์„ ์ƒ๊ฐํ•ด๋ด…์‹œ๋‹ค.

      • Person๊ณผ Address๋ผ๋Š” ๋‘๊ฐœ์˜ ํด๋ž˜์Šค๋กœ ๋‚˜๋ˆ„์–ด ์งˆ ์ˆ˜ ์žˆ์ง€๋งŒ DB์—๋Š” person์ด๋ผ๋Š” ํ•˜๋‚˜์˜ ํ…Œ์ด๋ธ”์— ์‚ฌ์šฉ์ž ์„ธ๋ถ€ ์‚ฌํ•ญ์„ ์ €์žฅํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

      • Object : 2๊ฐœ != Table : 1๊ฐœ

  • ์ƒ์†

  • ์ผ์น˜

    • RDB์—์„œ๋Š” ๊ธฐ๋ณธํ‚ค(PK)๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ 'sameness'์˜ ๊ฐœ๋…์„ ์ •์˜ํ•˜์ง€๋งŒ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ํ™˜๊ฒฝ์—์„œ๋Š” ์ฃผ์†Œ๊ฐ’์ด ๊ฐ™๊ฑฐ๋‚˜ ๋‚ด์šฉ์ด ๊ฐ™์€ ๊ฒฝ์šฐ๋ฅผ ๊ตฌ๋ถ„ํ•˜์—ฌ ์ •์˜ ํ•ฉ๋‹ˆ๋‹ค.

  • ์—ฐ๊ด€์„ฑ

  • ํƒ์ƒ‰

Last updated