728x90
300x250

[이야기] Maven, Oracle 19, Hibernate 5.4 - ORM 구현 및 동작하나요?


인터넷 글 등을 참고해보면, 대다수 검색되는 내용이 "Spring + Maven + Hibernate + MySQL" 조합의 글들이 굉장히 많이 나온다.

해외 사이트를 찾아서 참고해보면, "Maven + Hibernate + MySQL" 조합도 종종 나온다.

StackOverflow에 Oracle 19g와 Hibernate를 사용할 때 Dialect을 어떤 것을 사용해야 하는지 검색을 해보았다.

Oracle 12버전으로 하면 된다고 해서 시도하였으나 동작하지 않았다.



* 오라클로 작업을 하고자 하는 인원이 있다면, 참고하면 좋겠다.


* 결론: 수 차례 실험 결과로는 동작하지 않는다. (2020-09-20일 기준)



- 오라클 데이터베이스 자체가 전혀 안 된다는 이야기는 아니고, Dialect 등이 엄격하게 버전을 인식하는 것으로 추측해본다.
  (실험을 해보면 Oracle 11, Oracle 12로 시도했을 때는 될 수도 있다는 이야기를 하고 싶었다.)
- 물론 시간적인 여력이 된다면, 연재해보겠다. 

  (오라클 제거하고, 컴퓨터 포멧이나 VirtualBox 등 각종 방법으로 실험을 한다고 했을 때 시간이 소요되는 작업이다. 결코 쉽지않은 작업들이다.)




1. 작업화면


수 차례 실험하였으나 동작하지 않는다.



그림 1. hibernate Maven 프로젝트




2. 실험 환경


* 컴퓨터 사양: intel i5 4세대 이상, SSD 256GB 이상, RAM 16GB 이상

* 시도 횟수: 4번(hibernate 초기 로드시간이 상당히 오래 걸림.) - 코드 작성 / 재작업 등 각종 숨은 디버깅 작업이 있었음.

              데이터베이스 테이블도 구현하였고 각종 작업을 하였음.


* IDE: Spring-tool-suite-4-4.7.2 Release(Eclipse)

     Jboss - hibernate만 설치


* POM:

      java-servlet

      hibernate-em(entity-manager)

      oracle-19g(ojdbc8)


* Database: 

      Oracle Databases 19g


* Web Server:

      Apache Tomcat 9


* 환경설정 파일 생성: Jboss - hibernate로 자동 생성하였음. (src/main/resources 폴더 내에 hibernate.cfg.xml 설치함)


* 프로젝트


   - [첨부(Attachments)]

hibernateMaven.zip


특이한 점: 초기 웹서버를 리셋하고, URL주소를 입력하여 DB에 접근하면 무한 반응으로 대기상태에 한참 있다가 hibernate 동작에서 

한참 대기 후에 결과가 나옴.


<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN"

                                         "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">

<hibernate-configuration>

 <session-factory name="">

  <property name="hibernate.connection.driver_class">oracle.jdbc.driver.OracleDriver</property>

  <property name="hibernate.connection.url">jdbc:oracle:thin:@localhost:1521:orcl</property>

  <property name="hibernate.connection.username">사용자계정</property>

  <property name="hibernate.connection.password">비밀번호</property>

  <property name="hibernate.dialect">org.hibernate.dialect.Oracle12cDialect</property>

  <property name="hibernate.show_sql">true</property>

  <property name="hibernate.use_sql_comments">true</property>

  <property name="hibernate.format_sql">true</property>

  <mapping class="com.hibernateMaven.web.model.EmpTable"/>

 </session-factory>

</hibernate-configuration>


* 파일명: hibernate.cfg.xml

* 비고: Dialect이 지원될 때까지는 기다려야 할 것으로 보인다. 이전 Dialect으로 연결 시도를 해도 된다는 Stackoverflow 글도 참고하였으나 확인되진 않았다.

        (2020-09-21)



그림 2. JBoss Tools 4.16.0. Final



그림 3. Maven Project 생성 모습의 예



그림 4. 프로젝트 오른쪽 버튼 -> New -> Other....



그림 5. Hibernate 환경설정 파일 - 마법사 (JBoss 기반)



그림 6. Hibernate 환경설정 파일 - 마법사 (JBoss 기반)




그림 7. Hibernate 환경설정 파일 - 마법사 (JBoss 기반)



그림 8. Hibernate 환경설정 파일 생성된 모습


JBoss - Hibernate 플러그인을 설치하면, GUI화면으로도 작업할 수 있다.



그림 9. Hibernate 환경설정(GUI)으로 Mapping 시도하는 모습


실험하면서 동작하였으면, 좋은 글 하나 나왔을 탠데 아쉽다는 조금 생각이 든다.


현재 시중 블로그에 제대로 동작하는 Hibernate + Maven + Oracle 18 이상의 프로젝트는 없다고 보면 정확할 거 같다.

OpenTutorial 이런 강의 사이트 동영상도 참고해보기도 하고, 많은 시간을 투자하였다.





3. 결론(Conclusion)


안 될 때는 과감하게 정리해야 한다. 시도해볼만한 삽질이라면, 해야 하는게 맞지만, 오래 시도하기에는 애매한 작업들이 있다.


Hibernate보다는 MyBatis가 좋다고 보는게, 직관적으로 SQL 문법을 자유롭게 사용할 수 있다는 게 큰 장점이라고 본다.

ORM(객체-관계-맵핑)이라는 주제도 물론 중요하지만, 그거 필요하면 코드로 그냥 구현해서 사용하는 게 더 이득이고 낫다고 주장해본다.


엔터프라이즈 환경에 적합하다고 적은 교과서도 시중에 있긴 있는데, 꼭 그렇진 않은 거 같다고 본다.

서버 튜닝으로 막아도 무방하고, MySQL 이런 것도 예를 들면 튜닝이나 Cluster 등 다양한 방법론을 잘 적용하면 엔터프라이즈에서도 사용할 수 있다고 본다.


SQL 문법이 크게 어려운 것이 아니니깐, ORM은 여전히 시기상조라고 주장해본다.

더 복잡해지고 개발환경이나 생산성에서 미흡한 점이 여전히 남아 있다.

반응형

+ Recent posts