Programming/Spring

[스프링 프레임워크]게시판 만들기 #2 : Spring과 오라클 DB 연동 및 데이터 베이스 셋팅

hyunipad 2021. 7. 10. 14:02
반응형
본 포스팅은 스프링 프레임워크를 이용하여 기본적인 게시판을 만드는 방법을 설명합니다.
기본적인 프로젝트 세팅에 대한 내용은 지난 포스팅을 참고해주시기 바랍니다. 

2021.07.05 - [Spring] - [스프링 프레임워크] 게시판 만들기 #1 : 프로젝트 생성 및 세팅

 

[스프링 프레임워크]게시판 만들기 #1 : 프로젝트 생성 및 셋팅

본 포스팅은 스프링 프레임워크를 이용하여 기본적인 게시판을 만드는 방법을 설명합니다. 안녕하세요. 이번 포스팅은 Spring Framework를 이용하여 게시판 만드는 방법을 설명합니다. Spring Framework

hyunipad.tistory.com

 

이번 포스팅은 Oracle을 연동하고 데이터베이스에 게시판 테이블을 생성하는 방법을 설명합니다.

그전에 pom.xml에 대한 간단한 알아보도록 하겠습니다.

지난 포스팅에서 설명드린 Spring Framework에 특징 중 IOC(제어 반전 컨테이너)는 의존성 주입에 대한 부분이었습니다.

의존성 주입이란 한 객체가 다른 객체를 필요로 할 때, 객체들을 xml로 관리하여 객체를 주입해주는 것으로 수정이 필요할 때 xml 파일을 수정하는 것으로 유지보수가 좋은 코드를 만드는 것입니다.

pom.xml에 dependency를 추가하는 것으로 외부 라이브러리를 손쉽게 관리할 수 있습니다. 여기서 프로그램(한 객체)이 라이브러리(다른 객체)를 필요로 한다고 할 수 있겠습니다.

 

pom.xml에 dependency 추가

Oracle과 연동을 위해 pom.xml에 dependency를 추가합니다.

dependency를 추가하면 자바의 반영을 이용하여 Maven에서 라이브러리를 자동으로 다운로드하게 됩니다.

 <!-- https://mvnrepository.com/artifact/org.mybatis/mybatis-spring -->
<dependency>
    <groupId>org.mybatis</groupId>
    <artifactId>mybatis-spring</artifactId>
    <version>1.3.2</version>
</dependency>

<dependency>
	<groupId>org.mybatis</groupId>
	<artifactId>mybatis</artifactId>
    <version>3.4.6</version>
</dependency>

<dependency>
  <groupId>org.springframework</groupId>
  <artifactId>spring-jdbc</artifactId>
  <version>${org.springframework-version}</version>
</dependency>

<!-- https://mvnrepository.com/artifact/commons-dbcp/commons-dbcp -->
<dependency>
    <groupId>commons-dbcp</groupId>
    <artifactId>commons-dbcp</artifactId>
    <version>1.4</version>
</dependency>
  
<!-- https://mvnrepository.com/artifact/com.oracle/ojdbc6 -->
<dependency>
  <groupId>com.oracle</groupId>
  <artifactId>ojdbc6</artifactId>
  <version>11.2.0.3</version>
</dependency>

하단의 ojdbc6은 저작권의 문제로 Maven에서 지원하지 않고 있습니다.

따라서 ojdbc6을 다운로드할 수 있도록 참고할 수 있는 repository를 추가해주도록 합니다.

	<properties>
		<java-version>1.8</java-version>
		<org.springframework-version>3.1.1.RELEASE</org.springframework-version>
		<org.aspectj-version>1.6.10</org.aspectj-version>
		<org.slf4j-version>1.6.6</org.slf4j-version>
	</properties>
<!-- 오라클 JDBC라이브러리 관리 사이트 -->
	<repositories>
		<repository>
			<id>oracle</id>
			<name>Oracle JDBC Repository</name>
			<url>http://repo.spring.io/plugins-release/</url>
		</repository>
	</repositories>

그런데 repository는 URL을 참고하여 가져오는 것이기 때문에 불안정하여 못 들고 오는 경우가 있습니다.(제가 그렇네요)

그럴 경우에는 ojdbc 라이브러리를 직접 추가해주도록 합니다.

Oracle을 위해 sqldeveloper를 다운하였으면 다운로드한 경로에 jdbc/lib 에 가게 되면 jar파일이 있습니다.

