/ SPRING

Backend 초기설정 + Mybatis

스프링 목록

스프링 부트 목록

백엔드 프로젝트 초기설정

사용할 톰켓버전 9.0
OracleJDBC
Spring JDBC
스프링 context 사용
스프링 webMVC 사용
Hikari CP 사용
Connection Poll 사용
Log4J
Log4J for Spring
Log4J for Hikari CP
MyBatis
MyBatis for Spring
Jason-databind (JSON 타입 리턴용 라이브러리)






0. pom.xml 추가

이클립스 에서 프로젝트 우클릭후 메이븐 프로젝트로 변경



	  <packaging>war</packaging>여기 밑에 아래내용 붙여넣기!!
<dependencies>
	<!-- https://mvnrepository.com/artifact/org.springframework/spring-context -->
	<dependency>
		<groupId>org.springframework</groupId>
		<artifactId>spring-context</artifactId>
		<version>5.2.9.RELEASE</version>
	</dependency>
  
	<!-- https://mvnrepository.com/artifact/com.oracle.database.jdbc/ojdbc8 -->
	<dependency>
		<groupId>com.oracle.database.jdbc</groupId>
		<artifactId>ojdbc8</artifactId>
		<version>21.1.0.0</version>
	</dependency>
  
  <!-- https://mvnrepository.com/artifact/org.springframework/spring-jdbc -->
	<dependency>
		<groupId>org.springframework</groupId>
		<artifactId>spring-jdbc</artifactId>
		<version>5.2.9.RELEASE</version>
	</dependency>
	
	<!-- https://mvnrepository.com/artifact/log4j/log4j -->
	<dependency>
		<groupId>log4j</groupId>
		<artifactId>log4j</artifactId>
		<version>1.2.17</version>
	</dependency>
	
	<!-- https://mvnrepository.com/artifact/org.springframework/spring-webmvc -->
	<dependency>
		<groupId>org.springframework</groupId>
		<artifactId>spring-webmvc</artifactId>
		<version>5.2.9.RELEASE</version>
	</dependency>
	
<!-- 마이바티스+ 마이바티스 스프링(SqlSession 받기 편해짐)-->
	<!-- https://mvnrepository.com/artifact/org.mybatis/mybatis -->
	<dependency>
		<groupId>org.mybatis</groupId>
		<artifactId>mybatis</artifactId>
		<version>3.5.6</version>
	</dependency>
	
	<!-- https://mvnrepository.com/artifact/org.mybatis/mybatis-spring -->
	<dependency>
		<groupId>org.mybatis</groupId>
		<artifactId>mybatis-spring</artifactId>
		<version>2.0.6</version>
	</dependency>
	
	
	
	<!-- 제이유닛 스프링에서 돌아가게 하는거 -->
	<!-- https://mvnrepository.com/artifact/org.springframework/spring-test -->
	<dependency>
		<groupId>org.springframework</groupId>
		<artifactId>spring-test</artifactId>
		<version>5.2.9.RELEASE</version>
    </dependency>
    <!--     <scope>test<scope> -->
	
	
	<!-- 히카리cp -커넥션 풀 라이브러리 -->
	<!-- https://mvnrepository.com/artifact/com.zaxxer/HikariCP -->
	<dependency>
		<groupId>com.zaxxer</groupId>
		<artifactId>HikariCP</artifactId>
		<version>3.4.5</version>
	</dependency>
	
	<!--히카리용 로그포제이  -->
	<!-- Logging -->
		<dependency>
			<groupId>org.slf4j</groupId>
			<artifactId>slf4j-api</artifactId>
			<version>1.6.6</version>
		</dependency>
		<dependency>
			<groupId>org.slf4j</groupId>
			<artifactId>jcl-over-slf4j</artifactId>
			<version>1.6.6</version>
			<!-- <scope>runtime</scope> -->
		</dependency>
		<dependency>
			<groupId>org.slf4j</groupId>
			<artifactId>slf4j-log4j12</artifactId>
			<version>1.6.6</version>
			<!-- <scope>runtime</scope> -->
		</dependency>
	
		<dependency>
			<groupId>org.bgee.log4jdbc-log4j2</groupId>
			<artifactId>log4jdbc-log4j2-jdbc4</artifactId>
			<version>1.16</version>
		</dependency>
	
		 <!--스프링용 JSON 라이브러리 (자동으로 Map값 리턴하면 맞춰줌) -->

		<!-- https://mvnrepository.com/artifact/com.fasterxml.jackson.core/jackson-databind -->
		<dependency>
			<groupId>com.fasterxml.jackson.core</groupId>
			<artifactId>jackson-databind</artifactId>
			<version>2.12.5</version>
		</dependency>
