본문으로 바로가기

I would like to know how to configure and utilize both H2 DB and Oralce DB in a Spring Boot application. Could you provide me with a sample code snippet?

이번에는 ChatGPT 와 구글링을 동시에 진행 해 보면서 내용을 정리하고자 한다. GPT 에게 영어로 질문하는 것이 속도와 데이터 질 측면에서 더 효율적이라는 걸 느낄 수 있었다. 이렇게 영어공부를 더 열심히 해야겠다는 생각이 든다....

제목과 같이 이번에는 H2, ORACLE DB 를 동시에 연동하는 SAMPLE CODE를 진행하고자 한다. 

 

우리가 연결하는 db connection 은 JNDI 기술을 이용한 것, Java Naming Directory Interface. was 에서 해당 클래스를 찾아서 연결하는 것. java application 이 아닌 WAS..Tomcat 에서...Springboot 내부 tomcat 에서 사용하는 것이였네...

# Oracle Database
oracle.datasource.url=jdbc:oracle:thin:@localhost:1521:XE
oracle.datasource.username=your-username
oracle.datasource.password=your-password
oracle.datasource.driver-class-name=oracle.jdbc.OracleDriver

 

sqlSessionFactory => 단순하게 sqlSession 생성.
sqlSessionTemplate => sqlSession 인터페이스 구현, thread-safe, 트랜잭션 관리 용

** @MybatisTest  : mybatis query test 시 유용할듯?

1. DBCP 란?

Database Connection Pool 의 약자이다. 요청이 올때마다 Connection 객체를 얻는 것이 아닌, 미리 일정 갯수 찍어내서 Connection Pool 로 관리하는 것이다. DBCP를 사용치 않으면 아래와 같은 과정을 거친다.

  1. DB 서버 접속을 위해 JDBC 드라이버를 로드한다.
  2. DB 접속 정보와 DriverManager.getConnection() Method를 통해 DB Connection 객체를 얻는다.
  3. Connection 객체로 부터 쿼리를 수행하기 위한 PreparedStatement 객체를 받는다.
  4. executeQuery를 수행하여 그 결과로 ResultSet 객체를 받아서 데이터를 처리한다.
  5. 처리가 완료되면 처리에 사용된 리소스들을 close하여 반환한다.

하지만, DBCP 를 사용하면

  1. WAS가 실행되면서 미리 일정량의 DB Connection 객체를 생성하고 Pool 이라는 공간에 저장해 둔다.
  2. HTTP 요청에 따라 필요할 때 Pool에서 Connection 객체를 가져다 쓰고 반환한다.

이와 같은 방식으로 HTTP 요청 마다 DB Driver를 로드하고 물리적인 연결에 의한 Connection 객체를 생성하는 비용이 줄어들게 된다.