오늘이라도

[Spring] 2. 파라미터 접근법 ④(@PathVariable), 화면 연결 형태(forward, redirect) / 웹사이트 만들기 : header, footer, db, 스프링에 라이브러리 불러오기(maven) 등 본문

취업성공패키지 SW 개발자 교육/Spring

[Spring] 2. 파라미터 접근법 ④(@PathVariable), 화면 연결 형태(forward, redirect) / 웹사이트 만들기 : header, footer, db, 스프링에 라이브러리 불러오기(maven) 등

upcake_ 2020. 6. 30. 11:04
반응형

https://github.com/upcake/Class_Examples

교육 중에 작성한 예제들은 깃허브에 올려두고 있습니다. 

gif 파일은 클릭해서 보는 것이 정확합니다.


 - 파라미터 접근법 ④(@PathVariable), 화면 연결 형태(forward, redirect) -

○ 컨트롤러 작성
 	1. @Controller 지정
 	2. @RequestMapping을 이용해 요청 경로 지정
 		 - 지정된 메서드에서 필요한 로직을 처리한 후
 			화면명 지정 : return "화면명";
 			화면에 전달할 데이터는 Model에 담는다.
 		
○ 화면에 데이터를 전달하는 형태 : Model, ModelAndView
 	1. Model
 		 - 실행되어질 Method의 파라미터로 Model 타입의 변수를 선언한 후
 			선언한 변수에 attribute로 데이터를 담는다.
 				: Model타입변수.addAttribute("속성명", 저장할데이터);
 	2. ModelAndView
 		 - ModelAndView 객체를 생성한 후 addObject로 데이터를 담는다.
 				ModelAndView model = new ModelAndView();
 				model.addObject("속성명", 저장할데이터);
 		 - 선언한 ModelAndView 객체를 반환한다.
 				return model;
 			
○ 화면을 통해 전달된 파라미터를 접근하는 방법
	1. HttpServletRequest를 사용
		 - getParameter()를 사용
	2. @RequestParam을 사용
		 - 매핑된 메서드의 파라미터로 @RequestParam 지정하여 선언
	3. 데이터 객체(DTO/VO)를 사용 (스프링에선 주로 VO 용어를 사용, 데이터가 영속성을 가질때에 VO)
		 - 매핑된 메서드의 파라미터로 데이터 객체 타입으로 지정하여 선언
20/06/30===========================================================================
	4. @PathVariable 사용 
		 - 요청 경로에 변수 형태로 데이터를 지정하여 선언
		 
○ 응답할 화면을 연결하는 형태 : forward, redirect
	1. forward
		- 요청하는 url과 응답하는 페이지가 서로 다르게 지정할 수 있는 형태
		- 실제 응답하는 페이지의 url이 아닌, 요청하는 url이 유지되는 형태
	
	2. redirect
		- 요청하는 url에 해당하는 페이지가 응답하는 형태

▲내용 정리

 

package com.hanul.web;

import java.text.SimpleDateFormat;
import java.util.Date;

import javax.servlet.http.HttpServletRequest;

import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.servlet.ModelAndView;

import member.MemberVO;

//컨트롤러 객체 생성 @Controller
@Controller
public class TestController {
	
	//어떤 요청에 대해 연결할 것인지 지정 @RequestMapping()
	//어노테이션이 올바르게 되었을때와 아닐때의 404에러 메시지가 다르다
	@RequestMapping("/first")
	public String view(Model model) {
		//addAttribute("어떻게 부를것인가", 어떤 데이터를)
		//어트리뷰트로 전달된 데이터는 EL로 표현 가능
		model.addAttribute("today", 
				new SimpleDateFormat("yyyy년 MM월 dd일").format(new Date()));
		
		return "index";	//first란 요청에 대해 index.jsp로 응답
	}
	
	@RequestMapping("/second")
	public ModelAndView view() {
		//모델앤뷰 객체를 생성해준다.
		ModelAndView mav = new ModelAndView();
		mav.addObject("now", 
				new SimpleDateFormat("a hh시 mm분 ss초").format(new Date()));
		
		//second가 index.jsp로 연결되게끔 지정
		mav.setViewName("index");
		
		return mav;
	}
	
	@RequestMapping("/join")
	public String join() {
		//데이터를 입력할 곳이기 때문에 전달할 데이터가 없음
		
		return "member/join";
	}
	
