본문 바로가기
java/spring

2024-02-19

by rewind 2024. 2. 19.

새프로젝트 생성

 

이클립스 실행파일 새로 생성(eGovFrameDev-3.10.0-64bit)

 

 

워크스페이스 지정 후 실행

 

 

 

 

 

 

 

 

 

 

pom.xml 열기

 

java version 1.6 -> 1.8로 변경

 

springframework-version 3.1.1 -> 5.2.5로 변경

 

아래 코드 <!-- Test -->부분 이하부터 작성

<dependency>
    <groupId>org.projectlombok</groupId>
    <artifactId>lombok</artifactId>
    <version>1.18.22</version>
</dependency>

<!-- Database 라이브러리 시작 -->
<!-- https://mvnrepository.com/artifact/org.mybatis/mybatis -->
<!-- XML로 쿼리를 작성하게 해주는 라이브러리 ORM -->
<dependency>
    <groupId>org.mybatis</groupId>
    <artifactId>mybatis</artifactId>
    <version>3.5.10</version>
</dependency>

<!-- https://mvnrepository.com/artifact/org.mybatis/mybatis-spring -->
<!-- 스프링과 mybatis를 연동하게 해주는 라이브러리 -->
<dependency>
    <groupId>org.mybatis</groupId>
    <artifactId>mybatis-spring</artifactId>
    <version>2.0.4</version>
</dependency>

<!-- https://mvnrepository.com/artifact/org.springframework/spring-jdbc -->
<!-- 스프링에서 JDBC(Java DataBase Connectivitiy) -->
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-jdbc</artifactId>
    <version>${org.springframework-version}</version>
</dependency>

<!-- https://mvnrepository.com/artifact/org.apache.commons/commons-dbcp2 -->
<!-- dbcp : database connection pool => 커넥션객체를 미리 만들어놓고 쓰고/반납 최근에는 hikaricp를 
    사용하는 경우도 있음 -->
<dependency>
    <groupId>org.apache.commons</groupId>
    <artifactId>commons-dbcp2</artifactId>
    <version>2.7.0</version>
</dependency>

<!-- https://mvnrepository.com/artifact/org.bgee.log4jdbc-log4j2/log4jdbc-log4j2-jdbc4 -->
<!-- 로깅을 위한 라이브러리. 쿼리를 console이나 파일 로그로 볼 수 있음 -->
<dependency>
    <groupId>org.bgee.log4jdbc-log4j2</groupId>
    <artifactId>log4jdbc-log4j2-jdbc4</artifactId>
    <version>1.16</version>
</dependency>

<!-- https://mvnrepository.com/artifact/com.oracle.database.jdbc/ojdbc6 -->
<!-- ojdbc6 : oracle java database connectivity 드라이버 -->
<dependency>
    <groupId>com.oracle.database.jdbc</groupId>
    <artifactId>ojdbc6</artifactId>
    <version>11.2.0.4</version>
</dependency>
<!-- Database 라이브러리 끝 -->
<!-- 타일즈 시작 -->
<!-- https://mvnrepository.com/artifact/org.apache.tiles/tiles-extras -->
<dependency>
    <groupId>org.apache.tiles</groupId>
    <artifactId>tiles-extras</artifactId>
    <version>3.0.8</version>
</dependency>

<!-- https://mvnrepository.com/artifact/org.apache.tiles/tiles-servlet -->
<dependency>
    <groupId>org.apache.tiles</groupId>
    <artifactId>tiles-servlet</artifactId>
    <version>3.0.8</version>
</dependency>

<!-- https://mvnrepository.com/artifact/org.apache.tiles/tiles-jsp -->
<dependency>
    <groupId>org.apache.tiles</groupId>
    <artifactId>tiles-jsp</artifactId>
    <version>3.0.8</version>
</dependency>
<!-- 타일즈 끝 -->

<!-- 입력값을 검증하기 위한 라이브러리 의존 관계 정의 시작 스프링 M(Model) : Service, ServiceImple, 
    Mapper V(View) : JSP C(Controller) : Controller Bean(자바빈 클래스, ArticleVO) 
    Validation(유효성검사) 기능을 이용해 요청 파라미터 값이 바인딩된(멤버변수에 세팅된) 도메인 클래스(ArticleVO)의 
    입력값 검증을 함 요청 파라미터 : ?articleNo=112&title=개똥이 public String write(골뱅이ModelAttribute 
    ArticleVO articleVO) -->
