Skip to content

TypeORM

sang-gyeong lee edited this page Dec 4, 2020 · 4 revisions

TypeORM

TypeORM์€ Active Record ํŒจํ„ด๊ณผ Data Mapper ํŒจํ„ด ๋ชจ๋‘ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•˜๋‹ค.

Active Record ํŒจํ„ด

์ด ํŒจํ„ด์„ ๋”ฐ๋ฅด๋Š” ๊ฐ์ฒด์˜ ์ธํ„ฐํŽ˜์ด์Šค์—๋Š” ์‚ฝ์ž…, ๊ฐฑ์‹ , ์‚ญ์ œ์™€ ๊ฐ™์€ ํ•จ์ˆ˜์™€ ํ…Œ์ด๋ธ”์˜ ์—ด์— ํ•ด๋‹นํ•˜๋Š” ํ”„๋กœํผํ‹ฐ๊ฐ€ ์žˆ๋‹ค. ์ดํ•ดํ•˜๊ธฐ ์–ด๋ ต๋‹ค๋ฉด ์•„๋ž˜์˜ ๊ด€๊ณ„๋ฅผ ํ†ตํ•ด ์ดํ•ดํ•ด๋ณด์ž.

  • ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ ํ…Œ์ด๋ธ”(๋˜๋Š” ๋ทฐ)๊ฐ€ ํด๋ž˜์Šค์— ํ•ด๋‹นํ•œ๋‹ค.
  • ํ…Œ์ด๋ธ”์˜ ํ–‰์€ ํด๋ž˜์Šค์˜ ์ธ์Šคํ„ด์Šค์— ํ•ด๋‹นํ•œ๋‹ค.

์˜ˆ์‹œ (TypeORM)

// example how to save AR entity
const user = new User();
user.firstName = "Timber";
user.lastName = "Saw";
user.isActive = true;
await user.save();

// example how to remove AR entity
await user.remove();

// example how to load AR entities
const users = await User.find({ skip: 2, take: 5 });
const newUsers = await User.find({ isActive: true });
const timber = await User.findOne({ firstName: "Timber", lastName: "Saw" });

(User ํด๋ž˜์Šค์— static ๋ฉ”์„œ๋“œ๋ฅผ ์ถ”๊ฐ€ํ•˜์—ฌ ์ปค์Šคํ…€ find ๋ฉ”์„œ๋“œ๋ฅผ ๋งŒ๋“ค ์ˆ˜๋„ ์žˆ๋‹ค.)

Data Mapper ํŒจํ„ด

์ด ํŒจํ„ด์€ ๋ฆฌํฌ์ง€ํ„ฐ๋ฆฌ๋ผ๊ณ  ๋ถˆ๋ฆฌ๋Š” ๋ณ„๊ฐœ์˜ ํด๋ž˜์Šค์— ์ฟผ๋ฆฌ ๋ฉ”์†Œ๋“œ๋ฅผ ์ •์˜ํ•˜๋Š” ํŒจํ„ด์ด๋‹ค. ๋ชจ๋ธ ์•ˆ์—์„œ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์ ‘๊ทผํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ ๋ฆฌํฌ์ง€ํ„ฐ๋ฆฌ ์•ˆ์—์„œ ์ ‘๊ทผํ•˜๋Š” ๊ฒƒ์ด๋‹ค.

์˜ˆ์‹œ (TypeORM)

const userRepository = connection.getRepository(User);

// example how to save DM entity
const user = new User();
user.firstName = "Timber";
user.lastName = "Saw";
user.isActive = true;
await userRepository.save(user);

// example how to remove DM entity
await userRepository.remove(user);

// example how to load DM entities
const users = await userRepository.find({ skip: 2, take: 5 });
const newUsers = await userRepository.find({ isActive: true });
const timber = await userRepository.findOne({ firstName: "Timber", lastName: "Saw" });

AR vs. DM

AR: ๊ฐ„๋‹จํ•œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์— ์ ์ ˆ(๊ฐ„๋‹จํ•จ)

DM: ์—”ํ„ฐํ”„๋ผ์ด์ฆˆ ๊ธ‰ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์— ์ ์ ˆ(ํ™•์žฅ์„ฑ)

Reference

  1. https://typeorm.io/#/active-record-data-mapper
  2. https://en.wikipedia.org/wiki/Active_record_pattern
  3. https://en.wikipedia.org/wiki/Data_mapper_pattern


์„ ์ • ์ด์œ ?

  • ์‹œํ€„๋ผ์ด์ฆˆ๋ณด๋‹ค type ORM ์ด ์ข‹์€์ 

    • ์—”ํ‹ฐํ‹ฐ ์„ ์–ธ์ด ์‰ฌ์›€
    • ํŠธ๋žœ์žญ์…˜์„ ์‰ฝ๊ฒŒ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ๊ณ 
    • ๋ ˆํฌ์ง€ํ† ๋ฆฌ ํŒจํ„ด ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์–ด์„œ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์— ์ข€๋” ์ง‘์ค‘ํ•  ์ˆ˜ ์žˆ๋‹ค.
  • ๋ ˆํฌ์ง€ํ† ๋ฆฌ ์‚ฌ์šฉํ•˜๋Š” ํŒจํ„ด์˜ ์žฅ์  ๋ชจ๋ธ์— ์ง‘์ค‘๋˜๊ฒŒ ๋˜๋Š”๋ฐ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์ ‘๊ทผํ•˜๋Š” ์˜์—ญ์„ ๋ ˆํฌ์ง€ํ† ๋ฆฌ์— ์œ„์ž„ํ•จ์œผ๋กœ์จ ์ฑ…์ž„์„ ํ™•์‹คํžˆ ๋ถ„๋ฆฌํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ์žฅ์ 

  • ํŠธ๋ Œ์ง€์…˜ ๋ฐ์ฝ”๋ ˆ์ด์…˜? ํด๋ž˜์Šค์˜ ํŠน์ • ๋ฉ”์„œ๋“œ์— ๋ฐ์ฝ”๋ ˆ์ดํ„ฐ๋ฅผ ๋ถ™์ด๋ฉด ๋‚ด๋ถ€ ์ž๊ฒ๋“ค์ด ํ•œ ํŠธ๋žœ์žญ์…˜์—์„œ ์‹คํ–‰์ด ๋จ.

  • ์•„๊นŒ ๋ ˆํผ์ง€ํ† ๋ฆฌ ํŒจํ„ด์„ ์“ฐ๊ธฐ ์œ„ํ•ด์„œ๋Š” ์‹œํ€„๋ผ์ด์ฆˆ๋Š” ๋‘๊ฐœ์˜ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์จ์•ผํ•˜๋‹ˆ๊นŒ ํƒ€์ž…ORM์„ ์“ฐ์‹ ๋‹ค๊ณ  ํ–ˆ๋Š”๋ฐ, ํŠธ๋žœ์žญ์…˜์„ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ํƒ€์ž…ORM๋„ ๋‘๊ฐœ์˜ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•ด์•ผํ•˜์ง€ ์•Š๋‚˜์š”?

    • ์‹œํ€„๋ผ์ด์ฆˆ ๊ฐ™์€ ๊ฒฝ์šฐ๋Š” ๋Œ€๋ถ€๋ถ„์˜ ์ค‘์š” ๋กœ์ง๋“ค์ด ์‹œํ€„๋ผ์ด์ฆˆ ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ์™€ ์—ฐ๊ด€๋˜์–ด์žˆ์–ด์„œ ํƒ€์ž… ์˜ค์•Œ์— ์„ ์‚ฌ์šฉํ•จ.
Clone this wiki locally