본문으로 건너뛰기
홈
기술
기술 전체
프로그래밍68
컴퓨터 과학63
AI48
웹 개발36
인프라33
데이터31
소프트웨어 공학18
소개
← 목록으로웹 개발 › 백엔드 › Spring

1. Spring프로젝트 생성 후 초기작업 mybatis+mysql 세팅

목차

이 글의 스크린샷과 명령은 2015년 Spring 4.2 / Java 8 / MyBatis-Spring 1.x 환경의 기록이다. 표시된 버전·드라이버 클래스·로그 라이브러리를 현재 프로젝트에 그대로 복사해 실행하는 절차가 아니다. 현재 설정 순서와 검증 기준은 글 맨 아래에 정리했다.

# 사전작업 eclipse에서 Spring Project-> Spring MVC Project 로 프로젝트 생성

1. 프로젝트 우클릭 -> Properties ->JavaCompiler

(1) JDK Compliance에서 Use compliance from execution environment … 체크 해제 후

(2) compiler compliance leve을 1.8로 변경.

왜냐하면 난 JDK 1.8을 사용하고있으니..

  1. 프로젝트 우클릭 -> Properties -> Project Facets

Java 버전을 1.8로 변경

3. pom.xml 에서 java버전을 바꿔줌

이왕이면 스프링 프레임워크 버전도 맞게 변경. 난 4.2.2를 사용하니.

<properties>
	<java-version>1.8</java-version>
	<org.springframework-version>4.2.2.RELEASE</org.springframework-version>
	<org.aspectj-version>1.6.10</org.aspectj-version>
	<org.slf4j-version>1.6.6</org.slf4j-version>
</properties>

  1. Mysql드라이버, Spring-test, Mybatis, Mybatis-spring 네가지 모듈을 설치해야함

어디서? Maven을 이용해서. .Pom.xml에 4가지 라이브러리를 입력해주면 되는데

http://mvnrepository.com/ 에 들어가면서 자신의 버전에 맞는 코드를 긁어오면됨.

pom.xml

		<!-- mybatis-spring -->
		<dependency>
			<groupId>org.mybatis</groupId>
			<artifactId>mybatis-spring</artifactId>
			<version>1.2.3</version>
		</dependency>

		<!-- mybatis -->
		<dependency>
			<groupId>org.mybatis</groupId>
			<artifactId>mybatis</artifactId>
			<version>3.3.0</version>
		</dependency>

		<!-- spring jdbc -->
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-jdbc</artifactId>
			<version>4.2.3.RELEASE</version>
		</dependency>

		<!-- mysql -->
		<dependency>
			<groupId>mysql</groupId>
			<artifactId>mysql-connector-java</artifactId>
			<version>5.1.37</version>
		</dependency>

<!-- spring test-->
<dependency>
	<groupId>org.springframework</groupId>
	<artifactId>spring-test</artifactId>
	<version>4.1.7.RELEASE</version>
</dependency>

그러면 Maven Dependencies에 보면 jar파일이 생겼을 것이다.

<4가지 설정한 것 과 버전 변경된 것 확인>

  • log4jdbc-log4j2를 이용할 경우
pom.xml
	<!-- log4jdbc -->
		<dependency>
			<groupId>org.bgee.log4jdbc-log4j2</groupId>
			<artifactId>log4jdbc-log4j2-jdbc4</artifactId>
			<version>1.16</version>
		</dependency>

를 추가해주면된다.

src/main/resources 폴더에 log4jdbc.log4j2.properties 파일과 logback.xml파일을 추가해주면된다.

파일명 : log4jdbc.log4j2.properties

log4jdbc.spylogdelegator.name=net.sf.log4jdbc.log.slf4j.Slf4jSpyLogDelegator

파일명 logback.xml

<?xml version="1.0" encoding="UTF-8"?>

<configuration>
	<include resource="org/springframework/book/logging/logback/base.xml"/>
	<logger name="jdbc.sqlonly" level="DEBUG"/>
	<logger name="jdbc.audit"	level="INFO"/>
	<logger name="jdbc.resultset" level="ERROR"/>
	<logger name="jdbc.resultsettable" level="ERROR"/>
	<logger name="jdbc.connection" level="INFO"/>
</configuration>
  1. 이제 mybatis 연동을 해주어야함.

그러기위해선 root-context.xml에서 설정해줘야함

경로 : src->main->WEB-INF-> spring -> root-context.xml

먼저 root-context.xml을 클릭하면 하단에 Namespages를 클릭 후

캡처화면처럼 체크해주고 저장

체크 항목 aop, beans, context, jdbc, mybatis-spring

그 다음 Source에 들어감

(1). DataSource 설정

<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
	<property name="driverClassName" value="com.mysql.jdbc.Driver"></property>
	<property name="url" value="jdbc:mysql://localhost:3306/db명"></property>
	<property name="username" value="sql아이디"></property>
<property name="password" value="${DB_PASSWORD}"></property>
</bean>

만약 log4jdbc를 이용하여 할 경우 dirverClassName에서 value 값을 net.sf.log4jdbc.sql.jdbcapi.DriverSpy로 변경하면된다.

<property name="driverClassName" value="net.sf.log4jdbc.sql.jdbcapi.DriverSpy"></property> 