</dependencies>





1. src/test 폴더 만들기

1-1) src/test/java폴더 생성

1-2) src/test/resources 폴더 생성





2. src/main/resources 폴더 생성


이 폴더속에는 log4j.xml , mybatis-config.xml , Mapper.xml 등등.. 들어갈 위치

3. 빌드패스 등록

이제 1번, 2번에서 만든 폴더들을 빌드패스 등록해야함

1.프로젝트를 우클릭 하여 Build Path ->Configure Build Path 클릭
2.Source 탭 클릭
3.add Folder 클릭
4.추가(방금 만든 폴더들 체크박스 클릭하면 추가됨)


 
   {자기가만든 프로젝트이름}/src/test/java
   {자기가만든 프로젝트이름}/src/test/resources

   {자기가만든 프로젝트이름}/src/main/resources 가 소스탭에 추가되어야함





3.web.xml만들기

src/main/webapp/WEN_INF/web.xml

xml파일 생성후 아래 구문 복사해서 붙여넣고 저장.

<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
              xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"              
              xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
              version="4.0">
	<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>
		<load-on-startup>1</load-on-startup>
	</servlet>
		
	<servlet-mapping>
		<servlet-name>appServlet</servlet-name>
		<url-pattern>/</url-pattern>
	</servlet-mapping>
</web-app>


직접 servlet-context의 위치 수정가능(아래 param-value 경로)

		<param-name>contextConfigLocation</param-name>
		<param-value>/WEB-INF/spring/appServlet/servlet-context.xml</param-value>





4.servlet-context.xml 만들기

