Hibernate vs iBatis

Hibernate vs iBatis

Hibernate vs iBatis 1. 2개의 프레임웍의 분류
a. Hibernate: Object Relational Mapper
b. iBatis: SQL mapper

2. Object Relational Mapper란?
a. Database 엔티티(일종의 테이블 row)와 자바 객체를 동기화 하는 역할을 담당
b. Hibernate는 이러한 역할을 하는 프레임웍
c. 모든 sql문은 프레임웍에서 생성되고 실행됨
d. sql작업이 필요할 경우 HSQL을 통하여 이루어짐(EJB-QL과 유사)
e. HSQL은 실제적인 sql의 앞단에서 처리되는 객체지향 쿼리 랭귀지
f. 종류: hibernate, TopLink, Cocobase, JDO 구현체

3. SQL Mapper
a. 자바객체를 실제 sql 문장에 맵핑.(자바 코드에서 sql 관련부분 제거)
b. Sql 문장은 자동 생성되는 것은 아니고 개발자가 기술해 줌
c. 맵핑 자체는 데이터베이스이 엔티티와 관계(relationship)에 독립적임.

(mapping 자체가 sql문에 국한)
d. 실제적으로 모든 임베디드 sql 시스템은 모두 sql mapper로 간주가능
e. 예: iBATIS SQL Maps, Oracle SQLJ, Forte 4GL Embedded SQL, Pro*C Embedded SQL
f. iBatis sql map의 경우 xml에 임베디드된 sql (자바코드의 sql을 xml 파일로 분리)

4. Hibernate와 iBatis의 비교우위
a. Hibernate와 iBatis는 다른 특성을 갖는 프레임웍임
b. 일차원적인 비교는 불가능
c. 상황에 따라 적용 프레임웍의 효율성이 달라짐
c-1 Hibernate가 적절한 경우
* 새로운 프로젝트가 시작된 상태
* 객체 모델과 데이터베이스 디자인이 미완성인 상태
c-2 iBatis가 적절한 경우
* 3rd party databases에 접근하는 경우
* 레거시 데이터베이스와 연동이 필요한 경우
* 적업하고 디비 디자인이 부적절한 상태(지져분한 설계)시
* O/R Mapper가 이러한 상황을 제어할 능력이 없을수도 있음.
* SQL Mapper를 사용할 경우 객체 모델과 데이터 모델사이의 멥핑에는 아무런 제약 사항이

없음.
* sql문을 인력을 사용하여 수작업으로 tuning이나 최적화를 해야 할경우

5. Performance 측면의 비교
a. 과거 embeded sql mapper
* 컴파일 랭귀지를 사용하여 제작됨
* 매우 빠른속도를 제공하고 시스템 환경에 최적화 되어 있음
b. O/R mapper
* sql mapper에 비하여 다양한 일을 수행
* 대부분 reflection 방식 (hibernate),
* binary code inhencement 방식(JDO).
* hibernate의 향후 버전에서는 binary code inhencement방식을 채용
* reflection 방식을 사용한다는 측면은 iBatis와 공통점

6. 프레임웍 성능비교는 무의미
a. 프레임웍 성능이란 프레임웍을 어떻게 사용하는 방식에 따라서 결정
b. 일반적으로 O/R mapper가 sql mapper에 비해서 훨씬더 효율적인 맵핑을 하고 수행전략을

수립.
c. O/R mapper는 객체 모델과 데이터베이스 모델에 대한 광범위한 정보를 포함있음
d. 간단한 CRUD 어플리케이션에 테이블-클래스 맵핑을 사용한다면 단순성과 성능이란

측면에서 O/R mapper많은 장점을 갖고 있음
f. 복잡한 데이터 전송방식의 환경에서는 sql mapper가 효율적임
g. Sql mapper가 더 효율적인 sql의 장점들을 표출할 수 있음

7. 결론

a. 하나이상을 선택하여 테스트 해보라.
b. 프로젝트에 대한 컨셉에 따라 세밀하게 테스트 해보라.
c. 모든 프로젝트의 특정은 모두 다르며 상황에 따라 Hibernate, iBATIS SQL Maps, TopLink,

raw JDBC를 유연하게 사용해야 함

8. 필자의 의견 (Clinton Begin-iBatis 개발자)

이러한 이유에서 다양한 툴(프레임웍)을 빠르고 효과적으로 선택하고 테스트 하는 방법을 배우는

것이 더 중요하고 유용하다. 프레임웍중 하나만을 사용할 줄 아는 것은 중요한 것이 아니다.

다양한 상황에서 연습을 해보고, 더 좋은 결정을 내려보시길 바랍니다. 성배를 찾는 것은 중요한

것이 아닙니다