(2). SqlSessionFactory 객체 설정

  • mybatis와 스프링 연동 작업에서 핵심은 Connection을 생성하고 처리하는 SqlSessionFactory는 Sql의 DB연결과 SQL실행의 모든 것 가진 객체임
<bean id="SqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
	<property name="dataSource" ref="dataSource"/>
	<property name="configLocation" value="classpath:mybatis-config.xml"></property>
	<property name="mapperLocations" value="classpath:/mappers/**/*Mapper.xml"></property>
</bean>
  • property name에보면 configLocation과 mapperLocation이 있는데

configLocation은 mybatis-cofing.xml 파일의 경로고

mapperLocation은 mapper의 경로

그러므로 본인이 설정한 경로에 맞게 맞춰주면 될 것이다.

나는 src/main/resources 에 mybatis-config.xml을 넣어줌

mybatis-config.xml 파일

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

	</configuration>

mapper는

src/main/resources/ 에서 mappers 패키지를 만들어서 넣어줌.

이건 알아서.

mappers/ 안에 있는 exMapper.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="네임스페이스">

</mapper>

(3) SqlSessionTemplate 설정

  • DAO에서 DB의 연결의 맺고 작업이 완료된 후 연결을 하는 작업을 SqlSessionTemplate 클래스를 이용하여 처리

SqlSessionTemplate는 mybatis의 SqlSession인터페이스로 구현한 클래스로 기본적인 트랜잭션 관리나 스레드 처리의 안전성보장과 DB연결과 종료를 책임짐

<bean id="sqlSession" class="org.mybatis.spring.SqlSessionTemplate" destroy-method="clearCache">
		<constructor-arg name="sqlSessionFactory" ref="SqlSessionFactory"></constructor-arg>
	</bean>

그럼 다된거.

그리고 테스트를 해보면됨.

현재 프로젝트에서 다시 구성하는 순서

위 설정을 새 프로젝트에 옮길 때는 먼저 Spring Boot 버전과 MyBatis-Spring-Boot-Starter의 호환 범위를 맞춘다. MyBatis 공식 호환표에서는 Starter 4.x가 Spring Boot 4.x와 Java 17 이상, Starter 3.x가 Boot 3.2~3.5를 대상으로 한다. 옛 Maven 조각의 Spring 4.2, MyBatis-Spring 1.2, MySQL Connector/J 5.1을 서로 섞어 업그레이드하면 클래스 로딩 문제와 API 불일치가 발생할 수 있다. 아래는 Boot 4.x / Starter 4.x 계열을 선택했다는 전제의 구성 방향이다. 정확한 패치 버전은 사용할 때 공식 호환표에서 확인한다.

  1. 프로젝트 생성 시 Java 버전, Spring Boot 메이저 버전, MyBatis starter, MySQL Connector/J 의존성을 한 세트로 맞춘다.
  2. 실행 환경에 DB URL, 사용자, 비밀번호를 등록하고 로컬 개발용 데이터베이스를 준비한다.
  3. Spring Boot의 DataSource 설정이 연결 풀을 생성하게 한다.
  4. @Mapper가 붙은 인터페이스를 등록하고 SQL과 결과 매핑을 작성한다.
  5. 저장·조회 통합 테스트로 실제 DB 연결, 파라미터 바인딩, 트랜잭션 롤백을 확인한다.
# application.yml: 비밀값은 실행 환경에서 주입
spring:
  datasource:
    url: ${DB_URL}
    username: ${DB_USER}
    password: ${DB_PASSWORD}

DB_URL은 예를 들어 개발 DB의 JDBC URL을 가리킨다. 환경 변수만 적고 존재 여부를 확인하지 않으면 애플리케이션 시작 때 오류가 난다. 운영 배포에서는 비밀 관리 수단으로 값을 공급한다. DB 연결 값을 Git에 올리지 않는다.

import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;

@Mapper
public interface MemberMapper {
    @Select("SELECT name FROM members WHERE id = #{id}")
    String findName(@Param("id") long id);
}

#{id}는 MyBatis의 파라미터 바인딩이다. 사용자가 입력한 값을 SQL 문자열에 직접 이어 붙이지 않는다. 위 코드는 members(id, name) 테이블이 존재한다는 전제다. 매퍼를 검색하는 패키지와 애플리케이션의 컴포넌트 검색 범위를 확인한다. XML 매퍼를 사용한다면 파일 위치·namespace·statement ID가 인터페이스와 일치해야 한다.

flowchart LR
  A["환경 변수"] --> B["Spring DataSource"]
  B --> C["SqlSessionFactoryBean"]
  C --> D["SqlSessionTemplate"]
  D --> E["MemberMapper"]
  E --> F["서비스"]

Starter는 그림 중 SqlSessionFactoryBean, SqlSessionTemplate, 매퍼 연결을 자동 설정한다. 따라서 옛 글의 XML 빈 정의를 새 Boot 프로젝트에 그대로 중복 등록하지 않는다. 연결 실패면 DataSource 설정과 DB 접근 권한을 보고, 매퍼 빈이 없으면 패키지와 @Mapper를, SQL 실패면 실제 스키마와 매핑을 본다. 로그에 SQL 바인딩 값이 노출될 수 있으므로 상세 SQL 로그는 개발 환경에 한정한다.

참고: MyBatis Spring Boot Starter 공식 가이드, Spring Boot SQL 데이터베이스, MySQL Connector/J 드라이버.

같은 카테고리의 글