[스프링부트 (4)] 스프링부트 DB 연동 (MariaDB, MyBatis, HikariCP)안녕하세요. 갓대희 입니다. 이번 포스팅은 [ SpringBoot DB 연동] 입니다. : ) Show 0. 들어가기 앞서 Spring Boot를 사용하면서 DB를연결하기 위해 JDBC Connection Pool이란걸 사용 해보셨을 것이다. ▶ 커넥션풀(Connection Pool)이란?1) 정의 - 풀(Pool)속에 데이터베이스와의 연결(커넥션)들을 미리 만들어 두고 데이터베이스에 접근시 풀에 남아있는 커넥션중 하나를 받아와서 사용한뒤 반환하는 기법.
2) 사용이유 - 웹 애플리케이션은 다수의 사용자가 데이터베이스에 접근해야 하는 상황에 사용자들이 요청할때마다 연결을 만들고 해제하는 과정을 진행하게되면 비효율적이다. Spring Boot에 JDBC를 통해 mariadb(mysql) 연결해보자!
1. pom.xml ▶ Dependency 추가<!-- MariaDB --> <dependency> <groupId>org.mariadb.jdbc</groupId> <artifactId>mariadb-java-client</artifactId> <version>3.0.6</version> </dependency> <!-- mysql <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>8.0.22</version> </dependency> --> <dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis-spring-boot-starter</artifactId> <version>2.2.2</version> </dependency>- gradle의 경우 compile 'org.mybatis.spring.boot:mybatis-spring-boot-starter:2.2.2' compile group: 'org.mariadb.jdbc', name: 'mariadb-java-client', version: '3.0.6' // mariadb //compile 'mysql:mysql-connector-java' //mysql2. application.properties ▶ driver 및 연결 정보 설정 추가spring.datasource.driverClassName=org.mariadb.jdbc.Driver spring.datasource.url=jdbc:mariadb://localhost:3306/test?characterEncoding=UTF-8&serverTimezone=UTC spring.datasource.username=스키마계정 spring.datasource.password=비밀번호 #mysql #spring.datasource.driverClassName=com.mysql.cj.jdbc.Driver #spring.datasource.url=jdbc:mysql://localhost:3306/test?characterEncoding=UTF-8&serverTimezone=UTC3. testMapper.xml 생성 ▶ mapper 추가 - 경로 : resources\mybatis\test\testMapper.xml ex) <?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.god.bo.test.mapper.TestMapper"> <select id="selectTest" resultType="com.god.bo.test.vo.TestVo"> SELECT 'GOD' AS NAME </select> </mapper>※ 여기서 간단한 설정을 통해 resultType에 계속 풀패키지를 명시하지 않도록 할 수 있다.
2) mapper.xml 에서 resultType에 클래스명만 명시 <select id="selectTest" resultType="TestVo"> SELECT 'GOD' AS NAME </select>4. Vo 클래스 생성(model, dto, vo) - 경로 : com.god.bo.test.vo.TestVo ex) package com.god.bo.test.vo; public class TestVo { private String id; private String name; public String getId() { return id; } public void setId(String id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } }5. Mapper 인터페이스 생성 - 경로 : com.god.bo.test.mapper.TestMapper ex) 6. Service 클래스 생성 - TestMapper interface를 autowired 하여 메서드를 콜한다. ex) package com.god.bo.test.service; import com.god.bo.test.mapper.TestMapper; import com.god.bo.test.vo.TestVo; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import java.util.List; @Service public class TestService { @Autowired public TestMapper mapper; public List<TestVo> selectTest() { return mapper.selectTest(); } }7. Controller 생성 및 Service 호출 - 위에서 생성한 Service의 메서드를 호출하는 Controller를 생성 하도록 하자. ex) @Autowired TestService testService; @RequestMapping(value = "/test") public ModelAndView test() throws Exception{ ModelAndView mav = new ModelAndView("test"); List<TestVo> testList = testService.selectTest(); mav.addObject("list", testList); return mav; }8. 화면에 맞게 출력하자. ex) <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%> <!DOCTYPE html> <html lang="ko"> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>View Test Page</title> </head> <body> <h2>Hello!</h2> <div>JSP List Test</div> <c:forEach var="item" items="${list}" varStatus="idx"> ${idx.index}st, Hello! ${item.name} <br /> </c:forEach> </body> </html>Application을 실행하여 해당하는 경로의 페이지를 호출하여 보자. 올바르게 데이터 베이스가 연동 되어, 화면에 노출되는것을 볼 수 있다. 여기까지 했다면 Mybatis, MariaDB연동에 성공 하였다. 9. HikariCP 1) Spring Boot 2.0 이전 : Tomcat JDBC Connection Pool를 Default로 사용하였다. 결국 예전 버전에서는 명시하여 사용해야했지만, 이제는 application.properties에 간단한 설정만 한다면 쉽게 사용할 수 있다. ▶ 설정 예시#MariaDB spring.datasource.driverClassName=net.sf.log4jdbc.sql.jdbcapi.DriverSpy spring.datasource.url=jdbc:log4jdbc:mariadb://localhost:3306/test?characterEncoding=UTF-8&serverTimezone=UTC #Hikari spring.datasource.hikari.username=username spring.datasource.hikari.password=password spring.datasource.hikari.maximum-pool-size=10 spring.datasource.hikari.connection-test-query=SELECT 1혹시나 하여 HikariConfig클래스 파일도 확인해 보았다. 여러 프로퍼티를 설정할수 있는 것 같다. ▶ HikariCP 옵션- HikariCP 옵션 (다음 github에서 더 자세히 나와 있다.) 참고 : https://github.com/brettwooldridge/HikariCP - HikariCP설정의 시간 단위는 밀리세컨즈(ms)이다. ◎ autoCommit (default: true) - auto-commit설정 ◎ connectionTimeout (default : 30000(30초)) ◎ validationTimeout (default : 5000(5초)) ◎ maximumPoolSize (default: 10) ◎ idleTimeout (default : 600000(10분)) ◎ minimumIdle (default: same as maximumPoolSize) ◎ maxLifetime (default : 1800000(30분)) ◎ connectionTestQuery (default : 없음) ◎ leakDetectionThreshold |