brunch

You can make anything
by writing

C.S.Lewis

by 서오석 Jun 29. 2015

ActiveRecord와 Hibernate

차이점 비교

회사에서 올해 초에 Spring + Spring JPA + Hibernate로 프로젝트를 진행하고 나서 ORM Framework에 재미가 들렸다. 그러던 중 이번에 Ruby on Rails(이하 RoR)를 사용하는 프로젝트에 참여하게 되었는데 Rails의 ActiveRecord와 Hibernate가 비슷하면서도 차이가 있어  정리해본다. 


일단 Java 진영의 대표적인 ORM인 Hibernate와 Ruby 진영의 대표적인 ORM인 ActiveRecord는 언 듯 보면 매우 비슷하다. (같은 ORM Framework니까 당연..;) 


근데 약간 깊이 들어가면 차이점이 있는데 마틴 파울러의 P of EAA에 아주 잘 설명되어 있다.


Rails의 ActiveRecord는 ActiveRecord Pattern으로 사용하게 된다.

Person 객체 안에서 insert, update를 한다.

ActiveRecord는 위 이미지처럼 Domain 안에서 데이터베이스에 객체를 컨트롤(CRUD)하도록 되어있다. 


반면 Hibernate는 DataMapper Pattern 형태로 사용하게 된다.

Person Mapper가 CRUD를 한다. Domain과 Mapper가 분리된 형태이다.

Hibernate는 Domain과 Mapper가 분리되도록 구현하며 DB를 완전히 Domain 객체에서 격리시킨다.


사실 둘 중에 어느게 더 좋은가? 라는 질문은 무의미한  듯하다.


Domain 객체가 단순한 비즈니스 로직을 갖는 프로젝트의 경우 ActiveRecord가 더 좋은 선택이다.

단순한 로직인 경우 굳이 Mapper까지 만들어서 DB를 격리시킬 필요가 없기 때문이다. 

(물론 단순한 비즈니스 로직을 갖는 프로젝트라고 하더라도 DB를 완전히 격리시켜서 개발을 해야 할 때가 있긴 하다.)  


반면 비즈니스 로직이 매우 복잡한 경우는 Domain과 DB 간 Mapper Layer를 두어서 DB를 완전히 격리시키는 것이 유지보수도  좋을뿐더러 Domain이 지저분해지지 않는다. 


쓰다 보니 ActiveRecord 패턴과 DataMapper 패턴간의 차이점을 설명하게 되었지만.. 각 패턴을 가장 잘 나타내는 게 Rails의 ActiveRecord이고 Java 쪽의 Hibernate라서 개발시에 참고를 하면 좋을 것 같다. 



* Reference 

Enterprise Application Architecture: Mapping to Relational Databases

- 하이버네이트를 안 쓰는 것에 대한 변명 by 김성철

Catalog of Patterns of Enterprise Application Architecture by martin fowler

브런치는 최신 브라우저에 최적화 되어있습니다. IE chrome safari