Skip to content

TypeORM

Dokyun Kim edited this page Nov 27, 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://en.wikipedia.org/wiki/Active_record_pattern
  2. https://en.wikipedia.org/wiki/Data_mapper_pattern
Clone this wiki locally