Back-End/Spring
Spring 데이터베이스 연결 테스트
dlgkstjq12
2019. 5. 29. 11:14
Spring 와 데이터베이스 연결
cmd 실행
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 | Microsoft Windows [Version 10.0.17134.765] (c) 2018 Microsoft Corporation. All rights reserved. C:\Users\user>sqlplus //관리자 계정으로 접속함 SQL*Plus: Release 11.2.0.2.0 Production on 화 5월 28 16:09:26 2019 Copyright (c) 1982, 2014, Oracle. All rights reserved. Enter user-name: system //아이디와 비밀번호 입력함 Enter password: Connected to: Oracle Database 11g Express Edition Release 11.2.0.2.0 - 64bit Production SQL> create tablespace spring //테이블 스페이스 생성 : 데이터베이스 오브젝트 내 실제 데이터를 저장하는 공간 2 datafile 'd:/spring.dbf' size 50m //d: 드라이브 루트로만 하기 c: 드라이브 루트는 보안이 걸려있어서 실행이 되지 않는다. 3 autoextend on //50메가씩 용량이 꽉차면 10메가씩 자동증가되서 무제한 증가 4 next 10m 5 maxsize unlimited; Tablespace created. SQL> create user spring identified by 1234 //아이디는 spring로 하고 비밀번호는 1234로 하는 사용자 계정 생성 2 default tablespace spring; //이 사용자가 사용하는 기본 테이블 스페이스는 spring로 설정한다. User created. SQL> grant connect,resource,dba to spring; //이 사용자한테 스프링 테이블스페이스에 대한 접속 권한, 리소스 사용권한, 관리권한을 준다 Grant succeeded. Colored by Color Scripter cs | cs |
Oracle SQL Developer 실행 후 + 버튼을 눌러 아까 만든 스프링이라는 계정을 등록함
2. src/test/java/OracleConnectionTest.java데이터베이스 연결을 테스트하기 위한 테스트 케이스 작성@Test 코드에서 에러가 발생할 경우 Add JUnit 4 library to the build path를 클릭하여 라이브러리를 추가해야함테스트하는 클래스의 이름은 보통 클래스 이름 옆에 Test를 덧붙인다.테스트 케이스 클래스 생성
HomeControllerTest 내부
1234567891011121314151617 package com.example.spring01;import static org.junit.Assert.*;import org.junit.Test;//HomeController를 테스트하기 위한 클래스public class HomeControllerTest {@Test //test 어노테이션이 붙어야 테스트를 할 수 있다.//testHome() 메서드 안에 fail("Not yet implemented"); 가 들어가 있으면 바로 강제로 자동 오류를 발생시키는 코드이다.public void testHome() {//메인메소드가 없지만 JUnit프로그램이 테스트를 자동화하는 툴이라 자동으로 실행시킨다.System.out.println("home test"); //테스트 완료를 확인하기 위해 println을 작성함}}cs
JUnit 테스트가 되지 않을 때 프로젝트 우클릭 -> properties -> java bulid path -> JUnit 라이브러리 추가하고 버전은 4로 하기
spring01 프로젝트 안에 OracleConectionTest.java (오라클 연결 테스트) 파일 생성 및 연결 코드 작성
123456789101112131415161718192021222324252627282930313233343536 package com.example.spring01;import java.sql.Connection;import java.sql.DriverManager;import org.junit.Test;import org.slf4j.Logger;import org.slf4j.LoggerFactory;public class OracleConnectionTest {//로깅 처리를 위한 코드private static final Logger logger =LoggerFactory.getLogger(OracleConnectionTest.class);private static final String DRIVER ="oracle.jdbc.driver.OracleDriver";private static final String URL = "jdbc:oracle:thin:@localhost:1521/xe";private static final String USER = "spring";private static final String PW = "1234";@Test //JUnit가 테스트 하는 코드public void testConnection() throws Exception{Class.forName(DRIVER);//try ~ with 문 (java 버전이 1.7 이상이 되야 에러가 나지 않는다)(finally 절이 필요 없음)//try 옆에 ()안에 커넥션이 들어있기 때문에 con.clotry (Connection conn = DriverManager.getConnection(URL, USER, PW)){System.out.println("오라클에 연결되었습니다.");logger.info("오라클에 연결되었습니다.");} catch (Exception e) {e.printStackTrace();}}}cs
root-context 파일에 들어가서 데이터베이스에 접속할 아이디와 비밀번호를 작성함
root-context.xml 중 일부
12345678910 <bean id="dataSource"class="org.springframework.jdbc.datasource.DriverManagerDataSource"><!-- 드라이버 클래스 이름이 변경됨 --><property name="driverClassName" value="net.sf.log4jdbc.sql.jdbcapi.DriverSpy"></property><!-- 연결문자열에 log4jdbc가 추가됨 --><property name="url"value="jdbc:log4jdbc:oracle:thin:@localhost:1521:xe" /><property name="username" value="spring" /><!--접속 아이디--><property name="password" value="1234" /><!--접속 비밀번호--></bean>cs
src/test/java/MybatisTest.java
자바 코드에 데이터베이스 연결 문자열 등의 중요한 정보를 직접 입력하는 것은 보안상 안전하지 않음.
mybatis 관련 bean
SqlSessionTemplate : SqlSession 객체 생성
SqlSessionFactoryBean : SqlSessionTemplate 객체 생성
DriverManagerDataSource : DB연동 클래스
src/test/java -> com.example.spring01 -> MybatisTest.java 파일 생성하고 아래 코드 작성
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950 package com.example.spring01;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;// JUnit 4.0으로 현재 클래스를 실행시킴@RunWith(SpringJUnit4ClassRunner.class)// mybatis에서 참조하는 설정파일의 위치를 알려줌@ContextConfiguration(locations = {//sql 세션 Factory가 이미 root-context파일 안에 있다."file:src/main/webapp/WEB-INF/spring/root-context.xml" })public class MybatisTest {// 로깅 처리를 위한 코드private static final Logger logger =LoggerFactory.getLogger(MybatisTest.class);//@Autowired@Inject // 의존관계 주입(스프링에서 객체를 생성하여 전달)//객체를 생성하였기 때문에 곧바로 객체를 사용할 수가 있다.private SqlSessionFactory sqlFactory;// JUnit이 테스트하는 코드@Testpublic void testFactory() {// System.out.println("sqlFactory:" + sqlFactory);logger.info("sqlFactory:" + sqlFactory);}@Testpublic void testSession() {// mybatis 실행을 위한 SqlSession 객체 생성try (SqlSession sqlSession = sqlFactory.openSession()) {// System.out.println("sqlSession:" + sqlSession);// System.out.println("mybatis 연결 성공");logger.info("sqlSession:" + sqlSession);logger.info("mybatis 연결 성공");} catch (Exception e) {e.printStackTrace();}}}cs