	//HttpServletRequest로 form의 데이터를 접근
	@RequestMapping("/joinRequest")
	public String join(HttpServletRequest request, Model model) {
		//데이터를 전달할 때에는 모델에 담아서전달하는데 전달할 데이터는 request에 담겨있다.
		model.addAttribute("name", request.getParameter("name"));
		model.addAttribute("gender", request.getParameter("gender"));
		model.addAttribute("email", request.getParameter("email"));
		model.addAttribute("method", "HttpServletRequest");
		
		return "member/info";
	}
	
	//@RequestParam으로 form의 데이터를 접근
	@RequestMapping("/joinRequestParam")
	public String join(Model model, String name,
			@RequestParam("gender") String g, String email) {
			//지정해도 되지만 지정하지 않아도 기본적으로 @RequestParam 처리가 된다.
			//form 태그의 name 속성과 통일을 하면 RequestParam의 매개 변수로 지정을 하지 않아도 되지만,
			//name 속성과 매개 변수의 이름을 다르게 설정하면 RequestParam의 매개 변수로 지정을 해주어야 한다.
		
		model.addAttribute("name", name);
		model.addAttribute("gender", g);
		model.addAttribute("email", email);
		model.addAttribute("method", "@RequestParam");
		
		return "member/info";
	}
	
	//데이터 객체(VO)로 form의 데이터를 접근
	/* 기존에는 이렇게 하나 join()의 매개변수에 MemberVO vo가 있다면 하지않아도 된다.
	public String join() {
		MemberVO vo = new MemberVO();
		vo.set ~~~
	}
	*/
	@RequestMapping("/joinDataObject")
	public String join(MemberVO vo, Model model) {
		model.addAttribute("vo", vo);
		model.addAttribute("method", "데이터 객체");
		
		return "member/info";
	}
	
	//@PathVariable로 form의 데이터를 접근
	@RequestMapping("/joinPathVariable/{n}/{gender}/{email}/")
	public String join(@PathVariable("n") String name, Model model,
			@PathVariable String gender, @PathVariable String email) {
		//@PathVariable은 파라미터마다 어노테이션을 따로 지정해주어야한다.
		//Model의 위치는 파라미터 처음, 중간, 끝, 어디여도 상관없다
		model.addAttribute("name", name);
		model.addAttribute("gender", gender);
		model.addAttribute("email", email);
		model.addAttribute("method", "@PathVariable");
		
		return "member/info";
	}
	//20/06/30=====================================================================================	
	//로그인 화면
	@RequestMapping("/login")
	public String login() {
		
		
		return "member/login";
	}
	
	//로그인 결과 화면 
	@RequestMapping("/login_result")
	public String login_result(String id, String pwd) {
		//아이디, 비번 일치시 home 화면으로 연결,
		//				일치하지 않는 경우 로그인 화면으로
		//DB에서 읽어온 데이터가 hong, 1234라고 가정
		if(id.equals("hong") && pwd.equals("1234")) {
//			return "home"; //forward : 요청 url이 유지되나 응답에 해당하는 url이 서로 상이한 경우 변하지 않는다.
			return "redirect:/";	//home.jsp의 요청 url은 '/'
		} else {
//			return "member/login"; //forward
			return "redirect:login";	//login.jsp의 요청 url
		}
	}
}

▲TestController.java

 

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>join jsp</title>
</head>
<body>
<h3>회원가입 화면</h3>
<form action="joinRequest" method="post" > <!-- action 값을 안주면 submit을 자기 자신에게 한다 -->
	<table border='1'>
		<tr>
			<th>성명</th>
			<td><input type="text" name="name" /></td>
		</tr>
		<tr>
			<th>성별</th>
			<td><input type="radio" name="gender" value="남" checked />남
				<input type="radio" name="gender" value="여" />여
			</td>
		</tr>
		<tr>
			<th>이메일</th>
			<td><input type="text" name="email" /></td>
		</tr>
	</table><br />
	<input type="submit" value="HttpServletRequest" />
	<input type="submit" value="@RequestParam" onclick="action='joinRequestParam'" />
	<!-- onclick 이벤트로 액션 속성을 바꿔준다. -->
	<input type="submit" value="데이터 객체" onclick="action='joinDataObject'" />
	<input type="submit" value="@PathVariable" onclick="go_submit( this.form )" />
</form>

