본문 바로가기
웹개발/전자정부 eGovFrame

[전자정부] eGovFrame 게시판 (2) : 오라클 DB 연동

by 졸린이 2022. 11. 12.
반응형

가벼운 마음으로 개발환경 잡아보고 대충 게시판 공부해보려 했으나.. 놀랍게도 1년만에 글을 쓴다.

사실 시작도 제대로 안하고 놔버렸었다.

어쨋든 다시 해보자..

프로젝트 생성, 세팅 글은 https://hellodoor.tistory.com/210 여기서 확인할 수 있다. 무려 일년전글.. ㅎ

 

Oracle DB를 연동하려고 하는데 그러면 당연히 db가 필요하다.

오라클 db 설치는 https://hellodoor.tistory.com/227 여기

이제 본격적으로 연동을 시작해보려 한다.

 

우선 resources -> egovframework -> spring -> context-datasource.xml 을 열어보자.

원하는 소스파일을 이름만 알고있으면 쉽게 열 수 있는데 ctrl + shipt + r 버튼을 누르고 파일 이름을 입력하면

이렇게 바로 소스파일을 열 수 있다.

아무튼 파일을 열면 아래 처럼 나오는데

테스트 실행용은 말 그대로 내장용디비로 테스트용이다. 저걸 주석처리하고 아래 보면 oracle이 있는데 주석 해제 한다.

주석 해제하고 db 정보를 입력한다.

<bean id="dataSource" class="org.apache.commons.dbcp2.BasicDataSource" destroy-method="close">
        <property name="driverClassName" value="oracle.jdbc.driver.OracleDriver"/>
        <property name="url" value="jdbc:oracle:thin:@127.0.0.1:1521:orcl" />
        <property name="username" value="test"/>
        <property name="password" value="1234"/>
</bean>

url value에 "jdbc:oracle:thin@IP정보:포트:SID" 를 입력한다.

username에 디비 계정 아이디 입력하고 password에 비밀번호를 입력하면 된다.

그리고 porm.xml을 간다.

뭔가 친절하게 mysql, oracle db 사용시 아래 설정 추가로 나와 있다. 우선 저걸 다 주석해제 한다.

정확히는 oracle db를 연동할 예정이기 때문에 내가 필요한 건 아래 두 개 이다.

하지만 이대로 porm.xml을 수정하고 돌리면 오류가 발생하는데

먼저 ojdbc는 저 systemPath 해당 경로에 저 ojdbc-14.jar 파일이 있어야 한다. 가지고 있는 ojdbc jar 파일을 WEB-INF/lib 밑에 직접 넣어주면 된다. 내가 가진 ojdbc 파일은 8버전이므로 아래처럼 수정했다.

<dependency>
	<groupId>ojdbc</groupId>
	<artifactId>ojdbc</artifactId>
	<version>8</version>
	<scope>system</scope>
	<systemPath>${basedir}/src/main/webapp/WEB-INF/lib/ojdbc8.jar</systemPath>
</dependency>

이렇게 수정하면 아래와 같은 오류가 발생한다.

 

Caused by: java.lang.ClassNotFoundException: org.apache.commons.dbcp2.BasicDataSource

Caused by: org.springframework.beans.factory.CannotLoadBeanClassException: Cannot find class [org.apache.commons.dbcp2.BasicDataSource] for bean with name 'dataSource' defined in file [C:\eGovFrameDev-3.10.0-64bit\workspace\.metadata\.plugins\org.eclipse.wst.server.core\tmp1\wtpwebapps\helloPj\WEB-INF\classes\egovframework\spring\context-datasource.xml]; nested exception is java.lang.ClassNotFoundException: org.apache.commons.dbcp2.BasicDataSource

 

dbcp2 를 찾을 수 없다고 한다. 이게 개같은게 위에서 볼 수 있듯이 context-datasource.xml 에는 dbcp2 로 입력해놓고

porm.xml에는 그냥 dpcp로 되어있어서 일치하지 않는다.

그래서 아래처럼 prom.xml에 dbcp2 라이브러리를 추가해 줘야 한다.

<dependency>
	<groupId>org.apache.commons</groupId>
	<artifactId>commons-dbcp2</artifactId>
	<version>2.0</version>
</dependency>

여기까지 했으면 저장하고 Project 우클릭 -> Maven -> update project 를 클릭해서 maven update를 한다.

이렇게 하고 start 하면 오류는 안뜬다.

이제 테스트용 테이블과 데이터만 있으면 된다. 기존의 전자정부 예제를 그대로 따라가면서 테스트를 해보자.

resources -> db -> sampledb.sql 파일을 열어서 sqldeveloment같은 dbms 툴에 복사한다.

오라클 sql이랑 거의 비슷하지만 다른게 좀 있다. create memory에서 memory는 빼줘야 한다.

그리고는 뭐 뒤에 ; 세미콜론만 붙여주고 실행하면 테스트 데이터는 준비 된다.

그리고 이제 데이터도 있겠다. start하고 localhost:8080을 들어가보면

 

--- The error occurred while applying a parameter map.  
--- Check the sampleDAO.selectSampleList-InlineParameterMap.  
--- Check the statement (query failed).  
--- Cause: java.sql.SQLSyntaxErrorException: ORA-00933: SQL 명령어가 올바르게 종료되지 않았습니다

 

요런 에러가 뜬다. 당연히 테스트 디비 hsql 에서 oracle로 변경했으니 sql문도 oracle에 맞게 수정해줘야 한다.

우선 insert, update, delete 뭐 다 확인해봐야겠지만.. 우선 화면만 띄우는게 목적이라 (지침) selectSampleList 쿼리만 확인한다.

이걸 아래처럼 바꿔준다.

LIMIT #recordCountPerPage# OFFSET #firstIndex# -> 
OFFSET #firstIndex# ROWS FETCH NEXT #recordCountPerPage# ROWS ONLY

이렇게 수정하고 다시 restart 후 localhost:8080을 들어간다.

index.jsp에서 controller에 있는 /egovSampleList.do 를 실행하고 아까 insert한 데이터를 조회해와서 아래처럼 보여준다.

 

사실 테스트용으로 있던 데이터를 오라클로 옮기고 디비 연동정보만 수정한 것이다.

근데 이렇게 간단한게 너무 귀찮고 힘들어..

반응형

댓글