<!-- https://mvnrepository.com/artifact/org.hibernate/hibernate-validator -->
<dependency>
    <groupId>org.hibernate</groupId>
    <artifactId>hibernate-validator</artifactId>
    <version>5.2.5.Final</version>
</dependency>

<!-- 입력값을 검증하기 위한 라이브러리 의존 관계 정의 끝 -->

<!-- json 데이터 바인딩을 위한 의존 라이브러리 시작 -->
<!-- https://mvnrepository.com/artifact/com.fasterxml.jackson.core/jackson-databind -->
<dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-databind</artifactId>
    <version>2.13.3</version>
</dependency>
<!-- json 데이터 바인딩을 위한 의존 라이브러리 끝 -->
<!-- JSON타입의 String을 JSON으로 변환 시 사용 시작 -->
<!-- https://mvnrepository.com/artifact/com.googlecode.json-simple/json-simple -->
<dependency>
    <groupId>com.googlecode.json-simple</groupId>
    <artifactId>json-simple</artifactId>
    <version>1.1.1</version>
</dependency>
<!-- JSON타입의 String을 JSON으로 변환 시 사용 끝 -->
<!-- 스프링 시큐리티 라이브러리 의존관계 정의 시작 -->
<!-- 스프링 시큐리티를 웹에서 동작하도록 해줌 -->
<!-- https://mvnrepository.com/artifact/org.springframework.security/spring-security-web -->
<dependency>
    <groupId>org.springframework.security</groupId>
    <artifactId>spring-security-web</artifactId>
    <version>5.0.7.RELEASE</version>
</dependency>

<!-- 스프링 시큐리티 설정을 도와줌 -->
<!-- https://mvnrepository.com/artifact/org.springframework.security/spring-security-config -->
<dependency>
    <groupId>org.springframework.security</groupId>
    <artifactId>spring-security-config</artifactId>
    <version>5.0.7.RELEASE</version>
</dependency>

<!-- 스프링 시큐리티 일반 기능 -->
<!-- https://mvnrepository.com/artifact/org.springframework.security/spring-security-core -->
<dependency>
    <groupId>org.springframework.security</groupId>
    <artifactId>spring-security-core</artifactId>
    <version>5.0.7.RELEASE</version>
</dependency>

<!-- 스프링 시큐리티와 태그라이브러리를 연결해줌 -->
<!-- https://mvnrepository.com/artifact/org.springframework.security/spring-security-taglibs -->
<dependency>
    <groupId>org.springframework.security</groupId>
    <artifactId>spring-security-taglibs</artifactId>
    <version>5.0.7.RELEASE</version>
</dependency>
<!-- 스프링 시큐리티 라이브러리 의존관계 정의 끝 -->

<!-- 파일업로드 시작 -->
<!-- common-fileupload 라이브러리는 tomcat7.0버전 이후로는 서블릿3.0이상에서 지원함 -->
<!-- https://mvnrepository.com/artifact/javax.servlet/javax.servlet-api -->
<dependency>
    <groupId>javax.servlet</groupId>
    <artifactId>javax.servlet-api</artifactId>
    <version>3.1.0</version>
    <scope>provided</scope>
</dependency>
<!-- https://mvnrepository.com/artifact/commons-fileupload/commons-fileupload -->
<dependency>
    <groupId>commons-fileupload</groupId>
    <artifactId>commons-fileupload</artifactId>
    <version>1.4</version>
</dependency>
<!-- 파일을 처리하기 위한 의존 라이브러리 -->
<!-- https://mvnrepository.com/artifact/commons-io/commons-io -->
<dependency>
    <groupId>commons-io</groupId>
    <artifactId>commons-io</artifactId>
    <version>2.11.0</version>
</dependency>

