๊ฐ์ฒด ๊ด๊ณํ ๋งคํ์ด๋ผ๋ ๋ป์ผ๋ก, Objectโrelational mapping์ ์ค์ฌ ORM์ด๋ผ ํ๋ค.
ORM์ Java๋ C#๊ณผ ๊ฐ์ ๊ฐ์ฒด ์งํฅ ์ธ์ด๋ก ์์ฑ๋ ๊ฐ์ฒด ์ฝ๋๋ฅผ ๊ด๊ณํ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๋ง๊ฒ ๋ณํ์์ผ์ฃผ๋ ๊ธฐ๋ฅ์ ํ๋ค.
์ด๋ ๊ฐ๋ฐ์๋ SQL์ ์์ฑํ ํ์ ์์ด, ORM์ด ์ ๊ณตํ๋ API ํจ์๋ฅผ ํตํด์ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ ๊ทผโข์กฐ์ํ๋ค.
SQL์ ์ฌ์ฉํ ๋ ๊ฐ๋ฐ์๋ Application ๊ฐ๋ฐ ๋ฟ๋ง ์๋๋ผ ํ ์ด๋ธ์ ๊ตฌ์กฐ์ SQL์ ์ฟผ๋ฆฌ๊น์ง ์ดํดํ๊ณ ๊ณ ๋ คํด์ผ ํ๊ธฐ ๋๋ฌธ์ ๊ฐ๋ฐ์ ์์ด ๋ณต์ก์ฑ์ ์ฆ๊ฐ์ํฌ ์ ์๋ค.
๊ทธ๋ ์ง๋ง ORM์ ์ด์ฉํด ๊ฐ๋ฐ์๋ DB ๊ตฌ์กฐ๋ฅผ ๊ฐ์ฒด๋ก ๋ฐ๋ผ๋ด์ผ๋ก์จ, ์ฟผ๋ฆฌ ๋ก์ง๋ณด๋ค ๊ฐ์ฒด ์งํฅ์ ์ธ ๊ด์ ์์ Application์ ๋ก์ง์ ๋ ์ ๊ฒฝ ์ธ ์ ์๋ค.
public class User{
private String name;
private int age;
private String gender;
//implement methods
}
<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 ํ๋ ์์ํฌ๊ฐ ๋งคํํด ๊ฒฐ๊ณผ๋ฅผ ๋ด์ค๋ค.
// Knex
knex("user")
.select()
.where({ name: 'Chris' });
// Sequelize
models.User.findAll({
where: { name: 'Chris' }
})
Node.js ์์ ์ด๋ค.
๊ฐ๋ฐ์๊ฐ SQL์ ์์ฑํ๊ณ , ORM์ ๊ฐ์ฒด-ํ ์ด๋ธ์ ๋งคํํ๋ Java์ ๋ฌ๋ฆฌ Node.js์์๋ SQL ์ฟผ๋ฆฌ๋ง์ ์์ฑํ์ง ์์๋ค.
๋์ ๊ฐ๋ฐ์๋ ์ ๊ณต๋๋ API ํจ์๋ฅผ ์ฌ์ฉํ๊ณ , ORM์ ํจ์์ ํด๋นํ๋ ์ฟผ๋ฆฌ ์์ฑ ๋ฐ ๋ฐ์ดํฐ๋ฅผ ๋งคํ์์ผ ๊ฒฐ๊ณผ๋ฅผ ๋ธ๋ค.