Active Record VS Data Mapper

HyoKwangRyu·2020년 9월 6일

ORM

ORM은 개념이다.
객체를 관계형 DB에 매핑하는것을 의미한다.

ORM의 구현 방식은 다양하게 있다.
이번에 이야기할 Active Record Pattern 이나 Data Mapper Pattern은 ORM의 구현체다.

Active Record Pattern

이 패턴은 DB 모델이 데이터에 엑세스 하는 방법이다.
DB는 모델 객체에 랩핑되고, 각 개체들은 하나의 row에 연결된다.

모델은 DB 스키마를 보면서 자동으로 모델 속성들을 결정할 수 있다.

특징

  • 각 모델은 base Active Record 객체를 상속받는다. 그래서 Base클래스의 모든 메소드를 사용할 수 있다.
  • 일반적으로 save(), find()같은 메소드를 제공한다.
  • 직관적이어서 쉽게 시작 가능하다.

Data Mapper Pattern

persistent layer(DB)와 모델을 완전히 분리한다.
매퍼가 모델과 DB사이에서 데이터를 이동시킨다.

-> 모델 객체는 DB에 관해 아무것도 모른다.
-> 모델과 DB사이에 의존성이 적어져, 서로가 독립적으로 유지될 수 있다.

특징

  • 도메인 객체는 어떻게 데이터베이스에 저장되는지 몰라도 됨.
  • 객체가 가벼워진다. Base ORM 객체 상속을 안하니까.
    대신 훨신 엄격하고 포멀하게 데이터베이스와 소통해야함.
  • save() 같은거 없음.

VS

1. 어떤 앱을 만들것인가.

CRUD based VS Domain based

CRUD based -> Active Record

코드가 깔끔하게 디비로 매핑됨.

모델간 관계를 구현할때, 엄격하게 룰을 정하지 않음

→ 빠르고 쉽다.

Domain based -> Data Mapper

하지만 비즈니스로직 수행이나, 어떤 룰을 잘 만족 시켜야하는 앱에서는 Data Mapper를 사용하자.

데이터 매퍼 패턴은 데이터와 데이터의 영속성을 다루는 제약사항들을 강력하게 한다.

엔터티들과 함께 비즈니스 룰의 캡슐화를 가능하게 한다.

2. 어떤 환경에서 실행될 앱인가.

새 시장을 테스트하기 위한 MVP 앱. → Active Record Pattern

(이미 존재하는 시장)레거시 시스템에서 새 앱을 만들때 → Data Mapper

이미 룰들이 있고, 비즈니스 시행 사항들이 있다.

결론

레일즈로 CRUD를 만들다가 스프링으로 똑같은 것을 만들어 보면, 굉장히 답답할 수 있다.
나도 그런 느낌을 받았다.
추가 레이어가 많네? 필요한 걸까? 할게 많아지네?

반대로 스프링을 하다가 레일즈나 장고를 써보면, 뭔가 대충 만드는 느낌이 들 수 있을 것 같다.

정답은 없다.
상황에 맞게 적절히 사용하자.

profile
Backend Developer

0개의 댓글