2020. 8. 9. 10:42ㆍ勉強 공부/Spring framwork
_____________________
따라하더라도 나만의 것을 만드는 것
1-3
DB(DataBase)를 연동해주자
DB 셋팅 및 접속 테스트
Part.1
_____________________
DB연결에 프로젝트의 환경을 살짝 수정 해줍시다~
웹 시스템은 가장 먼저 web.xml을 참조하여
스프링의 설정과 관련된 파일들의 위치를 파악하고
그 파일들을 참조 합니다.
현재 web.xml을 보면
src~~~~~spring 폴더에
root-context.xml
servlet-context.xml
등 두개의 파일이 있습니다.
실무에서는 규모가 큰 프로젝트를 할 수도 있기 때문에
관리하기 쉽도록 위치를 바꿔줍니다.
1. 위에 src/main/resources 에 「 servlet-context.xml 」 을 옮긴후
2. spring 디렉토리를 생성해서 「 root-context.xml 」 을 옮깁니다.
이후
두 파일을 옮겼으므로
web.xml 파일도 수정을 해줘야 합니다.
web.xml
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:spring/*-context.xml</param-value>
</context-param>
<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:servlet-context.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
root-context.xml 같은 경우는 이름을 *-context.xml로 수정하였습니다.
추후에 추가할 설정 파일을 000-context.xml 등과 같이 만들어 저장하면
스프링에서 자동으로 뒷글자 -context.xml를 인식할 수 있습니다.
이후에 추가될 데이터베이스 관련 설정 파일도
dataSource-context.xml 를 만들어 저장할 예정입니다.
__________________________________________
이제 데이터베이스와 사용자를 추가 해줍시다.
저같은 경우 MariaDB 를 사용했습니다.
터미널 에서
brew list
엔터
mariadb 를 언젠가 설치해서 이미 있다던가?
mySQL 이 있다면?
혹은 다른 DB가 있다면
설치중 출돌이 생겨서 설치되지 않아요.
아무런 DB 가 없다면
이제부터 잘 따라오시죠
Terminal
brew update
엔터
brew search mariadb
엔터
brew install mariadb
엔터 & 설치
mariadb -u roou -p
passworld 문구 나오면 그냥 엔터
mariadb 에 접속 됩니다.
저는~ 혼자 시작한 초보자 입니다.
출처: https://freehoon.tistory.com/101 [훈잇 블로그]
참고해서 따라하는 중입니다.
『훈잇』 님 감사해요~
데이터베이스 및 사용자 추가
이제 블로그를의 데이터를 저장할 데이터베이스와 사용자를 추가 할 차례 입니다.
Terminal
MariaDB[mysql]> CREATE DATABASE 'MESS';
MariaDB[mysql]> CREATE USER 'mess'@'%' IDENTIFIED BY 'mess';
MariaDB[mysql]> grant all privileges on MESS.* TO 'mess'@'localhost' with grant option;
MariaDB[mysql]> FLUSH PRIVILEGES;
MESS 라고 하는 DB 생성
mess 라고하는 user 생성
MESS 라고하는 DB의 내부 테이블 (MESS.*)에 대해
mess라는 비밀번호「 IDENTIFIED BY 'mess'; 」 로 접근 가능하게 설정
두번째, 세번째에서 설정한 내용을 반영하는 명령어 입니다.
데이터베이스와 사용자를 만들었다면
이제 스프링에 데이터베이스 접속과 mtbatis 관련 셋팅을 할 차례 입니다.
Depnedency 추가
pom.xml 의
<dependencies> ~~~~~~~~~~ </dependencies>
사이에 아래의 문구를 추가합니다.
pom.xml
<!-- DB 사용을 위해 추가해주는 문구 -->
<!-- Maria DB -->
<dependency>
<groupId>org.mariadb.jdbc</groupId>
<artifactId>mariadb-java-client</artifactId>
<version>2.0.3</version>
</dependency>
<!-- mybatis -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.4.6</version>
</dependency>
<!-- mybatis-spring -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis-spring</artifactId>
<version>1.3.2</version>
</dependency>
<!-- spring-jdbc -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>${org.springframework-version}</version>
</dependency>
<!-- DBCP 데이터베이스 풀 커넥션 -->
<dependency>
<groupId>commons-dbcp</groupId>
<artifactId>commons-dbcp</artifactId>
<version>1.4</version>
</dependency>
<!-- spring-test -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-test</artifactId>
<version>${org.springframework-version}</version>
<scope>test</scope>
</dependency>
테스트 해보기 위해서
junit 의 버전을 4.12로 수정합니다. 위치는
pom.xml 에
추가했던 내용중 <dependency> 목록중 하단에 에 있어요.
저는 혹시몰라
아래 내용 처럼 주석처리 했습니다.
테스트가 끝나고 복구해둬야 하니깐요.
pom.xml
<!-- Test -->
<!-- <dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.7</version>
<scope>test</scope>
</dependency> -->
<!-- Test -->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
</dependency>
작동 테스트하기위해서
pom.xml 에 기본설정되어있는 자바나 스프링의 버전도 수정을 합니다.
위치는 pom.xml 상단
<properties> ~~~~~~~~ </properties>
에 있습니다.
pom.xml
<!--<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> -->
<!-- 테스트를 위해서 수정 -->
<properties>
<java-version>1.8</java-version>
<org.springframework-version>5.1.4.RELEASE</org.springframework-version>
<org.aspectj-version>1.9.2</org.aspectj-version>
<org.slf4j-version>1.7.25</org.slf4j-version>
</properties>
JDK 버전을 변경 했으니까
「 Maven - update project 」 를 해줘야 합니다.
이 두개의 Properties 에서 java 버전을 바꿔줍니다.
이제
데이터베이스 설정 파일을 추가 해줘야 합니다.
dataSource-context.xml
파일을 생성해주고
아래 내용을 입력해줍니다.
dataSource-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: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 http://www.springframework.org/schema/beans/spring-beans.xsd">
<!-- dataSource 객체 설정 -->
<!-- 데이터베이스의 접속 정보를 설정합니다. -->
<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName" value="com.mariadb.cj.jdbc.Driver" />
<property name="url" value="jdbc:mariadb://127.0.0.1:3306/mess?useSSL=false&serverTimezone=Asia/Seoul" />
<property name="username" value="mess"></property>
<property name="password" value="mess"></property>
</bean>
<!-- SqlSessionFactory 객체 설정 -->
<!-- 이 문구는 mybatis 와 관련되어 있는 정보입니다. -->
<bean id="SqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="dataSource" />
<property name="mapperLocations" value="classpath:/mappers/**/*Mapper.xml" />
</bean>
<!-- SqlSession Template 설정 -->
<!-- 이 문구는 mybatis 와 관련되어 있는 정보입니다. -->
<bean id="sqlSession" class="org.mybatis.spring.SqlSessionTemplate" destroy-method="clearCache">
<constructor-arg name="sqlSessionFactory" ref="SqlSessionFactory" />
</bean>
</beans>
<!--dataSource 객체 설정 -->
데이터베이스의 접속 정보를 설정합니다.
useSSL=false&
mybatis에서 옵션설정을 하라는 오류가 생기는것을 방지하기위해 SSL 을 사용하지 않게 지정serverTimezone=Asia/Seoul"서버타임존의 위치가 맞지않아 생기는 오류를 방지하기위해 서버의 타임존을 서울로 지정
<!-- SqlSessionFactory 객체 설정 -->
<!-- SqlSession Template 설정 -->
이 문구는 mybatis 와 관련되어 있는 정보입니다.
SqlSessionFactory 안에 있는 mapperLocations 는 데이터베이스에서 실행 할 SQL 쿼리문이 있는 위치 입니다.
'classpath:' 가 /src/main/resources/ 입니다.
따라서 위와 같이 되어 있으면 /src/main/resources/main 아래 모든 하위 디렉토리를 포함하여
Mapper.xml로 끝나는 모든 파일을 참조 한다는 뜻입니다.
우선 여기에 게시판 제작을 위한 'boardMapper.xml'을 만들어 두도록 합니다.
boardMapper.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org/DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.freehoon.web.board.boardMapper">
</mapper>
__________________________________________
데이터베이스 접속 테스트
아래 그림과 같이
/src/test/java
안에
「 com.project.200801.web 」
이름의 패키지를 생성합니다
그 안에
class 생성으로
「 MysqlConnectionTest.java 」
파일을 생성합니다.
MysqlConnectionTest.java
package com.project200801.web;
import java.sql.Connection;
import javax.inject.Inject;
import javax.sql.DataSource;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = { "classpath:spring/dataSource-context.xml" })
public class MysqlConnectionTest {
private static final Logger logger = LoggerFactory.getLogger(MysqlConnectionTest.class);
@Inject
private DataSource ds;
@Test
public void testConnection() {
try (Connection con = ds.getConnection()){
logger.info("\n MySQL 연결 : " + con);
} catch (Exception e) {
e.printStackTrace();
}
}
}
이제 잘 작동하는지 테스트 해 봅시다.
서버를 작동 시킨 후
작성한 소스 안에서 우클릭 후 Run As 해주세요.
아........................
Access denied for user 'mess'@'localhost'
3일간 고생했습니다.
참고하는 블로그 글은 mysql 인데 제 취향껏 mariaDB 사용 한다고
억지 부려서 오류가 나나?
저도 mysql 로 바꿔도 보고
계정 권한도 모든권한 줘보고
하다가 잠잘시간되고...
3일간 헛수고 뺑뺑이 다 해보다가
겨우겨우 답을 찾았어요.ㅠㅠㅠㅠㅠㅠㅠ
CREATE USER 'mess'@'%';
만 만들면
Access denied for user 'mess'@'localhost'
오류가 납니다.
다른분들은 잘 되나본데...... 저만안되는 이유를 아직 몰라요.
아시는분 있다면 알려주시면 감사합니다.
CREATE USER 'mess'@'localhost';
이렇게도 만들어줘야 오류가 안나고 정상작동 하더군요.
너무너무 길고긴 싸움이었습니다.
어떤글을 보니 모든접속권한을 줘도 localhost 로 안들어가질 경우가 있다고 하는데
정확한 원인 이유를 모르겠어요.
ㅎㅎㅎㅎ
콘솔에서 이렇게 정상적으로 나와야합니다 ㅠㅠㅠ
같은곳에 MybatisTest.java 클래스를 생성 해줍니다.
그리고 아래 문구 입력 해주세요.
MybatisTest.java
package com.project200801.web;
import javax.inject.Inject;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = { "classpath:spring/dataSource-context.xml" })
public class MybatisTest {
private static final Logger logger = LoggerFactory.getLogger(MybatisTest.class);
@Inject
private SqlSessionFactory sessionFactory;
@Test
public void testSessionFactory() {
logger.info("\n Session Factory : " + sessionFactory);
}
@Test
public void testSqlSession() {
try (SqlSession session = sessionFactory.openSession()) {
logger.info("\n Sql Session : " + session);
} catch (Exception e) {
e.printStackTrace();
}
}
}
다행이 이것도 정상작동 하는군요 ㅠㅠㅠㅠ
정말 너무 고생 많았습니다.
선생님 없이 오류를 직접찾아 고치려고 하니 ... 너무너무 힘들어요.
선생님이 있는분들은 꼭 선생님한테 질문하세요. ㅋㅋㅋㅋ
다음에는 또 DB셋팅 part.2 에요
'勉強 공부 > Spring framwork' 카테고리의 다른 글
1-2. 스프링 웹프로젝트 - 처음 느끼는 뿌듯함 Hello world (0) | 2020.08.05 |
---|---|
1-1. 스프링 웹프로젝트를 시작합시다. (0) | 2020.08.01 |