[Spring Boot ] MariaDB를 Spring Boot 프로젝트에 연결하는 방법

lovjgb·2024년 1월 22일

MariaDB를 Spring Boot 프로젝트에 연결하는 방법
MariaDB를 Spring Boot 프로젝트에 연결하기 위해서는 많은 방법이 있겠다.
나는 mac 노트북을 사용중이고, 스프링 부트는 maven를 사용하고 있으므로 이 위주로 설명하겠다. 특히, 실제 데이터를 관리할 때에는 MyBatis를 사용하였으므로 MyBatis 연결 및 사용방법까지 적어둔다.

MyBatis ?

마이바티스(MyBatis) : 마이바티스는 자바(JAVA) 객체와 SQL문 사이의 매핑을 처리하는 역할을 하는 Persistence Framework이다.
이것은 SQL 쿼리를 XML 파일이나 Annotation에 작성하고, 이를 객체로 결과를 반환받거나 파라미터로 전달받을 수 있다.
JDBC를 좀 더 편리하게 사용할 수 있도록 도와주며, 개발자가 SQL을 직접 작성할 수 있어 세밀한 조정이 가능하다.

MariaDB ?

MariaDB : MariaDB는 MySQL의 개발자인 Michael Widenius가 주도한 오픈 소스의 관계형 데이터베이스 관리 시스템(RDBMS)이다.
MySQL이 오라클에 인수되면서 MySQL의 오픈 소스 정신을 계승하고자 만든 프로젝트이다.
MariaDB는 MySQL과 호환되는데, 이는 MySQL의 API와 명령을 그대로 사용할 수 있다는 것을 의미한다.
MariaDB는 MySQL보다 더 많은 스토리지 엔진을 제공하고, 더 빠르고, 더 많은 기능을 제공한다.

따라서, 마이바티스는 SQL 쿼리와 자바 객체 사이의 매핑을 도와주며, MariaDB는 실제 데이터를 저장하고 관리하는 역할을 한다.

MariaDB 사용자, 데이터베이스 생성

  1. MariaDB에 접속하기
    mysql 설치 및 root 계정의 세팅이 완료된 상태이며, MariaDB가 설치된 상태여야 한다.
    터미널 창을 켜서 root 사용자로 접속 한다.
    mysql 설치 및 root 계정 세팅 : https://velog.io/@haleyjun/MySQL-Mac%EC%97%90-MySQL-%EC%84%A4%EC%B9%98%ED%95%98%EA%B8%B0-M1%EC%B9%A9
    MariaDB 설치 : https://mariadb.com/kb/ko/installing-mariadb-on-macos-using-homebrew/

    mysql -u root -p
    -> mysql 의 root 계정을 만들었을 당시에 입력한 패스워드를 입력 한 후 엔터를 치면 접속된다.

    여기서 -u root는 root 사용자로 접속하겠다는 의미이고, -p는 패스워드를 입력하겠다는 의미이다.

  2. 사용자 생성 및 권한 부여
    아래의 SQL 쿼리를 통해 사용자를 생성하고, 권한을 부여할 수 있다.

    CREATE USER 'username'@'localhost' IDENTIFIED BY 'password'; // 사용자 생성
    GRANT ALL PRIVILEGES ON *.* TO 'username'@'localhost'; // 권한 부여
  • 'username''password'는 원하는 사용자 이름과 패스워드로 변경!
  • CREATE USER 'username'@'localhost' IDENTIFIED BY 'password' : 로컬 컴퓨터에서만 접근 가능한 username이라는 사용자 생성, 비밀번호는 password
  • GRANT ALL PRIVILEGES ON . TO 'username'@'localhost'; : username사용자에게 모든 데이터베이스와 테이블에 대한 모든 권한(CREATE, SELECT, INSERT, UPDATE, DELETE, DROP)을 부여
  • 해당 사용자로 로그인하지 않는 이유는 이 사용자 정보를 가지고 스프링 부트 프로젝트에 연결하기 위한 용도이므로, 로그인은 별도로 하지 않는다.
  1. 데이터베이스 생성

    CREATE DATABASE my_database; // 데이터 베이스 생성

    여기서 my_database는 원하는 데이터베이스 이름으로 변경해주면 된다.

  2. 테이블 생성

    USE my_database; // 데이터 베이스 사용 시작 -> 명령어 창 좌측이 'MySQL [my_database]>' 로 바뀐다.
    CREATE TABLE 테이블명 (
    					//...칼럼 정의...  => 테이블 생성
    					); 

    터미널 창에서 테이블을 생성해도 되고, 나중에 생성해도 된다.