또는 직접 다운로드가 필요하신 분들께서는 아래의 블로그를 참고해주세요.

https://fruitdev.tistory.com/89

 

[Oracle] JDBC 드라이버 다운로드

오라클 JDBC 드라이버를 버전별로 몇개 간추려 보았다. 일반적으로 오라클 JDBC 드라이버는 하위 호환성을 가지고 있어 JDK 버전에 맞는 최신 오라클 드라이버를 이용하면 된다. 나 같은경우 오라

fruitdev.tistory.com

프로젝트 우클릭 -> Build Path -> Configure Build Path에 들어가서 Add External Jars를 통해 추가해주고 

좌측 메뉴에 Deployment Assembly -> Add -> Java Build Path Entries에서도 추가해주도록 합니다.

 

root-context.xml

Oracle 연동을 위해 계정 정보를 추가하고 Mybatis 사용을 위한 설정을 추가합니다.

root-context.xml의 Namespaces에 다음 항목을 체크하고 코드를 추가합니다.

<bean class="org.springframework.jdbc.datasource.DriverManagerDataSource" id="dataSource">
  <property value="oracle.jdbc.driver.OracleDriver" name="driverClassName" />
  <property value="jdbc:oracle:thin:@localhost:1521:xe" name="url" />
  <!-- 오라클 사용자 이름 -->
  <property value="MYSTUDY" name="username" />
  <!-- 오라클 사용자 비밀번호 -->
  <property value="mystudypw" name="password" />
</bean>

<bean class="org.mybatis.spring.SqlSessionFactoryBean" id="SqlSessionFactory">
  <property name="dataSource" ref="dataSource" />
  <property value="classpath:/mybatis-config.xml" name="configLocation" />
  <property value="classpath:/mappers/*Mapper.xml" name="mapperLocations" />
</bean>

<mybatis-spring:scan base-package="com.board.mapper"></mybatis-spring:scan>

src -> main -> webapp -> resources에 다음과 같은 파일을 생성합니다.

  1. mappers/boardMapper.xml
  2. mybatis-config.xml

생성한 boardMapper.xml과 mybatis-config.xml에 다음과 같은 코드를 작성합니다.

 

boardMapper.xml

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
  PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
  "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.board.mappers.board">

</mapper>

mybtis-config.xml

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
  PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
  "http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>

</configuration>

 

여기까지 완료했으면 각자의 Tomcat 서버에 올려서 서버를 실행시켜 테스트를 진행하면 됩니다.

 

 

발생한 오류

org.springframework.beans.factory.BeanCreationException: 
Error creating bean with name 'sqlSessionFactory' defined in ServletContext resource [/WEB-INF/spring/root-context.xml]: Initialization of bean failed; nested exception is org.springframework.beans.TypeMismatchException: Failed to convert property value of type 'java.lang.String' to required type 'org.springframework.core.io.Resource[]' for property 'mapperLocations'; nested exception is java.lang.IllegalArgumentException: Could not resolve resource location pattern [classpath:mappers/**/Mapper.xml]: 
class path resource [mappers/] cannot be resolved to URL because it does not exist

저는 서버에 올려서 실행 도중 이런 오류가 발생했습니다..

 

org.springframework.beans.factory.BeanCreationException: 
Error creating bean with name 'sqlSessionFactory' defined in ServletContext resource [/WEB-INF/spring/root-context.xml]: Initialization of bean failed; nested exception is org.springframework.beans.TypeMismatchException: Failed to convert property value of type 'java.lang.String' to required type 'org.springframework.core.io.Resource[]' for property 'mapperLocations'; nested exception is java.lang.IllegalArgumentException: Could not resolve resource location pattern [classpath:mappers/**/Mapper.xml]: 
class path resource [mappers/] cannot be resolved to URL because it does not exist

 

root-context.xml에서 mapper.xml과 mybatis-context.xml의 경로를 못 읽어서 발생한 오류입니다.

파일을 생성한 경로가 이상이 없다는 전제하에

root-context.xml의 설정을 classpath*:/ 이렇게도 해보고 /mappers/**/*Mapper.xml 이렇게도 해보고 온갖 경로를 바꿔봤습니다만 계속 Exception이 발생하는 것을 보고 이건 애초에 resoucres까지 경로를 못 읽어온다는 판단을 해

아래와 같이 경로를 수정하였더니 오류가 사라졌습니다. 저처럼 오류가 발생하신 분들은 아래처럼 해보시기 바랍니다.

반응형