ORM patterns (Active Record vs Data Mappers)

wnwl1216·2021년 5월 24일
1

Java JPA를 통해 처음으로 ORM을 접한 입장에서 Active Record Pattern을 접했을 때 왠지 모르게 이상하다고 생각했다. 그럼 과연 항상 Data Mappers Pattern이 맞고 더 좋을까에 대한 고민이 들어 이글을 작성한다.
본격적으로 두 패턴에 관해 설명하기 앞서 알아두어야 할 몇 가지 개념들에 대해 먼저 정리가 필요해 보인다.

Persistence (영속성)

프로그램이 동작하는 동안 생성된 데이터는 어딘가 저장하지 않으면 프로그램 종료 시 사라지고 만다. 그래서 우리는 프로그램이 종료되어도 데이터가 존재할 수 있도록 데이터에 영속성 부여한다. 보통 영속성은 파일 시스템, 관계형 데이터베이스(RDB), 객체 데이터베이스를 활용하여 구현한다.

Persistence Framework

프로그램의 데이터를 효율적으로 DB에 저장, 조회, 변경, 삭제를 진행 할 수 있도록 도와준다.
종류는 아래와 같다.

  • ORM
  • SQL Mapper

ORM 이란?

ORM은 Persistence Framework의 한 종류로서 객체를 RDB에 매핑해주는 역할을 담당한다. 객체 모델과 관계형 모델 간에 불일치를 해결해 줌으로써 Application을 객체 중심으로 개발할 수 있게 도와준다.
ORM은 또다시 두 가지 패턴으로 나눌 수 있다.

  • Active Record Pattern
  • Data Mappers Pattern

돌고 돌아 드디어 이 글에 주제인 ORM의 패턴이다.

Active Record Pattern

DB의 테이블의 하나의 row를 하나의 객체로 매핑하는 형식이다. 이 맵핑된 객체는 데이터뿐만 아니라 저장, 삭제, 조회, 갱신과 같은 기본 CRUD method도 포함하고 있다.
예)

$user = new User;  
$user->username = ‘philipbrown’;  
$user->save();  

장점

  • 직관적이여서 이해하기 쉽다.

단점

  • DB와 결합도가 높다.

Data Mappers Pattern

Data Access Layer로서 도메인 계층과 데이터 저장소 사이에서 데이터 전달을 담당하며 두 계층을 완전히 분리하는 형식이다.

$user = new User();
$user->username = ‘philipbrown’;  
$entityManager->persist($user);
$entityManager->flush();

장점

  • 도메인과 DB의 완전한 분리로 유연하다.

단점

  • 설정이 Active Record Pattern 까다롭고 러닝 커브가 높다.

결론

일단 Active Record Pattern은 사용하기 쉽고 프로젝트가 작은 경우 알아보기 쉽다. 반면에 단점은 도메인 로직과 데이터베이스와의 의존성이 깊어 유연성이 떨어진다. 단순 CRUD 중심으로 복잡한 비즈니스 로직이 존재하지 않는다면 간결함, 생산성 측면에서 Active Record Pattern도 충분히 좋은 선택이다. 하지만 도메인이 복잡하거나 크기가 큰 프로젝트로라면 Data Mappers Pattern이 더 나은 선택이 될 것 같다. 왜냐하면 persistence 로직과 도메인 로직을 분리함으로써 핵심 도메인 로직을 깔끔하게 가지고 갈 수 있어 유지 보수성을 높일 수 있게 때문이다.

References

https://www.thoughtfulcode.com/orm-active-record-vs-data-mapper/
https://firework-ham.tistory.com/110
https://www.youtube.com/watch?v=VTqqZSuSdOk
https://culttt.com/2014/06/18/whats-difference-active-record-data-mapper/
https://www.thoughtfulcode.com/orm-active-record-vs-data-mapper/

0개의 댓글