Active Record VS Data Mapper

HyoKwangRyu·2020년 9월 6일
4

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개의 댓글