(WEB-INF/spring/appServlet/servlet-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:mvc="http://www.springframework.org/schema/mvc"
	xsi:schemaLocation="http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-4.3.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.3.xsd">

<context:annotation-config></context:annotation-config>

<!--히카리cp config + 커넥션풀 -->
	<bean id="hikariConfig" class="com.zaxxer.hikari.HikariConfig">
		<!--  이렇게 하면 스프링 컨테이너에서 작동하는 sql 구문을 로그로 볼수 있게됨-->
		<property name="driverClassName" 	value="net.sf.log4jdbc.sql.jdbcapi.DriverSpy"/> 
		<property name="jdbcUrl" value="jdbc:log4jdbc:oracle:thin:@127.0.0.1:1521:XE"/>
		
		<!--자기가 사용하는 db의 아이디와 패스워드-->
		<property name="username" value="hr"></property>
		<property name="password" value="hr"></property>
		<!--최대 풀 갯수와, 최소풀 갯수-->
		<property name="maximumPoolSize" value="10"></property>
		<property name="minimumIdle" value="2"></property>
	</bean>
	

<!--dataSource-->
<bean id="dataSource" class="com.zaxxer.hikari.HikariDataSource">
		<constructor-arg ref="hikariConfig"></constructor-arg>
	</bean>


<!--Mybatis-spring용 SqlSessionFactoryBean-->
	<!--SqlSessionFactory 쓸때 편하게 사용가능-->
	<bean id="sqlSessionFactory"
		class="org.mybatis.spring.SqlSessionFactoryBean">
	<property name="dataSource" ref="dataSource"></property>
	<property name="configLocation" value='classpath:mybatis-config.xml'>
	</property>
	</bean>

<!-- 여기에 패키지 경로들을 등록해줘야 스프링 컨테이너에서 관리 가능-->
	<!-- @Repository, @Controller, @ResponseMapping-->
	<context:component-scan base-package="com.my.board.dao"/>
	<context:component-scan base-package="com.my.board.service"/>
	<context:component-scan base-package="com.my.board.controller"/>
	
<!--Namespace탭에 mvc 체크하면 자동으로 생김-->
<!-- 왜 추가해주냐면 원래 spring에선 ModelAndView 타입을 반환 -->
<!--근데  Objcet 를 JSON으로  return할려면 이거 사용해야함-->
	<mvc:annotation-driven></mvc:annotation-driven>

</beans>

xml 내용 설명

1.dateSource ->히카리데이터소스(class)

2.construc-arg-> (히카리config 참조)



3.sqlSessionFactory ->SqlSessionBean Class

		(프로퍼티1+ 이름=dataSource 참조=datasoucre

		(프로퍼티2+ 이름=configLocation 값=classpath:mybatis-config.xml




만약 프론트 / 백 분리 안할시 참고

	</bean> 태그 아래에 해당 코드 추가하면 자동으로 jsp쓸때 매핑해줌

/resources 폴더로 경로를 설정해 주면 Client가 해당 파일들을 직접 열수 없음

아래 코드는	        src/main/webapp/resources/css

			src/main/webapp/resources/js

			src/main/webapp/resources/html

			src/main/webapp/resources/imgaes 매핑해준거
	<mvc:resources location="/resources/images/" mapping="/images/**"></mvc:resources>
	<mvc:resources location="/resources/css/" mapping="/css/**"></mvc:resources>
	<mvc:resources location="/resources/js/" mapping="/js/**"></mvc:resources>
	<mvc:resources location="/resources/html/" mapping="/html/**"></mvc:resources>
	

히카리cp+커넥션풀 안쓰고 SimpleDataSource사용시 참고

	<!--커넥션 풀+히카리 cp 사용 안할거면 아래의 SimpleDricerDataSource사용-->
 	<bean id="dataSource" class="org.springframework.jdbc.datasource.SimpleDriverDataSource">
	<property name="driverClass" value="oracle.jdbc.driver.OracleDriver">
	</property>
	<property name="url" value="jdbc:oracle:thin:@localhost:1521:xe"/>
	<property name="username" value="hr"/>
	<property name="password" value="hr"/>
	</bean> 





5.log4j.xml & mybatis-config 추가

src/main/resources/log4j.xml
src/main/resources/mybatis-config.xml



5-1)log4j.xml

<?xml version="1.0" encoding="UTF-8"?>
<!-- <!DOCTYPE log4j:configuration PUBLIC "-//APACHE//DTD LOG4J 1.2//EN" "log4j.dtd"> -->
<!DOCTYPE log4j:configuration SYSTEM  "http://logging.apache.org/log4j/1.2/apidocs/org/apache/log4j/xml/doc-files/log4j.dtd">

<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/">

	<!-- Appenders -->
	<appender name="console" class="org.apache.log4j.ConsoleAppender">
		<param name="Target" value="System.out" />
		<layout class="org.apache.log4j.PatternLayout">
			<param name="ConversionPattern" value="%-5p: %c - %m%n" />
									<!-- 소문자c 카테고리 , %m로그.인포의 메시지  -->
		</layout>
	</appender>
	
	<!-- Application Loggers -->
	<logger name="com.my.vo">
		<level value="error" />
	</logger>
	
	<!-- 3rdparty Loggers -->
	<logger name="org.springframework.core">
		<level value="info" />
	</logger>	
	
	<logger name="org.springframework.beans">
		<level value="info" />
	</logger>
	
	<logger name="org.springframework.context">
		<level value="info" />
	</logger>

	<logger name="org.springframework.web">
		<level value="info" />
	</logger>

	<!-- Root Logger -->
	<root>
		<priority value="info" />
		<!-- 실제 배포떄는 info에서 프라이어티레벨을 에러단계로 올리면 에러만 표기  -->
		<appender-ref ref="console" />
	</root>	
</log4j:configuration>




5-2)mybatis-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>
	<settings>
		<!-- 언더스코어를 자동으로 카멜케이스로 매핑해주는 기능 -->
		<setting name="mapUnderscoreToCamelCase" value="true"/>
		<!--자동으로 널값이 들어오면 value=Null로 변경해주는 기능-->
		<setting name="jdbcTypeForNull" value="NULL"/>
	</settings>

	<typeAliases>
		<!-- 프로덕트vo 경로 매번 설정하기 귀찮을떈 Alias 생성 -->
		<typeAlias type="com.my.customer.vo.Customer" alias="Customer"/>
		<typeAlias type="com.my.board.vo.RepBoard" alias="RepBoard"/>

	</typeAliases>

  <environments default="development">
    <environment id="development">
      <transactionManager type="JDBC"/>
      <dataSource type="POOLED">
        <property name="driver" value="oracle.jdbc.driver.OracleDriver"/>
        <property name="url" value="jdbc:oracle:thin:@localhost:1521:xe"/>
        <property name="username" value="hr"/>
        <property name="password" value="hr"/>
      </dataSource>
    </environment>
  </environments>

  <mappers>
    <mapper resource="RepBoardMapper.xml"/>
  </mappers>
</configuration>








6. log4jdbc.log4j2.properties파일 생성

src/test/resources/log4jdbc.log4j2.properties 밑에는 파일내용
log4jdbc.spylogdelegator.name=net.sf.log4jdbc.log.slf4j.Slf4jSpyLogDelegator



7. Junit4 임포트

src/test/java 패키지에 new ->others..-> JAVA-> JUnit ->JUint Test Case

클릭후 아무 이름 생성 후 next (바로 피니쉬 누르지 말것)

<중요> New JUint 4 test( o ) 라디오 버튼 클릭후 생성하면
자동으로 임포트됨 
톰켓9.0버전 기준 JUint4 사용

8. test.java 생성

src/test/java (자동으로 만들지는 폴더들)에 test.java 만들기
	
package com.my.board.dao;
import static org.junit.Assert.assertEquals;
import java.util.List;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import com.my.board.vo.RepBoard;
import com.my.exception.FindException;
import com.my.exception.ModifyException;

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = {
		"file:src/main/webapp/WEB-INF/spring/appServlet/servlet-context.xml"
})
public class RepBoardDAOOracleTest {

	
	//자기가 테스트 하고 싶은 클레스
	@Autowired
	RepBoardDAOOracle dao;
	

	//꼭 테스트 어노테이션 붙일것!
	@Test
	public void testFindAll()throws ModifyException,FindException {
		//테스트 하고 싶은 코드...
		List<RepBoard> list =
					dao.findByNo(2);
					
		//aserEquls로 자기가 예상하는 결과
		assertEquals("제목2", list.get(0).getBoardTitle());
	}
}
	제대로 임포트 됬다면 아래코드에서 @RunWith에 빨간줄 안생길것

	메소드 내용은 달라도 , 위의 어노테이션 설정들은 그대로

	@Test 꼭붙여서 JUit 테스트 할것!

	테스트 방법 : 만든 메소드 이름부분(리턴타입 바로 뒤) 드래그
	1.testFindAll() 이부분 드래그

	2.드래그 한부분 우클릭 

	3.Run as.. -> JUnit Test 클릭하면 됨.

스프링 목록

스프링 부트 목록