Spring Boot 프로젝트에 MariaDB를 연결

  1. 의존성 추가
    먼저, pom.xml에 MariaDB JDBC 드라이버를 추가해야 한다.
    https://mvnrepository.com/artifact/org.mariadb.jdbc/mariadb-java-client 사이트에서 가장 최신 버전을 클릭

    하단의 maven 용 코드를 복사한 후 xml파일에 붙여넣는다.

    아래 코드를 pom.xml파일의 <dependencies>코드 내에 넣어준다.
    		<!-- MariaDB -->
    		<dependency>
    			<groupId>org.mariadb.jdbc</groupId>
    			<artifactId>mariadb-java-client</artifactId>
    			<version>3.3.2</version>
    		</dependency>
  1. application.properties 설정
  • src/main/resources/application.properties 파일인 경우
    spring.datasource.url=jdbc:mariadb://localhost:3306/my_database
    spring.datasource.username=username
    spring.datasource.password=password
    spring.datasource.driver-class-name=org.mariadb.jdbc.Driver
  • src/main/resources/application.yml 파일인 경우
    spring:
    datasource:
      url: jdbc:mariadb://localhost:3306/my_database
      driver-class-name: org.mariadb.jdbc.Driver
      username: root
      password: 1234
    여기서 my_database, username, password는 앞서 MariaDB에서 생성한 데이터베이스 이름, 사용자 이름, 패스워드로 변경해준다.
    url : localhost:3306은 로컬 컴퓨터의 3306 포트에 위치한 MariaDB 서버를 의미한다. port는 3306이 기본이다. 만약 모른다면 MySQL에 접속된 상태에서 터미널에 SHOW VARIABLES LIKE 'port'; 명령어를 통해 확인이 가능하다.
    driver-class-name : MariaDB를 사용하는 경우 org.mariadb.jdbc.Driver
  1. 테이블 생성
    MyBatis를 이용해 SQL 쿼리를 작성하여 테이블을 생성할 수 있습니다. 예를 들어, 아래와 같이 UserMapper.xml 파일을 생성하고 SQL 쿼리를 작성할 수 있다.
<mapper namespace="com.example.demo.mapper.UserMapper">
    <update id="createTable">
        CREATE TABLE Users (
            id INT AUTO_INCREMENT,
            name VARCHAR(100),
            email VARCHAR(100),
            PRIMARY KEY (id)
        );
    </update>
</mapper>

이제 Spring Boot 애플리케이션을 실행하면, MariaDB에 연결되고 지정한 SQL 쿼리가 실행된다.

MyBatis 연결

  1. 의존성 추가
    MariaDB와 동일하게 pom.xml에 의존성을 추가해야 한다.
    https://mvnrepository.com/artifact/org.mybatis.spring.boot/mybatis-spring-boot-starter 사이트에서 가장 최신 버전을 클릭하여 maven용 코드를 복사한 후 xml파일에 붙여 넣는다.
    		<!-- MyBatis -->
    		<dependency>
    			<groupId>org.mybatis.spring.boot</groupId>
    			<artifactId>mybatis-spring-boot-starter</artifactId>
    			<version>2.1.3</version>
    		</dependency>
    mybatis.mapper-locations=classpath:mappers/*.xml
  2. application.properties 설정
  • src/main/resources/application.properties 파일인 경우
    mybatis.mapper-locations=classpath:mybatis/mybatis-config.xml
  • src/main/resources/application.yml 파일인 경우
    spring:
    mybatis:
    	config-location: classpath:mybatis/mybatis-config.xml
  1. Mapper 설정
    만약 @Configuration 를 사용하고 있다면 @MapperScan 사용하는 것이 낫(?)다고 한다.
    @MapperScan("패키지 경로") => ()괄호 안에 적은 경로의 하위 파일들이 모두 @Mapper로 등록되는 것과 같은 효과를 갖는다.
    출처 : https://mybatis.org/spring/ko/mappers.html#mapperscan

@Configuration
@MapperScan("경로.repository.mapper") // () 안에 적은 경로의 하위 파일들이 모두 @Mapper로 등록되는 것과 같은 효과를 갖는다.
public class DatabaseConfiguration {

    @Bean
    public DataSource dataSource() {
        return new EmbeddedDatabaseBuilder()
                .addScript("schema.sql")
                .build();
    }

    @Bean
    public DataSourceTransactionManager transactionManager() {
        return new DataSourceTransactionManager(dataSource());
    }

    @Bean
    public SqlSessionFactory sqlSessionFactory() throws Exception {
        SqlSessionFactoryBean sessionFactory = new SqlSessionFactoryBean();
        sessionFactory.setDataSource(dataSource());
        return sessionFactory.getObject();
    }
}

출처 : https://mybatis.org/spring/apidocs/reference/org/mybatis/spring/annotation/MapperScan.html

https://carrotweb.tistory.com/69

profile
lovjgb

0개의 댓글