[DB] ORM

iamhyunjiยท2022๋…„ 5์›” 26์ผ
0
post-thumbnail

๐Ÿ“Œ ORM


  • ๊ฐ์ฒด ๊ด€๊ณ„ํ˜• ๋งคํ•‘(Objectโ€“relational mapping)์˜ ์•ฝ์ž
  • ๊ฐ์ฒด ์ฝ”๋“œ์™€ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ ์‚ฌ์ด์—์„œ ๊ฐ์ฒด๋ฅผ ๋งคํ•‘ํ•ด์ฃผ๋Š” ๊ธฐ์ˆ 

๊ฐ์ฒด ๊ด€๊ณ„ํ˜• ๋งคํ•‘์ด๋ผ๋Š” ๋œป์œผ๋กœ, Objectโ€“relational mapping์„ ์ค„์—ฌ ORM์ด๋ผ ํ•œ๋‹ค.

ORM์€ Java๋‚˜ C#๊ณผ ๊ฐ™์€ ๊ฐ์ฒด ์ง€ํ–ฅ ์–ธ์–ด๋กœ ์ž‘์„ฑ๋œ ๊ฐ์ฒด ์ฝ”๋“œ๋ฅผ ๊ด€๊ณ„ํ˜• ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ๋งž๊ฒŒ ๋ณ€ํ™˜์‹œ์ผœ์ฃผ๋Š” ๊ธฐ๋Šฅ์„ ํ•œ๋‹ค.

์ด๋•Œ ๊ฐœ๋ฐœ์ž๋Š” SQL์„ ์ž‘์„ฑํ•  ํ•„์š” ์—†์ด, ORM์ด ์ œ๊ณตํ•˜๋Š” API ํ•จ์ˆ˜๋ฅผ ํ†ตํ•ด์„œ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์ ‘๊ทผโ€ข์กฐ์ž‘ํ•œ๋‹ค.

SQL์„ ์‚ฌ์šฉํ•  ๋•Œ ๊ฐœ๋ฐœ์ž๋Š” Application ๊ฐœ๋ฐœ ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ํ…Œ์ด๋ธ”์˜ ๊ตฌ์กฐ์™€ SQL์˜ ์ฟผ๋ฆฌ๊นŒ์ง€ ์ดํ•ดํ•˜๊ณ  ๊ณ ๋ คํ•ด์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๊ฐœ๋ฐœ์— ์žˆ์–ด ๋ณต์žก์„ฑ์„ ์ฆ๊ฐ€์‹œํ‚ฌ ์ˆ˜ ์žˆ๋‹ค.

๊ทธ๋ ‡์ง€๋งŒ ORM์„ ์ด์šฉํ•ด ๊ฐœ๋ฐœ์ž๋Š” DB ๊ตฌ์กฐ๋ฅผ ๊ฐ์ฒด๋กœ ๋ฐ”๋ผ๋ด„์œผ๋กœ์จ, ์ฟผ๋ฆฌ ๋กœ์ง๋ณด๋‹ค ๊ฐ์ฒด ์ง€ํ–ฅ์ ์ธ ๊ด€์ ์—์„œ Application์˜ ๋กœ์ง์— ๋” ์‹ ๊ฒฝ ์“ธ ์ˆ˜ ์žˆ๋‹ค.

๐Ÿ“Œ ์žฅ์ โ€ข๋‹จ์ 


์žฅ์ 

  • ๊ฐ์ฒด-ํ…Œ์ด๋ธ” ๋˜๋Š” ํ…Œ์ด๋ธ”-๊ฐ์ฒด ์ž๋™ ๋ณ€ํ™˜์œผ๋กœ ์ธํ•ด ๊ฐœ๋ฐœ์ด ๋‹จ์ˆœํ•ด์ง
  • ๊ฐœ๋ฐœ ๋‹จ์ˆœํ™”์— ๋”ฐ๋ฅธ ์ ์€ ๊ฐœ๋ฐœ๊ณผ ์ ์€ ์œ ์ง€ ๋น„์šฉ
  • SQL๊ณผ ๋น„๊ตํ•ด ์ ์€ ์ฝ”๋“œ๋Ÿ‰
  • ์‹œ์Šคํ…œ ์„ฑ๋Šฅ์„ ํ–ฅ์ƒ์‹œํ‚ฌ ์ˆ˜ ์žˆ๋Š” ๊ฐ์ฒด ์บ์‹ฑ
  • ์œ ์ง€โ€ข๋ณด์ˆ˜ํ•˜๊ธฐ์— ๋” ๋น ๋ฅด๊ณ  ์‰ฌ์šด ๊ฒฐ๊ณผ

๋‹จ์ 

๐Ÿ’ป ์˜ˆ์ œ


  • Java
public class User{
    private String name;
    private int age;
    private String gender;
    //implement methods
}
  • iBatis
<select id="getUser" resultClass="com.iamhyunji.user.domain.User">
    SELECT name, age, gender
    FROM User
    WHERE name = #name#;
</select>

Java ์˜ˆ์ œ์ด๋‹ค.

ORM์„ ์ด์šฉํ•˜๊ธฐ ์ „์— ๋จผ์ € User๋ผ๋Š” ํด๋ž˜์Šค๋ฅผ ์ •์˜ํ•œ๋‹ค.
Application์—์„œ ์‚ฌ์šฉํ•˜๊ณ ์ž ํ•˜๋Š” ๊ฐ์ฒด๋ฅผ ์ •์˜ํ•˜๋ฉด, ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ์กฐ์ž‘ํ•˜๊ณ ์ž ํ•  ๋•Œ, Java์˜ ๊ฐ์ฒด-๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ ํ…Œ์ด๋ธ” ๊ตฌ์กฐ๋ฅผ iBatis ORM ํ”„๋ ˆ์ž„์›Œํฌ๊ฐ€ ๋งคํ•‘ํ•ด ๊ฒฐ๊ณผ๋ฅผ ๋‚ด์ค€๋‹ค.

  • Node.js
// Knex
knex("user")
  .select()
  .where({ name: 'Chris' });

// Sequelize
models.User.findAll({
  	where: { name: 'Chris' }
})

Node.js ์˜ˆ์ œ์ด๋‹ค.

๊ฐœ๋ฐœ์ž๊ฐ€ SQL์„ ์ž‘์„ฑํ•˜๊ณ , ORM์€ ๊ฐ์ฒด-ํ…Œ์ด๋ธ”์„ ๋งคํ•‘ํ–ˆ๋˜ Java์™€ ๋‹ฌ๋ฆฌ Node.js์—์„œ๋Š” SQL ์ฟผ๋ฆฌ๋งˆ์ € ์ž‘์„ฑํ•˜์ง€ ์•Š์•˜๋‹ค.

๋Œ€์‹  ๊ฐœ๋ฐœ์ž๋Š” ์ œ๊ณต๋˜๋Š” API ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜๊ณ , ORM์€ ํ•จ์ˆ˜์— ํ•ด๋‹นํ•˜๋Š” ์ฟผ๋ฆฌ ์ƒ์„ฑ ๋ฐ ๋ฐ์ดํ„ฐ๋ฅผ ๋งคํ•‘์‹œ์ผœ ๊ฒฐ๊ณผ๋ฅผ ๋‚ธ๋‹ค.

๐Ÿ”— ์ฐธ๊ณ โ€ข์ถœ์ฒ˜


profile
Lv0. ์›น ๊ฐœ๋ฐœ (โค๏ธโค๏ธโค๏ธ๐Ÿค)

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