Development/Nest.js
[NestJS] [TypeOrm] Active Record 패턴vs Data Mapper 패턴
Tunko
2021. 4. 13. 22:21
Active Record 와 Data Mapper 는
TypeOrm에서 사용 되는 일종의 패턴을 의미한다.
- Active Record 예시
// 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 entity 에 접근헤서 CRUD 기능을 구현한다 했을떄 매 쿼리마다 바로 new User() 등을 사용해 객체를 생성해서 제공되는 메서드를 사용해 DB 에접근하는 방식
- Data Mapper 예시
```javascript
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" });
위 예시와 별반 다를 건 없다 다만 한가지 다른점은
const userRepository = connection.getRepository(User);
이 부분이다. 즉 이건 해당 Entity 전용 메니저 클래스를 만들어 사용할때를 의미한다.
요약
어떤 패턴이 좋고 나쁘다곤 할 수 없다.
접근성이 좋은 방식은 Active Record 방식이다. 단순하고 작은 앱에서 유용하다고 한다.
Data Mapper 는 Entity별로 별도의 매니저클래스를 두는 방식이다. 이 방식은 규모가 있는 앱에서 효과적이다.
반응형