<!-- 썸네일 -->
<!-- https://mvnrepository.com/artifact/org.imgscalr/imgscalr-lib -->
<dependency>
    <groupId>org.imgscalr</groupId>
    <artifactId>imgscalr-lib</artifactId>
    <version>4.2</version>
</dependency>
<!-- https://mvnrepository.com/artifact/net.coobird/thumbnailator -->
<dependency>
    <groupId>net.coobird</groupId>
    <artifactId>thumbnailator</artifactId>
    <version>0.4.8</version>
</dependency>
<!-- 파일업로드 끝 -->

<dependency>
    <groupId>com.jcabi</groupId>
    <artifactId>jcabi-log</artifactId>
    <version>0.17.1</version>
</dependency>

<!-- AOP(Aspect Oriented Programming : 관점 지향 프로그래밍)
 시작
  1) aspectjrt => 		이미 있으므로 생략
  2) aspectjweaver => 없으므로 의존 관계를 정의 -->
<!-- https://mvnrepository.com/artifact/aspectj/aspectjweaver 1.5.4 -->
<!-- AspectJ RunTime -->

<!-- AspectJ Weaver -->
<dependency>
    <groupId>org.aspectj</groupId>
    <artifactId>aspectjweaver</artifactId>
    <version>${org.aspectj-version}</version>
</dependency>
<!-- AspectJ Tools -->
<dependency>
    <groupId>org.aspectj</groupId>
    <artifactId>aspectjtools</artifactId>
    <version>${org.aspectj-version}</version>
</dependency>
<!-- AOP(Aspect Oriented Programming : 관점 지향 프로그래밍) 끝 -->

 

 

