728x90

오늘은 스프링 부트에서 MyBatis 연결을 하려고 합니다. 

1-2 스프링 부트 MyBatis 연결

1. 스프링 부트 MyBatis 설정

implementation 'org.mybatis.spring.boot:mybatis-spring-boot-starter:2.2.2'
runtimeOnly 'mysql:mysql-connector-java'

build.gradle dependencies에 위의 코드를 추가시켜줍니다. 

# database
spring.datasource.url: jdbc:mysql://host:3306/DatabaseName?characterEncoding=utf8
spring.datasource.username: DatabaseName
spring.datasource.password: password
spring.datasource.driver-class-name: com.mysql.cj.jdbc.Driver

# mybatis
mybatis.config=mybatis-config.xml
mybatis.type-aliases-package: com.example.demo.model
mybatis.mapper-locations: mapper/*.xml

application.properties에 위에 코드를 추가 시켜줍니다. url에는 자신의 포트번호와 데이터베이스 이름을 입력해주고, 유저네임과 패스워드도 자신과 맞게 입력해줍니다. mapper-locations도 mapper. xml이 있는 파일로 설정해주면 끝입니다.


2. DataBase연결 Test

이제 DataBase연결이 잘 되었는지 Test를 해보려고 합니다. Test에 dbTest페키지를 만들고 MyBatisTest class파일을 만들어 줍니다.

package com.skylife_Transformation.dbTest;
import org.junit.jupiter.api.Test;
import java.sql.Connection;
import java.sql.DriverManager;

public class MyBatisTest {
    // MySQL Connector 의 클래스. DB 연결 드라이버 정의
    private static final String DRIVER = "com.mysql.cj.jdbc.Driver";
    // DB 경로
    private static final String URL = "jdbc:mysql://localhost:port/name?serverTimezone=UTC&allowPublicKeyRetrieval=true&useSSL=false";
    private static final String USER = "name";
    private static final String PASSWORD = "password";

    @Test
    public void testConnection() throws Exception {
        // DBMS에게 DB 연결 드라이버의 위치를 알려주기 위한 메소드
        Class.forName(DRIVER);
        try {
            Connection connection = DriverManager.getConnection(URL, USER, PASSWORD);
            System.out.println(connection);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

MyBatisTest파일에 위의 코드를 추가시켜줍니다. DB 커넥션이 제대로 생성되었는지를 출력해 확인해보는 과정입니다.

DB URL에 allowPublicKeyRetrieval은 클라이언트 옵션을 추가 하여 클라이언트가 서버에서 자동으로 공개 키를 요청할 수 있도록 하는 것입니다. default는 false이고 MySQL 8.0 이상은 이를 true로 지정하지 않을 시 public key retrieval is not allowed 에러가 발생할 수 있습니다. 그 뒤에 userSSL은 default는 true이고 false로 지정 시 SSL 사용을 막을 수 있다. 또한 하지만 개발, 혹은 테스트 중에서만 비활성화시키는 걸 추천합니다. 배포 시엔 useSSL를 false로 지정하기보단 SSL을 설정해주면 됩니다.


위의 Test코드를 실행하면 정상적으로 실행되는 것을 확인 할 수 있다. 


참고 블로그

https://doozi0316.tistory.com/entry/Spring-Boot-MyBatis-MySQL-%EC%97%B0%EB%8F%99-%EB%B0%A9%EB%B2%95


오늘의 회고

오늘은 MyBatis연결부터 연결 테스트 까지 진행하였습니다. URL을 입력할 때 allowPublicKeyRetrieval, userSSL은 기존에 사용했었지만 개념과 사용 이유에 대해 몰랐었는데 새롭게 알게 되었습니다. 리펙토링을 진행하다가 빠진 개념 등 다시 정리하면서 가야 될 것 같습니다.

728x90
728x90

개요

skyLife_Transformation 프로젝트로 기존에 스프링으로 진행했던 프로젝트에서 성능반복되는 코드고려하지 않고 그저 기능이 구현되고 돌아가기 위한 코드를 작성했던 프로젝트를 스프링 부트로 바꾸고 성능을 개선하는 프로젝트를 진행하려고 합니다. 천천히 단계별로 개선을 시켜나갈 생각입니다.


1-1 스프링에서 스프링 부트

1. 스프링 부트 프로젝트 만들기

https://start.spring.io/ 에서 스프링 부트를 쉽게 만들 수 있습니다.

저는 Build Tool은 Gradle, 스프링 부트 버전은 2.7.0, Packaging은 Jar, Java 11 버전을 사용할 것입니다.

Dependencies는 Lombok, Spring Web, Spring Security, MyBatis Framework, MySQL Driver, Spring REST Docs를 추가해주었습니다.


2.  스프링 부트 JSP를 위한 수정사항

일단 저는 기존에 진행했던 프로젝트에서 뷰는 수정을 하지 않으려고 합니다.

기존 프로젝트는 jsp로 진행을 해서 스프링 부트에서 jsp를 사용해주려면 설정해줘야 하는 것들이 있습니다.

우선 JSP도 템플릿 엔진이기 때문에 사용하기 위해서는 별도의 라이브러리가 필요합니다.

implementation "org.apache.tomcat.embed:tomcat-embed-jasper"

build.gradle를 파일에 dependencies 부분에 위의 코드를 추가를 해줍니다.

또한 JSP를 사용하기 위해서는 webapp와 WEB-INF 폴더를 포함한 구조로 프로젝트를 변경해야 합니다.

스프링 부트에서 사용하는 뷰 리졸버의 경로를 변경해야 합니다. 뷰 리졸버의 경로는 application.properties에서 변경합니다.

spring.mvc.view.prefix=/WEB-INF/view/
spring.mvc.view.suffix=.jsp

위의 코드를 application.properties에 추가시켜줍니다. Controller 코드까지 작성하면 스프링 부트에서 jsp를 사용할 수 있습니다.

프로젝트의 메인화면입니다. 성공적으로 나오는 것을 확인할 수 있습니다.


3. 인텔리제이와 Github연동

인텔리제이 상단 메뉴에서 VCS를 누르고 Enable Version Control Integration을 클릭하면 밑에 사진과 같은 창이 나옵니다.

위의 창에서 ok를 클릭합니다.

위에서 ok를 클릭하면 상단 메뉴가 Git으로 바뀐 것을 확인하실 수 있습니다. Git 메뉴에서 Manage Remotes를 클릭하면 오른쪽 사진과 같은 창이 나옵니다. 오른쪽 사진에서 Add를 눌어주면 URL을 입력할 수 있는 밑에와 같은 창이 나옵니다.

URL 입력 창에 깃허브에서 레파지토리 주소를 복사해서 붙여 넣어줍니다.

밑에 Commit Message를 적을 수 있는 칸이 있고 Commit Message를 작성한 후 Commit and Push를 클릭해 주시면 깃허브에 잘 올라가는 것을 확인하실 수 있습니다.


오늘의 회고

오늘은 스프링 부트에서 프로젝트 메인화면을 띄우는 것부터 진행하였습니다. 뷰를 만들고 필요 없는 코드와 반복되는 코드들을 수정하고 프로젝트 설계부터 효율적인 방법을 고려해 진행할 예정입니다.

728x90

+ Recent posts