포스트

00. root-context.xml

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
<!-- 
    root-context.xml 파일
    - web.xml에서 가장 먼저 읽어 들이는 설정 파일
    - 프로젝트 전반적으로 사용되는 자원을 생성(bean 등록)하고 설정하는 파일
    - DB 연결 관련 정보, 트랜잭션 처리, 파일 업로드 등을 작성
-->
  
<!-- 1. DBCP 사용을 위한 DataSource를 bean으로 등록 -->

<!-- DataSource : java에서 Connection Pool을 지원하기 위한 인터페이스(Connection 상위호환) -->
<!-- destroy-method="close" : 주어진 세션을 자동으로 반환(close)하는 설정 -->
<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="community"/>
  <property name="password" value="1234"/>
  
  <!-- SQL이 수행된 후 자동으로 Commit 되는것을 지정 -->
  <property name="defaultAutoCommit" value="false"/>
  
  <!-- 커넥션 풀 설정 -->
  <property name="initialSize" value="10" /> <!-- 초기 커넥션 수, 기본 0 -->
  <property name="maxTotal" value="50" /> <!-- 최대 커넥션 수, 기본 8 -->
  <property name="maxIdle" value="20" /> <!-- 유휴 상태로 존재할 수 있는 커넥션 최대 수, 기본 8 -->
  <property name="minIdle" value="10" /> <!-- 유휴 상태로 존재할 수 있는 커넥션 최소 수, 기본 0 -->
  <property name="maxWaitMillis" value="-1" /> <!-- 예외 발생 전 커넥션이 반환 될 떄 까지 대기하는 최대 시간(ms), 기본 -1(무기한) -->
  
</bean>

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
<!-- 
  SqlSession : sql구문을 DB에 전달, 실행하는 객체 
  SqlSessionFactory : SqlSession을 만드는 객체 
  sqlSessionFactoryBean : mybatis 설정 파일(mybatis-config.xml)과 Connection Pool 정보를 
  이용하여 SqlSessionFactory를 만드는 객체 
  sqlSessionTemplate : SqlSession 객체에 트랜잭션 처리 역할이 가능하도록 하는 객체 
-->

<!-- 마이바티스 SqlSession 등록하기 (xml 방식으로 bean 등록) -->
<bean id="sqlSessionFactoryBean" class="org.mybatis.spring.SqlSessionFactoryBean">
  <!-- mybatis-config.xml 설정 불러오기 -->
  <property name="configLocation" value="classpath:mybatis-config.xml" />
  <property name="dataSource" ref="dataSource" />
</bean>

<!-- SqlSessionTemplate : 기본 SQL 실행 + 트랜잭션 관리 역할을 하는 SqlSession을 생성할 수 있게 하는 객체(Spring bean으로 등록해야함.) -->
<bean id="sqlSessionTemplate" class="org.mybatis.spring.SqlSessionTemplate">
  <constructor-arg ref="sqlSessionFactoryBean" />
</bean>

<!-- 스프링에서 사용하는 proxy를 이용한 트랜잭션 제어가 안될 경우 추가적인 트랜잭션 매니저를 추가해서 문제 해결 -->
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
  <property name="dataSource" ref="dataSource" />
</bean>

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
<!-- <tx:annotation-driven proxy-target-class="true"/> -->
<tx:annotation-driven transaction-manager="transactionManager"/>

<!--
  파일 업로드를 위한 MutipartResolver 구현체 CommonsMultipartResolver  bean 등록
  -> CommonsMultipartResolver를 bean으로 등록하면 multipart/form-data 형식으로 요청 시  
  input type="file" 태그를 자동적으로 인식하여 MultipartFile 객체로 반환하고 파일 외의 
  데이터(정수, 문자열 등의 텍스트 데이터)는 기존처럼 사용 가능(MultipartRequest 필요 없음)
-->
<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
  <property name="maxUploadSize" value="104857600"/>
  <property name="maxUploadSizePerFile" value="104857600"/>
  <property name="maxInMemorySize" value="104857600"/>
</bean>

<!--
  104857600 byte == 100MB
  20971520 byte == 20MB
  
  maxUploadSize
  : 한 요청당 업로드가 허용되는 최대 용량을 바이트 단위로 설정.
  -1 은 제한이 없다는 뜻으로 이 프로퍼티를 지정하지 않을때 기본값.
  
  maxUploadSizePerFile
  : 한 파일당 업로드가 허용되는 최대 용량을 바이트 단위로 설정.
  -1 은 제한이 없다는 뜻으로 이 프로퍼티를 지정하지 않을때 기본값.
  
  maxInMemorySize
  : 디스크에 저장하지 않고 메모리에 유지하도록
  허용하는 바이트 단위의 최대 용량을 설정.
  
  사이즈가 이보다 클 경우 이 사이즈 이상의 데이터는 파일에 저장됩니다.
  기본값은 10240 바이트.
-->

MutipartResolver는 추후 셋팅이 되지 않은 상태에서 유지하고 있으면 에러 발생