<script type="text/javascript">
function go_submit(f) {
	f.action = 'joinPathVariable/' + f.name.value
				 + '/' + f.gender.value
				 + '/' + f.email.value + '/'; 
}


</script>
</body>
</html>

▲join.jsp

 - go_submit() 블록 중, f.email.value뒤에 + '/' 슬래쉬를 한번 더 써줘야 .com이 제대로 표기된다.

 

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core"  prefix="c"%>    
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>info JSP</title>
</head>
<body>
<h3>회원가입 결과 - ${method }</h3>

성명 : ${name }<br />
성별 : ${gender }<br />
이메일 : ${email }<br /><br>
<hr>
성명 : ${vo.name }<br />
성별 : ${vo.gender }<br />
이메일 : ${vo.email }<br /><br>

<a href="<c:url value='/'/>join">회원가입 화면으로</a>
</body>
</html>

▲info.jsp

 

forward 방식
redirect 방식

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<h3>로그인 화면</h3>
<form action="login_result" method="post">
	아이디 : <input type="text" name="id" /><br>
	비밀번호 : <input type="password" name="pwd" /><br><br>
	<input type="submit" value="로그인" />
</form>
</body>
</html>

▲login.jsp

 - forward 방식은 url이 안 바뀌고, redirect 방식은 url이 바뀐다.

 

- 웹사이트 만들기 : header, footer, db, 스프링에 라이브러리 불러오기(maven) 등 -

▲현재까지 만든 홈페이지 작동 화면

 

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

	<!-- 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</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>
		<load-on-startup>1</load-on-startup>
	</servlet>
		
	<servlet-mapping>
		<servlet-name>appServlet</servlet-name>
		<url-pattern>/</url-pattern>
	</servlet-mapping>


	<filter>
		<filter-name>encodingFilter</filter-name>
		
		 <!-- 작성할때 .java 파일같이 자동완성되는곳에서 작성한뒤 잘라내온다 -->
		<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
		
		<!-- 초기화 됐을때의 파라미터를 지정 -->
		<!-- CharacterEncodingFilter의 클래스에 매개 변수가 2개여서 안될 때는 forceEncoding까지 지정 -->
		<init-param>
			<param-name>encoding</param-name>
			<param-value>utf-8</param-value><!-- 'utf-8' << 대소문자 관계 없다 -->
		</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>
</web-app>

▲web.xml

 - 한글 표기를 위해 필터를 맵핑해준다

 

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<html>
<head>
<title>Home</title>
</head>
<body>
<jsp:include page="/WEB-INF/views/include/header.jsp" />
<div id="content">
	<img src="img/banner.png" style="width: 80%" />
</div>
<jsp:include page="/WEB-INF/views/include/footer.jsp" />
</body>
</html>

▲home.jsp

 

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<footer style='font-size:14px; border-top:1px solid #ccc; padding:15px 0'>
	<div>업체명 : upcake.tistory.com</div>
	<div>연락처 : 010-1234-5678</div>
	<div>Copyright 2020</div>
</footer>

▲footer.jsp

 

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ taglib prefix="core" uri="http://java.sun.com/jsp/jstl/core" %>
<!-- 스프링은 따로 라이브러리를 설치하지 않아도 다운 받을 라이브러리를 설정할 수 있다. -->
<!-- 그 중에 jstl 라이브러리도 있기 때문에 사용할 수 있는것 -->
<!-- 라이브러리 목록은 iot/pom.xml, c:\사용자\.m2에서 확인가능 -->

<link rel="stylesheet" type="text/css" href="css/common.css">
<!-- rel : 형태는 스타일 시트, 타입은 텍스트로된 css -->
<style>
header ul, header ul li {
	margin: 0;
	padding: 0;
	display: inline;
}

header .category {
	font-size: 18px;
}

header .category ul li:not(:first-child) { /* 첫번째 li만 빼고 지정 */
	padding-left: 30px;
}

header .category ul li a:hover, header .category ul li a.active {
	font-weight: bold;
	color: #0000cd;
}

</style>
<header style="border-bottom: 1px solid #ccc; padding: 15px 0; text-align: left">
	<div class="category" style="margin-left: 100px;"> 
		<ul>
			<li><a href="<core:url value='/' />"><img src="img/logo.png" /></a></li>
			<li><a href='list.cu' ${category eq 'cu' ? "class='active'" : '' } >고객 관리</a></li>
			<li><a href='list.no'>공지사항</a></li>
			<li><a href='list.bo'>방명록</a></li>
			<li><a href='list.da'>공공 데이터</a></li>
		</ul>
	</div>
