글쓰기

개인 공부 상자/Spring 실습

[3편] 스프링 환경 구성[스마트인재개발원]

RSpring41 2021. 8. 25. 13:20

저번 1편에서 프로젝트를 생성하고 2편에서는 DB를 구성해봤다. 이제 이 둘을 연동해보자!

 

 

[1편] 스프링 환경 구성[스마트인재개발원]

이 글은 Spring이라는 것을 처음 사용해 보거나 중간에 어려움이 있는 사람들을 위해서 또는, 나중에 참고할 겸, 다른 사람 알려줄 겸 겸사겸사 적는다!!! 참고하실 분은 참고하세요!! (지금부터 작

rspring41.tistory.com

 

[2편] 스프링 환경 구성[스마트인재개발원]

저번 편에 이어서 Spring에서 DB 연동 계속하겠다!! [1편] 스프링 환경 구성[스마트인재개발원] 이 글은 Spring이라는 것을 처음 사용해 보거나 중간에 어려움이 있는 사람들을 위해서 또는, 나중에

rspring41.tistory.com

 

 

 

'스마트인재개발원'에서 진행했던 Spring 강의에 배웠던 내용을 정리 하자면 

1. DB에 연결이 필요하다.(My-SQL  -  pom.xml에 <dependency> 추가)

2. DB에 연결을 구현하는 프레임워크가 필요하다.(My-Batis  -  pom.xml에 <dependency> 추가)

3. 쿼리문 저장하고 있는 Mapper.xml파일이 필요하다.(Mapper.java파일도 필요하다)

4. DB연결 설정할 파일이 필요하다.(properties파일)

5. 위에 파일들에 경로를 설정해줄 root-context.xml 파일 수정이 필하다.

6. 데이터 전달에 필요한 VO가 필요하며 이를 별칭으로 연결하기 위해 config.xml 파일이 필요하다.

7. Mapper에 있는 쿼리문 실행은 Controller에서 처리한다.

 

음.. 이렇게 이해 했는데 일단 차근차근 하나씩 해보자!

 

 

1. My-SQL연결과 My-batis 설치

				<!-- mysql API 부분 -->
		<dependency>
			<groupId>mysql</groupId>
			<artifactId>mysql-connector-java</artifactId>
			<version>5.1.42</version>
		</dependency>

		<!-- Spring-jdbc API부분 -->
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-jdbc</artifactId>
			<version>4.3.14.RELEASE</version>
		</dependency>


		<!-- mybatis-spring 부분 -->
		<dependency>
			<groupId>org.mybatis</groupId>
			<artifactId>mybatis-spring</artifactId>
			<version>1.3.2</version>
		</dependency>

		<!--mybatis 부분 -->
		<dependency>
			<groupId>org.mybatis</groupId>
			<artifactId>mybatis</artifactId>
			<version>3.4.6</version>
		</dependency>

위 코드를 pom.xml파일에 dependency 부분에 넣어주고 jre버전도 1.8로 업데이트 해주자!

 

이렇게 까지 하고 저장을 하면 자동으로 업데이트가 된다. 

하지만 JRE버전은 그대로인데 '스마트인재개발원'에서 선생님이 이럴 경우에는 강제로 업데이트 해줘야 한다고 하셨다.

방법은 아래와 같다.

위 설정으로 들어가 업데이트할 프로젝트를 선택하고 하단에 있는 강제 업데이트 옵션을 체크한 이후 OK를 클릭한다.

 

이렇게 하면 프로젝트에서 JDBC와 My-SQL, My-Batis 코드를 사용 준비가 완료 되었다.

이제 이클립스에 DB와 연동을 시작해보자

(딱히 이 과정은 필요 없지만 '스마트인재개발원'에서 수업을 진행 할때 이런 설정을 항상 같이 했기 때문에 꼭 필요한 설정인줄 알았지만 해당 설정은 이클립스라는 환경에서 SQL문을 접근하기 위한 방법일 뿐이다.)

 

새로운 연결을 만든다.

새로운 DataBase연결 생성

My-SQL선택 및 이름 설정한다.

 

여기서가 중요하다!! 아까전에 pom.xml에서 설정했던

		<dependency>
			<groupId>mysql</groupId>
			<artifactId>mysql-connector-java</artifactId>
			<version>5.1.42</version>
		</dependency>

이 부분에 mysql-connector 버전이 5.1인것에 주목!!

전자정부 프레임워크 폴더에서 JAR파일을 버전에 맞게 추가 해줘야한다. 자세한 내용은 아래 참고!!

 

 

 

저기 신기하게 생긴 버튼을 눌러서 새로 설정을 해주어야 한다.

(글쓴이는 '스마트인재개발원' 강의 내용을 복습할때 이미 만들어 버려서 이미 존재한다.)

 

새로운 창이 열리고 사용한 MySQL 드라이버 버전을 pom.xml에서 설정했던 버전과 동일한 5.1클릭!

 

이후 JAR List 탭으로 진입한다.

 

JAR List 탭으로 진입한 이후 샘플로 들어있는 JAR 파일 경로를 수정 해주어야 한다.

파일은 전자정부 프레임워크 폴더 내부에 있다.

 

그런 다음 Properties탭으로 이동하여 연결할 DataBase이름과 DB 접속 계정, 패스워드를 입력한다.

 

이제 Ok를 누르고 처음 열렸던 페이지로 돌아오게 될 것이다. 이때 Test Connection을 눌러 연결을 정상적으로 되는지 확인해보자

 

두둥탁! Ping failled 라니 

이런 경우 URL, 계정, 패스워드가 잘못 되었거나 My-SQL서버가 실행되고 있지 않은 경우다.

('스마트인재개발원'에서 My-SQL을 처음 접했을때 가끔 만나던 오류이다! 이제 이런 오류는 후딱 해결한다!!)

 

My-SQL 서버 실행은 전자정부 프레임워크 폴더에 들어가서 startup.bat을 실행하여 서버를 실행시켜보자

 

Test Connection을 다시 해본 결과 Ping succeeded! 성공이다! 마지막으로 Finish를 눌러 DB연결을 추가 해보자

이제 이클립스상에서 DB연동이 되었다. 

만약 Database Connections에서 탭이 닫혀 있다면 우클릭으로 연결 또는 더블클릭하게되면 DB에 연결되게 된다.

 

DB연결이 되었으니 이제 SQL파일을 하나 만들어서 실습을 진행 해보자!

 

 

SQL문 실행에 앞서 Connection을 설정 해주어야 한다.

아까 설정했던 버전과 동일하게 MySql_5.1로 설정해주고 하위 설정을 마무리한다.

 

이제 실행할 sql문을 드레그 한 이후 '우클릭 + 메뉴' 또는 'Alt + x' 로 실행 해보자!

실행 하고 나면 하단 탭에 결과가 출력된다.

실습용 테이블이 정상적으로 생성된것을 확인할 수 있다!

 

 

 

 

이제 pom.xml에서 추가했던 mysql, Spring-jdbc, mybatis-spring, mybatis를

root-context.xml파일에서 설정해서 서버에서 접근할 수 있도록 해보자!!

root-context.xml경로
root-context.xml 파일

 

해당 파일을 열어보면 횡 하다... 이제 여기에 많은걸 적어주어야 한다!!!

(이제부터 작성할 내용은 순순히 개인적으로 이해한 내용임으로 틀릴수도 있습니다!!)

 

먼저 beans 테그에 속성을 변경해야 한다.

(아마 mybatis-spring를 사용하기 위해 라이브러리를 불러오는거 같다)

<?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:mybatis-spring="http://mybatis.org/schema/mybatis-spring"
	xsi:schemaLocation="http://mybatis.org/schema/mybatis-spring http://mybatis.org/schema/mybatis-spring.xsd
	
	http://www.springframework.org/schema/beans https://www.springframework.org/schema/beans/spring-beans.xsd">
    
</beans>

 

이제 bean태그들을 생성하여 속성을 설정 해주어야 한다.

코드 가독성을 위해 설명은 주석으로 처리 하겠다!

<?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:mybatis-spring="http://mybatis.org/schema/mybatis-spring"
	xsi:schemaLocation="http://mybatis.org/schema/mybatis-spring http://mybatis.org/schema/mybatis-spring.xsd
	
	http://www.springframework.org/schema/beans https://www.springframework.org/schema/beans/spring-beans.xsd">



	<!-- myBatis-Spring -->
	<!-- class파일 연결 -->
	<!-- property name="dataSource"은 Spring-JDBC에 연동하기 위한 참조할 id를 설정  (아래 Spring-jdbc 태그에 ID 참고)-->
	<!-- property name="configLocation"은 config.xml에 경로를 설정 -->
	<bean class="org.mybatis.spring.SqlSessionFactoryBean">
		<property name="dataSource" ref="simpleDriverDataSource"></property>
		<property name="configLocation"	value="WEB-INF/mybatis/config.xml"></property>
	</bean>





	<!-- Spring-jdbc -->
	<!-- Spring을 사용하지 않고 myBatis를 사용할때 필요한 파일인 config.xml 파일을 여기서 설정해준다 -->
	<!-- id설정은 myBatis-Spring에 연결하기 위함이다 -->
	<!-- class파일 연결 -->
	<!-- property는 DB연결 위한 속성 설저이다 -->
	<bean id="simpleDriverDataSource" class="org.springframework.jdbc.datasource.SimpleDriverDataSource">
		<property name="driverClass" value="${driver}"></property>
		<property name="url" value="${url}"></property>
		<property name="username" value="${username}"></property>
		<property name="password" value="${password}"></property>
	</bean>

	
	
	
	<!-- db.properties파일 연결 -->
	<!-- class파일 연결 -->
	<!-- property에서 db.properties파일에 경로를 설정해준다 -->
	<bean
		class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
		<property name="locations" value="/WEB-INF/mybatis/db.properties">
		</property>
	</bean>



	<!-- myBatis-Spring은 최상단 beans태그에 xmlns속성으로 링크 연결해주고 생성된 myBatis-Spring태그를 
		이용하여 Base-package경로를 설정해줘야함 -->

	<!-- 최상단에 들어가는 코드 -->
	<!-- xmlns:mybatis-spring="http://mybatis.org/schema/mybatis-spring" xsi:schemaLocation="http://mybatis.org/schema/mybatis-spring 
		http://mybatis.org/schema/mybatis-spring.xsd -->

	<!-- 매퍼 자동 스캔 -->
	<!-- @Mapper를 보고 검사 -->
	<mybatis-spring:scan base-package="level_1.level_2.mapper" />

	
</beans>

 

새롭게 추가된 파일 및 경로

 

여기서  대부분은 문법같이 정해져 있는 형식이고 중요하게 봐야 하는 부분은 

db.properties DB접속 속성을 저장
config.xml VO 별칭들을 저장
mybatis-spring:scan base-package @mapper를 자동으로 스캔하는 폴더 경로

이렇게 3가지 밖에 없다!!!  

 

 

1. db.properties는 접속 주소, DB접속 계정, 패스워드 등에 기본적인 접속 주소이다.

driver=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/ps
username=root
password=12345

 

 

2. config.xml는 VO에 모든 패키지 경로를 계속 적지 않고 별칭을 이용해 접근하기 위한 목록 파일이다.

<?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>
 
    <!-- 패키지 경로 별칭 설정 -->
    <!-- 여기서  VO에 모든 경로를 적으면서 사용하면 불편하니까 별칭을 설정해준다 -->
    <typeAliases>
        
        <typeAlias type="level_1.level_2.level_3.연결할 파일 이름 " alias="사용할 별칭"/>
        
        
    </typeAliases>

</configuration>

 

 

3. mybatis-spring:scan base-package 속성은 자동으로 @Mapper을 자동으로 인식하고 이를 사용할수 있게 Mapper파일에 경로를 설정 하는 부분이다. 이부분은 mapper파일이 있는 경로를 적어주면 된다.

(현재 내용 진행상으로 mapper파일을 만들지 않았으니 그냥 놔두고 나중에 mapper파일을 만들면 수정하겠습니다.!)

 

 

 

이렇게 까지 하면 서버에서 DB에서 접근하기 위해 필요한 설정이 끝났다.

아까전에 SQL파일에서 새롭게 생성한 test_table에 값을 Insert하는 실습을 진행해보자

먼저 DB에 값을 저장할 sql문과 이를 실행할 controller에 코드가 필요하며 controller에 입력값을 보낼 페이지가 필요하다.

 

전체적인 순서는 

View(사용자 입력) >> Controller(사용자 입력 > SQL실행) >> View(결과 출력) 으로 진행된다.

사용자는 Controller에 작업 내용이 보이지 않으니 사용자 입력이 웹페이지에서 일어난것으로 보일것이다.

 

기능을 구현한 순서가 대략적으로 구상 되었으니 앞에서부터 천천히 만들어보자!

 

1. View 사용자 입력 페이지 구현

(webapp > views 폴더에 jsp파일을 생성하고 페이지 구현)

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<!-- 부트스트랩 사용 -->
<meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.4.1/css/bootstrap.min.css">
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.4.1/js/bootstrap.min.js"></script>

<title>사용자 등록</title>
<style type="text/css">
@media ( min-width : 1200px) {
	.container {
		width: 300px;
		margin-top: 300px;
	}
}
</style>
</head>
<body>

	<div class="container">
		<h2>회원 등록</h2>
		<form action="/action_page.php">
			<div class="form-group">
				<label for="email">ID:</label>
				<input type="email" class="form-control" id="email" placeholder="등록할 Email 입력" name="email">
			</div>
			<div class="form-group">
				<label for="pwd">PW:</label>
				<input type="password" class="form-control" id="pwd" placeholder="비밀번호 입력" name="pwd">
			</div>
			<button type="submit" class="btn btn-default">등록</button>
		</form>
	</div>

</body>
</html>

 

2. form태그에 정보를 Controller에서 받아서 이클립스 consol창에 출력 해보자!

 

- Controller에 다음을 추가

	// 페이지 이동
	@RequestMapping(value = "/user_add", method = RequestMethod.GET)
	public String user_add_get(HttpServletRequest request) {
		return "user_add";
	}
	

	// 회원가입 데이터 처리
	@RequestMapping(value = "/post_user_add", method = RequestMethod.POST)
	public String user_add(HttpServletRequest request) {

		String input_id = request.getParameter("input_id");
		String input_pw = request.getParameter("input_pw");

		System.out.println(input_id + "\t\t" + input_pw);

		return "user_add";
	}

 

- user_add.jsp를 생성

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<!-- 부트스트랩 사용 -->
<meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.4.1/css/bootstrap.min.css">
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.4.1/js/bootstrap.min.js"></script>

<title>사용자 등록</title>
<style type="text/css">
@media ( min-width : 1200px) {
	.container {
		width: 300px;
		margin-top: 300px;
	}
}
</style>
</head>
<body>

 	<div class="container">
		<h2>회원 등록</h2>
		<form action="post_user_add" method="post">
			<div class="form-group">
				<label for="email">ID:</label>
				<input type="text" class="form-control" id="email" placeholder="등록할 Email 입력" name="input_id" required="required">
			</div>
			<div class="form-group">
				<label for="pwd">PW:</label>
				<input type="password" class="form-control" id="pwd" placeholder="비밀번호 입력" name="input_pw" required="required">
			</div> 
			<button type="submit" class="btn btn-default">등록</button>
		</form>
	</div>

</body>
</html>

 

- 실행 결과

 

 

여기서 문제가 생겼다!!! 위에 gif영상을 보면 알겠지만 등록을 누르고난 이후 URL이 form태그에 action주소로 변경되어있다. 이는 보기 상당히 불편하다!!! 해서 어떻게든 바꾸고 싶었는데 '네이버'도 비슷한 방식이라 그냥 놔두기로 했다.

 

3. 회원가입을 해보자!

는... 글이 너무 길어서 다음편에 계속!!

 

 

 

 

스마트인재개발원

4차산업혁명시대를 선도하는 빅데이터, 인공지능, 사물인터넷 전문 '0원' 취업연계교육기관

www.smhrd.or.kr