ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 하이버네이트(Hibernate)
    Study/개발 용어 2021. 1. 26. 16:37

     

     


    하이버네이트(Hibernate)란?

     

    하이버네이트(Hibernate) ORM란 자바 언어를 위한 객체 관계 매핑 프레임워크이다. 객체지향 도메인 모델을 관계형 데이터베이스로 매핑하기 위한 프레임워크를 제공한다.

     

    하이버네이트(Hibernate)는 우리가 흔히 사용하는 DB의 데이터와 코드를 매핑시켜주기 위한 프레임워크다. 비슷한 용도로 사용되는 것이 iBatis / myBatis다. iBatis / myBatis는 JDBC 드라이버를 사용해 자바 코드와 DB를 매핑해주었다. 나는 마이바티스를 사용했는데, 이 과정에서 XML에 쿼리를 작성했다. (물론 일부 구간은 동적으로 작성할 수 있게 마이바티스에서 제공해 준다.)

     

    사용 용도는 마이바티스/아이바티스와 비슷하지만 작동 원리가 하이버네이트는 전혀 다르다.

     

     

     

     


    ORM 프레임워크

     

    ORM 프레임워크객체와 DB를 매핑해주는 프레임워크다. 그동안 나는 마이바티스도 ORM 프레임워크라고 생각하고 있었지만, ORM의 경우 직접 쿼리를 작성하지 않고도 객체가 DB에 접근할 수 있다. ORM 프레임워크는 객체와 DB 테이블 관 관계를 설정하고 자동으로 처리하게 해준다.

     

     

     

     


    SQL mapper와의 차이

     

    SQL mapper는 직접 DB와 객체를 매핑하기 위해 SQL 쿼리문을 작성해야 했다. 내가 그동안 사용해왔던 마이바티스가 그 예다. 마이바티스의 경우 XML 파일에 직접 SQL를 작성해야 한다. 쿼리로 DB를 불러오는 방식을 사용하는 것이다. 물론 동적으로 변화하는 부분 (예를들어 where 절)을 설정할 수 있지만 쿼리를 코드 단에 그대로 작성하므로 보안/유지보수가 미흡하다.

    자바 SQL mapper 마이바티스

     

    그러나 하이버네이트 같은 ORM 프레임워크의 경우, 직접 쿼리를 작성하지 않고 JPA로 명세된 테이블 정보를 이용해 객체와 DB를 매핑시킨다. 즉, 코드에 직접 쿼리를 작성할 필요가 없다. 

     

     

     

     

     


    장점은? 

     

    앞서 말했듯 직접 쿼리를 작성하지 않는 것이 하이버네이트의 가장 큰 장점이라 할 수 있다. 동아시아에서는 마이바티스/아이바티스를 여전히 사용하고 있지만 이러한 장점 때문에 전 세계 개발자들이 자바의 매퍼로 하이버네이트를 사용하는 경우가 많다. 

     

    또한 직접 쿼리를 매핑하는 방식이었던 SQL 매퍼보다 작성해야하는 코드 양이 절대적으로 줄어든다고 한다. (이것은 내가 하이버네이트를 직접 써보지 못해서 아직까지 몸으로 체감하지는 못했다.)

     

    과거에는 하이버네이트가 직접 쿼리를 작성하는 SQL 매퍼보다 속도 면에서 뒤쳐졌지만 꾸준한 개선으로 속도 역시 향상됐다.

     

     

     

     


    치며...

     

    국내 다수의 회사에서는 웹 개발을 할 때 Spring 프레임 워크를 사용한다. 그런데 오래 전에 발표되고 현재는 지원조차 끝난 Spring 3.0이 여전히 현업에서 사용된다고 할 때 의문을 가졌다. 그 이유는 Spring이 4.0 ver 이후에는 마이바티스/아이바티스 지원을 하지 않고 하이버네이트 지원을 하기 때문이다. 마이바티스/아이바티스를 포기하지 못하는 국내 IT 기업들이 아직까지 Spring 3.0을 사용한다고 한다.

     

    우리 회사에서도 Spring 프레임워크의 버전 업에 대한 논의가 오가며 ORM 프레임워크를 바꾸는 것에 대해 이야기가 나오고 있다. 기존 사용하던 툴을 바꾸는 것은 쉽지 않지만 변화하는 개발 트렌드를 위해서는 새로운 툴의 도입이 필요하다.

     

     


     

     

    'Study > 개발 용어' 카테고리의 다른 글

    소켓(Socket) 통신  (0) 2021.01.19
    하드코딩(Hard-coding)  (1) 2021.01.18
    API (Application Programming Interface)  (0) 2021.01.15
    스레드 (Thread)  (0) 2021.01.15
    데이터 바인딩 (단방향 바인딩, 양방향 바인딩)  (1) 2021.01.12

    댓글

Designed by Tistory.