web.xml 파일 열기 , 기존에 작성해놓은 web.xml로 모두 붙여넣기

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="3.1" xmlns="http://java.sun.com/xml/ns/javaee"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 
	https://java.sun.com/xml/ns/javaee/web-app_3_1.xsd">
	<!-- web.xml : tomcat서버의 설정 웹 프로젝트의 배포 설명자/배치 기술서(deployment description)이며, 
		웹 프로젝트가 배포되는 데 이용되는 XML 형식의 자바 웹 애플리케이션 환경 설정 부분을 담당함 스프링 웹 프로젝트가 실행되면 가장 
		먼저 web.xml 파일을 읽어들이고 위부터 차례로 태그를 해석함 1) 네임 스페이스 : 코드에서 이름은 같지만 내용이 전혀 다른 
		요소와 충돌하지 않도록, 즉 이런 요소를 구별하는 데 사용함 2) 스키마 : 코드의 구조와 요소, 속성의 관계를 정의하여 다양한 자료형을 
		사용할 수 있도록 정의된 문서 구조, 즉 틀을 의미함 xsi:schemaLocation 속성은 참조하고자 하는 인스턴스 문서의 URI를 
		지정함 두 개의 속성 값은 공백으로 구분. 첫 번째는 사용할 네임 스페이스(보통 기본 네임 스페이스와 동일)고, 두 번째는 참조할 
		스키마 파일 이름. -->
	<!-- The definition of the Root Spring Container shared by all Servlets 
		and Filters -->
	<context-param>
		<param-name>contextConfigLocation</param-name>
		<param-value>/WEB-INF/spring/root-context.xml
			/WEB-INF/spring/security-context.xml
		</param-value>
	</context-param>

	<!-- Creates the Spring Container shared by all Servlets and Filters -->
	<listener>
		<listener-class>org.springframework.web.context.ContextLoaderListener
		</listener-class>
	</listener>

	<!-- Processes application requests -->
	<servlet>
		<servlet-name>appServlet</servlet-name>
		<servlet-class>org.springframework.web.servlet.DispatcherServlet
		</servlet-class>
		<init-param>
			<param-name>contextConfigLocation</param-name>
			<param-value>/WEB-INF/spring/appServlet/servlet-context.xml
			</param-value>
		</init-param>
		
		<!-- 404 오류를 처리할 수 있도록 설정 시작 -->
      <init-param>
         <param-name>throwExceptionIfNoHandlerFound</param-name>
         <param-value>true</param-value>
      </init-param>
		<!-- 404 오류를 처리할 수 있도록 설정 끝 -->
		
		<load-on-startup>1</load-on-startup>

		<!-- web.xml의 설정은 WAS(Tomcat) 자체 설정일 뿐임. -->
		<!-- multipart-config : 메모리사이즈, 업로드 파일 저장 위치, 최대 크기 설정 -->
		<multipart-config>
			<location>c:\\upload</location><!-- 업로드 되는 파일을 저장할 공간 -->
			<max-file-size>20971520</max-file-size><!-- 업로드 파일의 최대 크기 1MB * 20 -->
			<max-request-size>41943040</max-request-size><!-- 한 번에 올릴 수 있는 최대 크기 40MB -->
			<file-size-threshold>20971520</file-size-threshold><!-- 메모리 사용 크기 20MB -->
		</multipart-config>
	</servlet>

	<servlet-mapping>
		<servlet-name>appServlet</servlet-name>
		<url-pattern>/</url-pattern>
	</servlet-mapping>

	<!-- 한글 처리 -->
	<filter>
		<filter-name>encodingFilter</filter-name>
		<filter-class>
			org.springframework.web.filter.CharacterEncodingFilter
		</filter-class>
		<init-param>
			<param-name>encoding</param-name>
			<param-value>UTF-8</param-value>
		</init-param>
		<init-param>
			<param-name>forceEncoding</param-name>
			<param-value>true</param-value>
		</init-param>
	</filter>
	<filter-mapping>
		<filter-name>encodingFilter</filter-name>
		<!-- 모든 요청에서 -->
		<url-pattern>/*</url-pattern>
	</filter-mapping>
	<!-- multipart filter 추가하기(한글 처리 다음에 넣기!!!) -->
	<filter>
		<display-name>springMultipartFilter</display-name>
		<filter-name>springMultipartFilter</filter-name>
		<filter-class>org.springframework.web.multipart.support.MultipartFilter
		</filter-class>
	</filter>
	<filter-mapping>
		<filter-name>springMultipartFilter</filter-name>
		<url-pattern>/*</url-pattern>
	</filter-mapping>
	<!-- 스프링 시큐리티가 제공하는 서블릿 필터 클래스를 서블릿 컨테이너에 등록함 -->
	<filter>
		<filter-name>springSecurityFilterChain</filter-name>
		<filter-class>org.springframework.web.filter.DelegatingFilterProxy
		</filter-class>
	</filter>
	<filter-mapping>
		<filter-name>springSecurityFilterChain</filter-name>
		<url-pattern>/*</url-pattern>
	</filter-mapping>
	<!-- HTTP 상태코드를 사용하여 오류페이지 설정 시작 HTTP 오류 코드 정리 - 400 : Bad Request. 문법 오류(잘못 
		입력한 url) - 404* : Not Found. 요청한 문서를 찾지 못함(url확인 및 캐시 삭제가 필요한 상태) - 405 : 
		Method not allowed. 메소드 허용 안됨(메소드 매핑이 안 될 때 발생) - 415 : 서버의 요청에 대한 승인 거부. 
		(ContentType, Content Encoding 데이터 확인 필요) - 500* : 서버 내부 오류. (웹 서버가 요청사항을 
		수행할 수 없을 때 발생) - 505 : HTTP Version Not Supported. -->
	<error-page>
		<error-code>400</error-code>
		<location>/error/error400</location>
	</error-page>
	
	<error-page>
		<error-code>404</error-code>
		<location>/error/error404</location>
	</error-page>
	
	<error-page>
		<error-code>500</error-code>
		<location>/error/error500</location>
	</error-page>
	<!-- HTTP 상태코드를 사용하여 오류페이지 설정 끝 -->

	<!-- 예외 타입을 사용한 에러 페이지 설정 시작 웹 컨테이너(tomcat서버) 설정 파일(web.xml)의 exception-type 
		태그 요소에 예외 타입을 설정하고 location 요소에 이동 대상 페이지 및 URI를 지정함 
		
		IOException, SQLException, NullPointerException, ArrayIndexOutOfBoundsException, ArtimeticException(0으로 
		나눌경우) -->
	<error-page>
		<exception-type>java.lang.ArithmeticException</exception-type>
		<location>/error/errorException</location>
	</error-page>
	<!-- 예외 타입을 사용하여 오류 페이지 설정 시작 -->

	<!-- 기본 오류 페이지 설정 시작 -->
	<!-- <error-page> -->
	<!-- <location>/error/errorDefault</location> -->
	<!-- </error-page> -->
	<!-- 기본 오류 페이지 설정 시작 -->

</web-app>

 

 

WEB-INF/spring 폴더에 아래 파일 생성(spring-context.xml)

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
	xmlns:security="http://www.springframework.org/schema/security"
	xsi:schemaLocation="http://www.springframework.org/schema/security http://www.springframework.org/schema/security/spring-security.xsd
		http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">

	<bean id="customAccessDenied" class="kr.or.ddit.security.CustomAccessDeniedHandler"></bean>
	<bean id="customLoginSuccess" class="kr.or.ddit.security.CustomLoginSuccessHandler"></bean>
	<!-- 1. 비밀번호를 암호화하는 것을 사용자 정의로 처리해보자 -->
<!-- 	<bean id="customPasswordEncoder" class="kr.or.ddit.security.CustomNoOpPasswordEncoder"></bean> -->
	<!-- 2. 비밀번호를 암호화 사용 -->
	<bean id="passwordEncoder" 
		class="org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder"></bean>
	<!-- 사용자가 이미 정해놓은 테이블과 컬럼명으로 로그인 처리를 해보자 -->
	<bean id="customUserDetailsService" 
		class="kr.or.ddit.security.CustomUserDetailsService"></bean>

	<security:http>
		<!-- URI 패턴으로 접근 제한을 설정, Role(권한,역할) -->
<!-- 		<security:intercept-url pattern="/brd/list" access="permitAll" /> -->
<!-- 		<security:intercept-url pattern="/brd/register" access="hasRole('ROLE_MEMBER')" /> -->
<!-- 		<security:intercept-url pattern="/notice/list" access="permitAll" /> -->
<!-- 		<security:intercept-url pattern="/notice/register" access="hasRole('ROLE_ADMIN')" /> -->
		<!-- 도서 등록 : /create -->
<!-- 		<security:intercept-url pattern="/create" access="hasRole('ROLE_ADMIN')" /> -->
	
		<!-- 폼 기반 인증 기능 사용(인증-authentication을 위해서 아이디/비밀번호를 체크) -->
<!-- 		<security:form-login /> -->
		<!-- 사용자 정의 로그인 페이지의 URI 지정 -->
		<!-- 로그인 성공 처리자 
		ref : bean을 바라봄
		-->
		<security:form-login login-page="/login"
			authentication-success-handler-ref="customLoginSuccess" />
		
		<!-- 접근 거부 처리자(HTTP 상태 403 – 금지됨 : 권한 없음) -->
<!-- 		<security:access-denied-handler error-page="/accessError" /> -->
		<!-- 접근 거부가 발생한 상황에 단순 메시지 처리 이상의 다양한 처리를 하고자 할 때 사용자가 직접 구현할 수 있음 -->
		<security:access-denied-handler ref="customAccessDenied" />
		
		<!-- dataSource를 통해 지정한 Database의 약속된 테이블(PERSISTENT_LOGINS)을
		           이용하여 기존 로그인 정보를 기록함 -->
		<!-- token-validity-seconds : 쿠키의 유효시간(초) 604800초는 7일 -->
		<security:remember-me data-source-ref="dataSource" token-validity-seconds="604800"  />
		<!-- ref : bean 객체(root-context) -->
		
		<!-- 로그아웃 처리를 위한 URI를 지정하고, 로그아웃한 후에 세션을 무효화 함 -->
		<!-- 로그아웃을 하면 자동 로그인에 사용된 쿠키도 함께 삭제해 줌  invalidate-session="true"-->
		<security:logout logout-url="/logout" invalidate-session="true" delete-cookies="remember-me,JSESSION_ID" />
	</security:http>
	
	<!-- 지정된 아이디와 패스워드로 로그인이 가능하도록 설정-->
	<!-- 스프링 시큐리티 5부터 기본적으로 PasswordEncoder를 지정해야 하는데,
		그 이유는 사용자 테이블(USERS)에 비밀번호를 암호화하여 저장해야 하므로..
		우리는 우선 비밀번호를 암호화 처리 하지 않았으므로
		암호화 하지 않는 PasswordEncoder를 직접 구현하여 지정하기로 함
		noop : no option password
	 -->
	<security:authentication-manager>
		<security:authentication-provider user-service-ref="customUserDetailsService">
<!-- 			<security:jdbc-user-service data-source-ref="dataSource" /> -->
<!-- 			<security:user-service> -->
<!-- 				<security:user name="member" password="{noop}java" authorities="ROLE_MEMBER" /> -->
<!-- 				<security:user name="admin"  password="{noop}java"  -->
<!-- 					authorities="ROLE_MEMBER,ROLE_ADMIN" /> -->
<!-- 			</security:user-service> -->
			<!-- 1. 비밀번호 암호화 안씀 -->
<!-- 			<security:password-encoder ref="customPasswordEncoder" /> -->
			<!-- 2. 비밀번호 암호화 씀 -->
			<security:password-encoder ref="passwordEncoder" />
		</security:authentication-provider>
	</security:authentication-manager>
</beans>

 

controller 패키지 생성

 

 

controller 패키지 내에 ErrorController 생성

package kr.or.ddit.controller;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;

import lombok.extern.slf4j.Slf4j;
// 자바빈 선언
@Slf4j
@Controller
@RequestMapping("/error")
public class ErrorController {
	// error/error400
	@GetMapping("/error400")
	public String error400() {
		//forwarding : jsp
		return "error/error400";
	}
	@GetMapping("/error404")
	public String error404() {
		//forwarding : jsp
		return "error/error404";
	}
	@GetMapping("/error500")
	public String error500() {
		//forwarding : jsp
		return "error/error500";
	}

	@GetMapping("/errorException")
	public String errorException() {
		//forwarding : jsp
		return "error/errorException";
	}
}

 

에러 컨트롤러 처리

 

root-context.xml

 

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
   xmlns:context="http://www.springframework.org/schema/context"
   xmlns:mybatis-spring="http://mybatis.org/schema/mybatis-spring"
   xmlns:aop="http://www.springframework.org/schema/aop"
   xmlns:tx="http://www.springframework.org/schema/tx"
   xsi:schemaLocation="http://mybatis.org/schema/mybatis-spring http://mybatis.org/schema/mybatis-spring-1.2.xsd
      http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
      http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.1.xsd
      http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.1.xsd
      http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.1.xsd">
   
	<!-- Root Context: defines shared resources visible to all other web components -->
	<!-- 
	root-context.xml : 스프링 설정 파일
	서블릿과 필터가 공유할 수 있는 루트 스프링 컨테이너 설정으로, 공통 빈(Service, Repository(DAO), DB, Log 등)을 설정함.
	공통빈을 설정하는 곳으로 주로 View 지원을 제외한 bean을 설정함
	
	스프링 설정?
	view와 관련되지 않은 객체를 정의
	Service(기능), DAO(Repository : 저장소), DB등 비즈니스 로직과 관련된 설정
	BasicDataSource dataSource = new BasicDataSource();
	dataSource.setDriverClassName() = "oracle.jdbc.driver.OracleDriver";
	 -->
	<!-- dataSource : 데이터베이스와 관련된 정보를 설정 -->
	<!-- 
	db : database(개념. 공유/저장/통합/운영). RDB(Relational DB.관계형DB)
	dbms : database management system(DB관리시스템.오라클)
	localhost = 127.0.0.1 = 내 ip주소
	xe : express(OracleXE11g.r2) => SID(sequence ID)
	 -->
	<!-- 
	BasicDataSource dataSource = new BasicDataSource();
	dataSource.setDriverClassName("oracle.jdbc.driver.OracleDriver");
	dataSource.setUrl("jdbc:oracle:thin:@localhost:1521:xe");
	 -->
	<bean id="uploadFolder" class="java.lang.String">
		<constructor-arg value="C:\Users\PC-12\git\repository\springProj\src\main\webapp\resources\upload"></constructor-arg>
	</bean>
	
	<bean id="uploadFolderDirect" class="java.lang.String">
      <constructor-arg value="C:\\eGovFrameDev-3.10.0-64bit\\workspace\\.metadata\\.plugins\\org.eclipse.wst.server.core\\tmp0\\wtpwebapps\\springProj\\resources\\upload"></constructor-arg>
   </bean>
	
	<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:@localhost:1521:xe" />
		<property name="username" value="jspexam" />
		<property name="password" value="java" />
	</bean>
	<!-- 데이터베이스와 연결을 맺고 끊어질 때까지의 
	라이프 사이클을 관리해주는 sqlSession 객체를 생성
	1) dataSource
	2) 매퍼 xml의 위치 지정. / : src/main/resources/
	SqlSessionFactoryBean sqlSessionFactory = new SqlSessionFactoryBean();
	sqlSessionFactory.setDataSource(dataSource);
	 -->
	<bean id="sqlSessionFactory"
	class="org.mybatis.spring.SqlSessionFactoryBean">
		<property name="dataSource" ref="dataSource"></property>
		<property name="mapperLocations"
		value="classpath:/sqlmap/**/*_SQL.xml" />
		<property name="configLocation"
		 value="/WEB-INF/mybatisAlias/mybatisAlias.xml" />
	</bean>
	<!-- 데이터베이스에 개별적으로 쿼리를 실행시키는 객체. 이 객체를 통해 query를 실행함 -->
	<bean id="sqlSessionTemplate"
	class="org.mybatis.spring.SqlSessionTemplate">
		<constructor-arg index="0" ref="sqlSessionFactory" />
	</bean>
	
	<!-- Mapper 인터페이스 설정 
	개발자가 직접 DAO를 설정하지 않아도 자동으로 Mapper 인터페이스를 활용하는 객체를 생성하게 됨
	-->
	<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
		<property name="basePackage" value="kr.or.ddit.**.mapper" />
	</bean>
	
	<!-- 파일업로드 설정
   CommonsMultipartResolver multipartResolver = new multipartResolver();
   multipartResolver.setMaxUploadSize(10485760);
   multipartResolver.setDefaultEncoding("UTF-8");
    -->
   <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
      <!-- 파일업로드 용량 (10MB)-->
      <property name="maxUploadSize" value="10485760"/>
      <property name="defaultEncoding" value="UTF-8" />
   </bean>
   
   <!-- 파일업로드 디렉토리 설정 -->
   <bean id="uploadPath" class="java.lang.String">
      <constructor-arg value="c:\\upload"/>
   </bean>
   
   <!-- 트랜잭션 관리자의 빈을 정의 -->
   <bean id="transactionManager" 
      class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
      <property name="dataSource" ref="dataSource"></property>
   </bean>
   
   <!-- 어노테이션 기반의 트랜잭션 제어를 활성화함 @Trasactional -->
   <tx:annotation-driven/>
   
   <!-- 스프링 AOP 활성화 -->
   <aop:aspectj-autoproxy></aop:aspectj-autoproxy>
   
   <!-- kr.or.ddit.aop 패키지를 컴포넌트 스캔 대상으로 등록 -->
   <context:component-scan base-package="kr.or.ddit.aop"></context:component-scan>
	
</beans>

 

webapp\resources\내 upload 생성

 

root-context.xml 아래 항목 변경

<bean id="uploadFolder" class="java.lang.String">
    <constructor-arg value="C:\\eGovFrameDev-3.10.0-64bit\workspace\projUnipass\src\main\webapp\resources\upload"></constructor-arg>
</bean>

<bean id="uploadFolderDirect" class="java.lang.String">
  <constructor-arg value="C:\\eGovFrameDev-3.10.0-64bit\\workspace\\.metadata\\.plugins\\org.eclipse.wst.server.core\\tmp0\\wtpwebapps\\projUnipass\\resources\\upload"></constructor-arg>
</bean>

<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:@localhost:1521:xe" />
    <property name="username" value="unipass" />
    <property name="password" value="java" />
</bean>

 

sqlmap 패키지 생성

 

blank.sql 생성

<?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="blank">

</mapper>