본문 바로가기

웹/mysql

hibernate 가 필요한 이유

안녕하세요 

옥돌소녀 입니다. 

오늘은 hibernate라는 개념에 대해 설명해드리려고 합니다. 

 

1. hibernate 란 

 

- ORM Framework 

 

hibernate 란 orm framework 입니다. 

여기서 orm framework란 object relation mapping framework 를 의미합니다. 

객체 (object)와 관계형 (relation) 간의 매핑, 대응 (mapping)를 해주는 프레임워크, 툴(framework) 라고 보시면 됩니다. 

 

object는 개발자가 개발할 때 사용하는 객체 지향적 프로그래밍 방법 에서 객체를 그래프 형태로 표현하는 과정에서 객체 라는 개념이 나온 것이고 

relation 이라는 것은 db관리자가 데이터베이스를 관리할 때 사용하는 테이블에서 관계 라는 개념이 나온 것입니다. 

hibernate 는 개발자가 프로그래밍 할 때 사용하는 object 라는 개념과 데이터베이스를 관리할 때 사용하는 relation 라는 개념을 

연결해주는 역할을 하게 됩니다.

 

- Purpose ) Object Persistence 

 

이처럼 두 개념 간의 연결(매핑) 관계를 가지게 된다면 어떤점이 좋을까요 ? 

중간 다리 역할을 하는 hibernate 가 있다면 개발자도 편할 것이고 데이터베이스 관리자도 편할 것입니다. 즉 객체라는 개념을 

persistence (영구적) 으로 사용할 수 있을 것입니다. 

 

- Process ) 3 Ways to Use Persist Data 

 

그림으로 간단히 표현하자면 개발의 순서 및 프로세스가 다음과 같이 될 것입니다. 

web application ---> crud ( create/ update / delete / select ) ----> database 

개발자는 application 에서 crud를 통해 데이터베이스에서 데이터를 제어하게 됩니다. 

그러나 hibernate 를 사용한다면 crud의 역할을 hibernate 가 담당하므로 

개발자는 hibernate만 호출한다면 crud의 문법과 세부 내용을 다 구현하지 않아도 되므로 굉장히 편해질 것입니다. 

 

그렇다면 개발자가 데이터를 이용하기 위한 3가지 방법에는 어떤 것이 있을까요 ?

1 )  JDBC 를 이용하는 방법입니다. ( jdbc driver를 class에서 로드하여 crud 명령어를 사용하여 데이터를 조작하는  방법 입니다 )

2 ) Spring JDBC를 이용하는 방법 ( Spring template 를 이용하여 driver 호출 없이 crud 명령어를 사용하여 데이터를 조작할 수 있습니다) 

3 ) hibernate 를 이용하는 방법 (orm framework를 이용하여 crud 역할을 대신 hibernate 가 하도록 위임하는 방법입니다. )

 

2. hibernate의 필요성 

 

hibernate를 사용하면 어떤점이 좋을까요 ? 그리고 객체와 테이블은 전혀 다른 것인데 mapping 이 가능할까요 ? 

 

- Problems ) 

 

학생에 대한 객체와 학생 정보에 대한 테이블이 있다면 두 대상 사이는 mismatch (차이) 가  존재합니다.

속성 혹은 칼럼이 의미하는 바는 같을 수 있지만 둘은 다른 형태이기 때문에 중간에 매칭되는 것에 있어서 한계가 있을 수는 있겠죠 

예를 들어 잠깐 mismtach 가 어떤 경우에 발생하는 지 살펴보겠습니다. 객체나 테이블이 가지는 고유한 특징이 있을 때 

완벽히 mapping( 연결) 하기가 어려울 것 입니다. 

 

1)  상속 - 객체에서는 상속이라는 개념이 있습니다. 그러나 데이터베이스에서는 상속이라는 개념이 없어 mismatch 가 발생합니다. 

2) 동일성 - 데이터베이스에서는 데이터가 key 값으로 구분이 됩니다. 그래서 key 값 이 같다면 같은 row 라고 볼 수 있지만 

객체에서는 데이터베이스와 같이 완전히 동일한 객체  object identity  (동일 객체) 가 있지만 이 외에도 

가리키는 객체가 달라도 내용이 같으면 object equality (유사 객체) 가 존재합니다. 

3) 참조 - 객체에서는 reference(참조) 로 표현하지만 데이터베이스는 명시적으로 foreign key라는 값이 존재합니다. 

4) 탐색 - 객체를 순회할 때는 auger.getBilingDetails().getAccountNumbers()와 같이 함수를 써서 . 연산자를 기준으로 순회하지만 

데이터베이스에서는 join이라는 연산자를 이용하여 테이블 자체를 연결하고 범위도 다를 수 있습니다. 

 

이와 같은 경우들로 객체와 데이터베이스 간의 차이가 발생합니다. 

 

 

- Effort ) 

 

개발자는 자신이 설계한 객체 모델에 집중할 수 있어 테이블 구조에 신경쓰지 않고 객체 지향적 프로그래밍을 유지할 수 있습니다. 
SQL 문을 굳이 몰라도 프로그래밍을 할 수 있고, 객체 모델에 기반해서 프로그래밍을 할 수 있습니다.

 

 

 

' > mysql' 카테고리의 다른 글

insert, delete,update  (0) 2019.11.18
서버-로그인,비밀번호 확인  (0) 2019.11.15
문법  (0) 2019.11.15
mysql -insert  (0) 2019.11.14