</header>

▲header.jsp

 

▲css폴더 생성

 

@charset "UTF-8";
@import url('https://fonts.googleapis.com/css2?family=Noto+Sans+KR&display=swap');

body {
	margin: 0 auto;
	text-align: center;
	font-size: 16px;
	font-family: 'Noto Sans KR', sans-serif;
}

a:link, a:visited {
	text-decoration: none;
	color: #000;
}

#content {
	padding: 20px 0;
	min-width: 1024px;	/* 창의 최소 크기 지정 */
}

img {
	vertical-align: middle;	/* 세로축 가운데 정렬 */
}

table {
	width: 80%;
	margin: 0 auto;
	border: 1px solid;
	border-collapse: collapse;	/* 테두리 겹침 설정 collapse: 겹치지 않게 처리 */
}

table th, table td {
	border: 1px solid;
	padding: 5px 10px;
}

 

▲common.css

 

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

	<!-- DispatcherServlet Context: defines this servlet's request-processing infrastructure -->
	
	<!-- Enables the Spring MVC @Controller programming model -->
	<annotation-driven />

	<!-- Handles HTTP GET requests for /resources/** by efficiently serving up static resources in the ${webappRoot}/resources directory -->
	<resources mapping="/resources/**" location="/resources/" />
	
	<!-- resources를 따로 지정하지 않아도 바로 css폴더로 연결되게끔 지정 -->
	<!-- 경로지정만 해도 css폴더의 하위 파일들을 모두 적용되게끔 지정 -->
	<resources location="/resources/css/" mapping="/css/**" />
	
	<!-- images 폴더 맵핑 -->
	<resources location="/resources/images/" mapping="/img/**" />

	<!-- Resolves views selected for rendering by @Controllers to .jsp resources in the /WEB-INF/views directory -->
	<beans:bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
		<beans:property name="prefix" value="/WEB-INF/views/" />
		<beans:property name="suffix" value=".jsp" />
	</beans:bean>
	
	<context:component-scan base-package="com.hanul.iot" />
	
	
	
</beans:beans>

▲servlet-context.xml

 - src\main\webapp\WEB-INF\spring\appServlet\servlet-context.xml

 

package com.hanul.iot;

import javax.servlet.http.HttpSession;

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

@Controller
public class CustomerController {

	//고객 관리 목록
	@RequestMapping("/list.cu")
	public String list(HttpSession session) {
		//서블릿에서는 request에서 getsession으로 세션을 가져왔다면,
		//스프링에서는 바로 세션에 접근할 수 있게 HttpSession을 지원한다.
		
		//category 어트리뷰트의 값에 따라 active 속성을 결정한다.
		session.setAttribute("category", "cu");		//카테고리 어트리뷰트에 cu를 설정
		
		return "customer/list";
	}
}

▲CustomerController.java

 

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>list JSP</title>
</head>
<body>
<jsp:include page="/WEB-INF/views/include/header.jsp"></jsp:include>
<div id="content">
	<h3>고객 목록</h3>
	<table>
		<tr>
			<th>번호</th>
			<th>고객명</th>
			<th>전화번호</th>
		</tr>
		<tr>
			<td>데이터1</td>
			<td>데이터2</td>
			<td>데이터3</td>
		</tr>
	</table>
</div>
<jsp:include page="/WEB-INF/views/include/footer.jsp"></jsp:include>
</body>
</html>

▲list.jsp

 

package com.hanul.iot;

import java.util.Locale;

import javax.servlet.http.HttpSession;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;

@Controller
public class HomeController {
	
	private static final Logger logger = LoggerFactory.getLogger(HomeController.class);
	

	@RequestMapping(value = "/", method = RequestMethod.GET)
	public String home(HttpSession session, Locale locale, Model model) {
//		session.setAttribute("category", "");	//로고를 클릭하면 category 값을 빈 문자열로 바꿈
		session.removeAttribute("category");	//category 값을 제거
		
		return "home";
	}
}

▲HomeController.java

 

○ 고객 관리 DB 설정 : table.sql

○ pom.xml에 JDBC 라이브러리 추가 설정
	- mvnrepository.com
		1. jdbc 검색
		2. Spring JDBC 클릭
		3. 5.2.2 RELEASE (20/06/30 기준 조회수가 가장 많음)
		4. MAVEN 탭의 내용 복사
		5. pom.xml의 <dependencies> 블록안에 붙여넣기
		6. 다운로드를 기다린 뒤 컨텍스트가 다시 로드 됐을때에 에러가 없으면 성공
		7. C:\Users\계정명\.m2\repository\org\springframework\spring-jdbc\5.2.2.RELEASE 에서 확인 가능

○ DBCP(Database Connection Pool) 라이브러리 추가
	- DB가 연결 객체를 미리 만들어 놓고 필요할 때에 꺼내서 쓰고 다시 반납
	- 유효한 자원을 꺼내서 쓰기 때문에 매번 연결을 만들 필요가 없음
	
		1. dbcp 검색
		2. 1.4 클릭
		3. MAVAN 탭의 내용 복사
		4. pom.xml의 <dependencies> 블록안에 붙여넣기
		5. 다운로드를 기다린 뒤 컨텍스트가 다시 로드 됐을때에 에러가 없으면 성공

○ OJDBC 라이브러리 추가 - maven 이용

○ MyBatis, MyBatis 스프링 라이브러리 추가

▲내용 정리

 

--테이블 생성
CREATE TABLE customer (
	id		NUMBER CONSTRAINT customer_id_pk PRIMARY KEY,
	name	VARCHAR2(50) NOT NULL,
	gender	VARCHAR2(3) NOT NULL,
	email	VARCHAR2(50),
	phone	VARCHAR2(13)
);

--시퀀스 생성
CREATE SEQUENCE seq_customer START WITH 1 INCREMENT BY 1;

--레코드 삽입
INSERT INTO customer(id, name, gender)
VALUES (seq_customer.NEXTVAL, '홍길동', '남');

INSERT INTO customer(name, gender)
VALUES ('심청', '여');

--트리거(trigger) 설정
CREATE OR REPLACE TRIGGER trg_customer
    BEFORE INSERT ON customer   --커스터머 테이블에 인서트가 되기전에
    FOR EACH ROW    --모든 행에 대하여
BEGIN   --시작한다
    SELECT seq_customer.NEXTVAL INTO :new.id FROM dual;  --시퀀스의 데이터를 담고있는 테이블은 없으므로 더미 테이블(dual)에서 조회한다.
END;    
/       --끝 슬래쉬까지 써줘야한다

--조회
SELECT * FROM customer;

--커밋
COMMIT;

 

▲table.sql

 

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/maven-v4_0_0.xsd">
	<modelVersion>4.0.0</modelVersion>
	<groupId>com.hanul</groupId>
	<artifactId>iot</artifactId>
	<name>iot</name>
	<packaging>war</packaging>
	<version>1.0.0-BUILD-SNAPSHOT</version>
	<properties>
		<java-version>1.6</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>
	<dependencies>
		<!-- Spring -->
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-context</artifactId>
			<version>${org.springframework-version}</version>
			<exclusions>
				<!-- Exclude Commons Logging in favor of SLF4j -->
				<exclusion>
					<groupId>commons-logging</groupId>
					<artifactId>commons-logging</artifactId>
				 </exclusion>
			</exclusions>
		</dependency>
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-webmvc</artifactId>
			<version>${org.springframework-version}</version>
		</dependency>
				
		<!-- AspectJ -->
		<dependency>
			<groupId>org.aspectj</groupId>
			<artifactId>aspectjrt</artifactId>
			<version>${org.aspectj-version}</version>
		</dependency>	
		
		<!-- Logging -->
		<dependency>
			<groupId>org.slf4j</groupId>
			<artifactId>slf4j-api</artifactId>
			<version>${org.slf4j-version}</version>
		</dependency>
		<dependency>
			<groupId>org.slf4j</groupId>
			<artifactId>jcl-over-slf4j</artifactId>
			<version>${org.slf4j-version}</version>
			<scope>runtime</scope>
		</dependency>
		<dependency>
			<groupId>org.slf4j</groupId>
			<artifactId>slf4j-log4j12</artifactId>
			<version>${org.slf4j-version}</version>
			<scope>runtime</scope>
		</dependency>
		<dependency>
			<groupId>log4j</groupId>
			<artifactId>log4j</artifactId>
			<version>1.2.15</version>
			<exclusions>
				<exclusion>
					<groupId>javax.mail</groupId>
					<artifactId>mail</artifactId>
				</exclusion>
				<exclusion>
					<groupId>javax.jms</groupId>
					<artifactId>jms</artifactId>
				</exclusion>
				<exclusion>
					<groupId>com.sun.jdmk</groupId>
					<artifactId>jmxtools</artifactId>
				</exclusion>
				<exclusion>
					<groupId>com.sun.jmx</groupId>
					<artifactId>jmxri</artifactId>
				</exclusion>
			</exclusions>
			<scope>runtime</scope>
		</dependency>

		<!-- @Inject -->
		<dependency>
			<groupId>javax.inject</groupId>
			<artifactId>javax.inject</artifactId>
			<version>1</version>
		</dependency>
				
		<!-- Servlet -->
		<dependency>
			<groupId>javax.servlet</groupId>
			<artifactId>servlet-api</artifactId>
			<version>2.5</version>
			<scope>provided</scope>
		</dependency>
		<dependency>
			<groupId>javax.servlet.jsp</groupId>
			<artifactId>jsp-api</artifactId>
			<version>2.1</version>
			<scope>provided</scope>
		</dependency>
		<dependency>
			<groupId>javax.servlet</groupId>
			<artifactId>jstl</artifactId>
			<version>1.2</version>
		</dependency>
	
		<!-- Test -->
		<dependency>
			<groupId>junit</groupId>
			<artifactId>junit</artifactId>
			<version>4.7</version>
			<scope>test</scope>
		</dependency>       
		
		<!-- https://mvnrepository.com/artifact/org.springframework/spring-jdbc -->
		<!-- 스프링에서 JDBC를 사용하기 위한 dependency -->
		<dependency>
		    <groupId>org.springframework</groupId>
		    <artifactId>spring-jdbc</artifactId>
		    <version>5.2.2.RELEASE</version>
		</dependency>
		
		<!-- https://mvnrepository.com/artifact/commons-dbcp/commons-dbcp -->
		<!-- DBCP dependency -->
		<dependency>
		    <groupId>commons-dbcp</groupId>
		    <artifactId>commons-dbcp</artifactId>
		    <version>1.4</version>
		</dependency>
	
	
		<!-- https://mvnrepository.com/artifact/com.oracle.ojdbc/ojdbc8 -->
		<!-- 오라클용 jdbc ojdbc8 -->
		<dependency>
		    <groupId>com.oracle.ojdbc</groupId>
		    <artifactId>ojdbc8</artifactId>
		    <version>19.3.0.0</version>
		</dependency>
			
		<!-- https://mvnrepository.com/artifact/org.mybatis/mybatis -->
		<!-- Mybatis 프레임워크를 사용하기 위한 dependency -->
		<dependency>
		    <groupId>org.mybatis</groupId>
		    <artifactId>mybatis</artifactId>
		    <version>3.5.3</version>
		</dependency>
			
			
		<!-- https://mvnrepository.com/artifact/org.mybatis/mybatis-spring -->
		<!-- MyBatis 스프링 dependency -->
		<dependency>
		    <groupId>org.mybatis</groupId>
		    <artifactId>mybatis-spring</artifactId>
		    <version>2.0.3</version>
		</dependency>
			
	</dependencies>
    <build>
        <plugins>
            <plugin>
                <artifactId>maven-eclipse-plugin</artifactId>
                <version>2.9</version>
                <configuration>
                    <additionalProjectnatures>
                        <projectnature>org.springframework.ide.eclipse.core.springnature</projectnature>
                    </additionalProjectnatures>
                    <additionalBuildcommands>
                        <buildcommand>org.springframework.ide.eclipse.core.springbuilder</buildcommand>
                    </additionalBuildcommands>
                    <downloadSources>true</downloadSources>
                    <downloadJavadocs>true</downloadJavadocs>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>2.5.1</version>
                <configuration>
                    <source>1.6</source>
                    <target>1.6</target>
                    <compilerArgument>-Xlint:all</compilerArgument>
                    <showWarnings>true</showWarnings>
                    <showDeprecation>true</showDeprecation>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.codehaus.mojo</groupId>
                <artifactId>exec-maven-plugin</artifactId>
                <version>1.2.1</version>
                <configuration>
                    <mainClass>org.test.int1.Main</mainClass>
                </configuration>
            </plugin>
        </plugins>
    </build>
</project>

▲pom.xml

반응형