0_Spring(세팅)

study/Spring · 2020. 2. 18. 08:50

C:\workspace\7_Framework 생성
Spring 기본 개발 환경 구축
1. STS(Spring Tool Suite) 
 - Spring Framework를 사용하기 위한 개발 툴
 - 일반적으로는 별도의 설치 도구 또는
   이클립스 IDE에서 제공하는 STS 플러그인을 통해 간단히 설치 가능
   -> Eclipse STS 플러그인 설치하기
       [Help] - [Eclipse MarketPlace..] 클릭 후 검색창에 'STS' 검색하여 설치


 
# 만약 검색이 안되면 버전이 낮은 이클립스를 설치해야됨
계속 Confirm 하여 설치/ 완료시 restart

2. Eclipse 구성 설정 추가
이클립스를 사용할 때 여러 JDK 버전을 사용할 때가 있음
하지만 이클립스 버전에 따라 JDK 버전이 너무 낮으면 오류 및 실행 시 문제 발생할 수 있음
이클립스 내장 버전이 아닌 현재 설치된 JDK버전을 인식 하도록
eclipse.ini 구성 설정 파일의 추가 정보를 기입 후 이클립스 재실행 해야한다
(추가정보)
설치된 이클립스 폴더를 열고 eclipse.ini실행 후 
-vm
C:\Program Files\Java\jdk1.8.0_212\bin\javaw.exe 
를 추가 후 이클립스 재시작
 


3. 이클립스 환경 설정
 1) 인코딩 설정
 -> [Window] - [Preferences] -> 'enco' 검색 후 아래 검색된 내용들 전부 
     'UTF-8'로 인코딩 적용 + json file(별도 검색)
 2) Server Runtime Enviroment 설정
 -> [Window] - [Preferences] -> 'server' 검색 후 [Runtime Enviroments]를 
     선택해 톰캣 환경을 구축해준다.
 3) Git Ignored Resources - target폴더 제외
    Maven을 이용하여 프로젝트를 진행할 경우 target이라는 폴더가 생성됨
    Target 폴더는 프로젝트 컴파일 시 컴파일된 파일이 저장되는 target/classes
    가 생성되는 곳
    일반적으로 maven clean 옵션을 사용하면 제거되어 문제는 없지만 
    Git, SVN 등을 이용하여 프로젝트를 형상 관리할 경우 컴파일 결과까지 
    공유할 필요가 없으므로 target폴더를 공유목록에서 제거한다.
 -> [Window] - [Preferences] - [Team] - [Ignored Resources] -
