스프링프레임워크, 자바

ORM 의 두가지 디자인 패턴

마리오64 2020. 10. 17. 14:38

ORM (Object Relational Mapper) 은 객체지향적 프로그래밍에서

객체들의 관계를 설정하여 DB를 관리하는 기술입니다.

ORM에는 크게 두가지의 디자인패턴이 있습니다.

자바EE에서 적용된 데이터맵퍼 패턴

루비의 루비온레일즈에 적용된 엑티브레코드 패턴입니다.

소프트웨어 엔지니어인 마틴파울러가

2003년 Patterns of Enterprise Application Architecture 라는

책에서 주장한것입니다.

데이터 맵퍼 패턴

데이터 저장하는 계층(ORM의 일부)과 클래스를 연결하는 맵퍼가 있습니다.

이 맵퍼를 Entity 클래스라고 부릅니다.

Entity 클래스에서 DB관련된 작업을 하게됩니다.

장점

1.클래스에서 DB와 관련된 작업이 분리되어 유지관리, 수정이 쉽습니다.
2. 객체에 잘못된 값이 들어와서 DB에 가기전에 Entitiy 클래스에서 유효성을 검증할 수있기 때문에 안전하다고 합니다.

단점 - Entity클래스를 만들어야 합니다. 소규모에서는 복잡하다고 느낄 수 있습니다.

엑티브 레코드 패턴

클래스와 DB테이블을 맵핑합니다.

장점 - 객체와 DB 레코드가 일치하기 때문에 간단합니다. 빨리 만들 수 있습니다.

단점 - DB의 스키마가 변경되면 코드를 수정해야됩니다.

 

---

따라서 장기적이고 대규모 프로그램에는 그에 따른 코드 수정량이 많아져 적합하지 않다고 느껴졌고요

현재는 다른 언어들에도 ORM프레임워크가 많이 나왔고

어떤 ORM 프레임워크에서는 두가지 방식 중 선택해서 쓸 수있습니다. 예) 노드js 쪽의 TypeORM

자바 진영은 엔터프라이즈 규격인 JAVAEE를 따라서 하이버네이트, JPA가 유지보수에 유리한 데이터 맵퍼 패턴인거군요

PHP 라라벨 프레임워크의 엘로퀀트ORM은 엑티브레코드이라고 하는데 필요에따라 데이터 맵퍼패턴인 독트린2 ORM으로 바꿔서 시작할 수도 있습니다.

 

언제나 기술에는 장단점이있고 상황에 맞춰 적용하는게 중요하다는걸 느끼게 되네요

반응형