-> [Add Patterns..]를 통해 */target/* 추가
4) Maven 다운로드
 http://maven.apache.org/
 


 다운로드 받은 zip 파일을 dev 폴더에서 압축 해제
  -> 라이브러리들이 저장될 폴더 생성
    * 압축 해제한 경로에 'repository' 라는 저장소 역할의 새 폴더 생성


 -> Settings.xml 파일 수정
     conf폴더 -> settings.xml 파일을 열어 주석 처리된 를 빼
     내어 위에 생성한 'repository' 폴더의 경로를 작성
 -> 이클립스와 Maven 연동
     [Window] - [Preferences] - [Maven] - [User Setrings]에 접근하여
     [User Setrings]의 값을 conf 폴더의 setting.xml로 변경
     ->  폴더가 Maven으로 받은 라이브러리 저장소가 됨

 5) 서버생성

4. 프로젝트 생성
 -> Spring Legacy Project 생성
     [New] - [Spring Legacy Project] - 프로젝트명 입력
     ** Templates : 'Spring MVC Project' 템플릿 선택
     [Next] > 최상위 패키지 지정(최소 3레벨) : com.kh.spring
                                   -> 3번째 레벨이 ContextPath가 됨
(프로젝트 생성 시 Maven이 필요한 라이브러리와 설정을 인터넷으로 
다운로드 하는데 일정 시간이 소요됨 -> progress bar를 확인하여 
끝날 때 까지 실행하지 말 것)
** repository 폴더에 필요한 라이브러리들이 다운로드 되는지 확인
** JSTL 라이브러리는 Maven에서 오류로 인해 제대로 등록되지 않기 때문에 
   별도의 JSTL 라이브러리를 lib 폴더에 추가

  -> 프로젝트 설정 변경
      Spring MVC Project는 생성 시 JRE 버전, 서버 등록 등이
      제대로 되어있지 않은 상태 - > 설정 수정이 필요!!
      프로젝트 우클릭 - [Properties] - [Project Facets]
* Java 버전 -> 1.8
* Dynamic Web modul -> 3.1
* Spring server로 등록

-> JSP 파일 컴파일 위치 지정(jspwork)

-> Mybatis DTD 설정 추가
>> mybatis-config.xml 설정 파일 생성 시 DTD 설정을 해두면, mybatis 관련 xml 파일 설정할 때 재사용 할 수 있음
>> DTD(Document Type Definition) 설정하기
1) Window - Preferences - XML - XML Catalog - User Specified Entries - Add
- Config
Location : http://mybatis.org/dtd/mybatis-3-config.dtd
=> System ID로 사용
Key type : Public ID
Key : -//mybatis.org//DTD Config 3.0//EN

- Mapper
Location : http://mybatis.org/dtd/mybatis-3-mapper.dtd
 => System ID로 사용
Key type : Public ID
Key : -//mybatis.org//DTD Mapper 3.0//EN


2) -> mybatis-config.xml 생성
 

-> mybatis-config.xml 내용

-> pom.xml 설정 버전부분(Java, SpringFramework의 버전을 사용하는 버전에 맞게 작성)

OJDBC6 라이브러리 다운로드를 위한 사설 저장소 추가
(properties와 dependencies 사이에 작성)

 내용 추가
 - 프로젝트에 사용할 라이브러리를 추가(작성) 하는 곳
 - https://mvnrepository.com/

 

Maven Repository: Search/Browse/Explore

BBoxDB Server Last Release on Feb 16, 2020

mvnrepository.com

ojbc6는 외부 사설 저장소에 있으므로 repositories태그로 사설 저장소를 추가해야함
사설저장소 추가 후 dependencies 태그에 추가

나머지 Mybatis , mybatis-spring, spring-jdbc dependency에 등록

<!-- ojdbc6 다운로드를 위한 외부 사설 저장소 추가 -->
	<repositories>
		<repository>
			<id>Spring Plugins</id>
			<url>https://repo.spring.io/plugins-release/</url>
		</repository>
	</repositories>
	
	<!-- 외부 저장소로 부터 라이브러리를 의존하여 다운받을 수 있도록
		내용을 작성하는 태그 -->
	<dependencies>
		<!-- ojdbc6(JDBC 드라이버) 라이브러리 -->
		<!-- https://mvnrepository.com/artifact/com.oracle/ojdbc6 -->
		<dependency>
		    <groupId>com.oracle</groupId>
		    <artifactId>ojdbc6</artifactId>
		    <version>11.2.0.3</version>
		</dependency>
		
		<!-- Mybatis 라이브러리 -->
		<!-- https://mvnrepository.com/artifact/org.mybatis/mybatis -->
		<dependency>
		    <groupId>org.mybatis</groupId>
		    <artifactId>mybatis</artifactId>
		    <version>3.5.4</version>
		</dependency>
		
		<!-- Spring에서 Mybatis를 쉽게 사용할 수 있게 하는 라이브러리 -->
		<!-- https://mvnrepository.com/artifact/org.mybatis/mybatis-spring -->
		<dependency>
		    <groupId>org.mybatis</groupId>
		    <artifactId>mybatis-spring</artifactId>
		    <version>2.0.3</version>
		</dependency>
		
		<!-- Spring에서 JDBC를 쉽게 사용할수 있게 하는 라이브러리 -->
		<!-- https://mvnrepository.com/artifact/org.springframework/spring-jdbc -->
		<dependency>
		    <groupId>org.springframework</groupId>
		    <artifactId>spring-jdbc</artifactId>
		    <version>${org.springframework-version}</version>
		    <!-- 위에 properties 작성된 Spring의 버전 -->
		</dependency>
		

Connection Pool을 사용하기 위한 라이브러리

GSON 라이브러리

		<!-- Connection Pool을 사용하기 위한 라이브러리 -->
		<!-- https://mvnrepository.com/artifact/commons-dbcp/commons-dbcp -->
		<dependency>
		    <groupId>commons-dbcp</groupId>
		    <artifactId>commons-dbcp</artifactId>
		    <version>1.4</version>
		</dependency>
		
		<!-- GSON 라이브러리 -->
		<!-- https://mvnrepository.com/artifact/com.google.code.gson/gson -->
		<dependency>
		    <groupId>com.google.code.gson</groupId>
		    <artifactId>gson</artifactId>
		    <version>2.8.6</version>
		</dependency>

<build> 설정 
빌드시 해당 프로젝트의 JDK 버전에 맞게 빌드되도록 컴파일러 설정

** WEB-INF 내부에 있는 spring 폴더 위치 변경하기 
 - WEB-INF가 포함된 webapp 폴더는 애플리케이션 개발 완료 후 배포 되는 부분으로
   배포와 관련된 파일만을 담고 있는 것이 맞음
 - 하지만 spring 폴더에 있는 root-context.xml 등의 파일은 
   서버 구동 시 설정되는 내용 또는 DB연결, AOP설정, HandlerMapping, ViewResolver 등
   애플리케이션 구동, 설정 등과 관련된 내용 작성하기 때문에 
   배포되는 webapp 폴더에 들어있는 것은 좋지 않음

-> 그러므로 spring 폴더를 src/main/resources 폴더로 이동

 

-> web.xml에 spring폴더안에 root-context.xml을 이동해서 경로를 다시 잡아주는 설정
# classpath : sources folder 와 같음 

-> (dispatcherServlet 경로) servlet-context.xml 이동해서 경로를 다시 잡아주는 설정

-> web.xml

web.xml 맨아래에 한글 깨짐 방지를 위한 필터 추가

상단에 시작시 읽어들이는 welcome파일 추가

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5" 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_2_5.xsd">

	<!-- 
		web.xml
		- Tomact (WAS) 구동 시 제일 먼저 읽어 들이는 파일
		- 서버 실행 시 초기에 읽어야할 설정파일(xml)을 읽어 들이도록 내부에 작성(등록)
		+ Servlet 실행 이전에 Servlet 초기화(init)하는 용도로도 사용
	 -->
	
	<welcome-file-list>
		<welcome-file>index.jsp</welcome-file>
	</welcome-file-list>
	<!-- 
		contextConfigLocation
		ContextLoaderListener로 pre-loading을 진행할 설정 xml 문서들의 경로를 등록
	 -->
	<!-- The definition of the Root Spring Container shared by all Servlets and Filters -->
	<context-param>
		<param-name>contextConfigLocation</param-name>
		<param-value>classpath:spring/root-context.xml</param-value>
	</context-param>
	
	<!-- 
		- ContextLoaderListener
		web.xml 내부에 읽어 들여야 할 설정 xml 문서들 중 
		가장 먼저 로딩(pre-loading) 되어야 하는 xml 문서를 읽이 위한 리스너
	 -->
	<!-- Creates the Spring Container shared by all Servlets and Filters -->
	<listener>
		<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
	</listener>

	<!-- 
		DispatcherServlet
		요청되는 url-pattern에 해당하는 Controller를 HandlerMapping하고
		응답되어질 페이지를 제어하는 View Resolver의 정보를 저장하고 있는 문서(xml)
		
		-> DispatcherServlet도 web.xml에 등록되어야만 사용 가능
	 -->
	<!-- 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>classpath: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>


	<!-- 한글 깨짐 방지를 위한 Filter 추가 -->
	<!-- 별도의 filter 클래스를 만들지 않고 스프링에서 제공하는 filter를 사용 -->
	<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>
	</filter>
	<filter-mapping>
		<filter-name>encodingFilter</filter-name>
		<url-pattern>/*</url-pattern>
	</filter-mapping>
</web-app>