매일 한줄 코딩

#4] 스프링부트 DB 연동 하기. 본문

develop/spring

#4] 스프링부트 DB 연동 하기.

ShipJH 2021. 9. 26. 16:51

필자는 mariaDB를 사용하였다.

mybatis로 디비를 스프링부트에 연동할 예정이고

추후에는 ORM(JPA)로 변경할 예정이다.

 

필요한 조건은

1. mariaDB설치 및 DB/테이블 생성

2. mybatis 라이브러리 추가

3. 소스 수정

 

 

먼저. mariaDB를 설치하여보자.

아래의 url을 통하여 mariaDB를 설치한다. 각각에 맞는 OS를 이용하여 설치한다.

https://mariadb.com/downloads/

 

Download MariaDB Products & Tools | MariaDB

Download the latest versions of MariaDB products, connectors and tools including Community Server, Enterprise Server, ColumnStore, MaxScale and Xpand.

mariadb.com

필자의 경우 맥북으로 설치한다.

설치과정은 생략한다. 간단한 편이며 먼저 root 계정으로 실습할 것이니 root의 비밀번호를 설정하고 기억해두길 바란다.

 

설치 이후, 커맨드창을 이용하여

mysql.server start 를 입력해주면 시작된다.

 

 

클라이언트 툴은 workbench를 이용하였다.

 

 

 

그다음. mybatis 설정하려면 라이브러리를 추가하여야한다.

mybatis, java-client, connector-java 등을 검색하여 추가하여준다.

필자는 Gradle로 했고, 빌드툴에 알맞게 라이브러리를 추가해주면 된다.

https://mvnrepository.com

들어가서 설치할 라이브러리명과 버전을 선택하여 디펜턴시를 추가하여준다.

 

 

 

워크벤치를 접속하여, 

테이블을 하나 작성한다.

CREATE TABLE `member` (
  `seq` int(11) NOT NULL AUTO_INCREMENT,
  `id` varchar(50) NOT NULL,
  `name` varchar(50) NOT NULL,
  `role` enum('USER','ADMIN') NOT NULL DEFAULT 'USER',
  `password` varchar(250) NOT NULL,
  `registDatetime` datetime(2) NOT NULL DEFAULT current_timestamp(2),
  `updateDatetime` datetime(2) DEFAULT NULL,
  PRIMARY KEY (`seq`)
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8;

먼저 위처럼 작성하여 테이블을 만들었다.

추후 스프링시큐리티를 적용할 것이므로, role을 설정했고 암호는 단방향암호와를 사용할 것이므로 크기는 넉넉히 주었다.

 

그다음 테스트를 위하여 하나의 데이터만 미리 넣어보겠다.

INSERT INTO `bae`.`member` (`seq`, `id`, `name`) VALUES ('1', 'qocngus', 'qocngus');

seq는 auto_increment 설정해주었으므로 작성하지 않아도 된다. 그 외에도, DEFAULT 가 설정되있는 컬럼이나, null able 인 컬럼은 기입해주지 않아도 된다.

테이블 레이아웃에 맞게 데이터를 넣어준다.

 

 

이제, 스프링부트로 돌아간다.

 

.properties 파일을 위처럼 설정하여준다.

spring.datasource.driver-class-name 은 JDBC 드라이버 클래스를 써준다.

spring.datasource.url 은 mariaDB가 설치된 서버를 적어준다. 로컬에 설치했으므로 로컬로 잡았다. 기본포트는 별도로 설정하지 않는 한 기본 포트인 3306포트를 사용한다. 그 뒤에 /bae 는 데이터 베이스의 명이기 때문에 알맞게 설정해주면 된다.

bae라는 데이터베이스 명칭을 써주면 된다. 위는 워크벤치에서 연결한 디비 정보이다.

여러 데이터 베이스가 있다면, 볼드처리된 데이터베이스 명이 default DB이다. 추후에 소스에 쿼리를 쓸때 default DB는 별도의 명칭을 쓰지 않아도 테이블 조회가 되지만, default 를 설정하지 않았다면,

SELECT *

   FROM bae.USER_TABLE

 

처럼 FROM 절의 bae. 이라는 쿼리를 써주어야 해당 데이터베이스의 데이블을 찾으니 주의하기 바란다.

현재 필자는 하나의 데이터베이스만 사용할 것이므로 /bae 라는 명칭을 properties에 써주었고, default 스키마로 설정하였다. 설정하는 것은 워크벤치에서 데이터베이스->오른쪽마우스 하여 default 항목을 설정하여주면 된다.

 

spring.datasource.name 

 

spring.datasource.password

 부분은 필자의 경우 root 계정의 아이디와 패스워드를 기입하여 주었고,

별도의 계정을 생성했을 경우 그 계정의 아이디와 패스워드를 기입해주면 된다.

 

그다음 컨트롤러를 작성한다.

연결이 되었나 테스트만 해볼 것이므로, 먼저 간단히 작성한다.

 

package com.cc.kr.api.user.controller;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

import com.cc.kr.api.user.service.UserService;

@RestController
public class UserController {

	private UserService userService;

	@Autowired
	public UserController(UserService userService) {
		this.userService = userService;
	}
	
	@GetMapping(value = "user")
	public String getUser() {
		String result = userService.getUser();
		return result;
	}
	
}

의존성 주입은 생성자 주입방식으로 설정하였다.

추후에 설명하도록 한다.

 

컨트롤러에서 user를 호출하면 해당 user의 id컬럼값을 리턴하는 것으로 작성한다.

 

그다음, 서비스로직이다. implements 하여 구성하였다.

package com.cc.kr.api.user.service.impl;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import com.cc.kr.api.user.mapper.UserMapper;
import com.cc.kr.api.user.service.UserService;

@Service
public class UserServiceImpl implements UserService {

	private UserMapper userMapper;
	
	@Autowired
	public UserServiceImpl(UserMapper userMapper) {
		this.userMapper = userMapper;
	}
	
	
	@Override
	public String getUser() {
		String name = userMapper.getUser();
		return name;
	}

}
package com.cc.kr.api.user.service;

public interface UserService {

	String getUser();

}

 

 

그 다음 mapper를 작성하였다.

 

필자의 경우 xml을 사용하지 않고 자바에서 mybatis 를 쓰는 방식으로 하였다.

 

xml로 사용하고자 하는 경우에는 mapper location을 잡아주면 되는데,

 

.properties 파일에

mybatis.mapper-locations=classpath:mapper/**/*.xml
을 작성하여주고, 

resource 아래에 mapper 폴더를 생성하고 그 아래애 xml을 넣어주면되고, xml의 경우 namespace 만 mapper로 잡아주면된다.

 

일단, 필자는 추후에 어차피 JPA로 바꿀 것이므로 JAVA로 쿼리쓰는 것으로 채택하여 개발하였다.

(mybatis에서 지원한다.)

 

아래는 매퍼이다.

package com.cc.kr.api.user.mapper;

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

@Mapper
public interface UserMapper {

	@Select("SELECT id FROM member LIMIT 1")
	String getUser();

	
}

그다음 서버를 실행하여 본다.

 

 

 

실행하니 아까 넣었던 하나의 데이터의 값이 나온다. 

 

이로써 DB와 연동이 끝났다.

 

다음으로는 스웨거를 연동하여 보겠다.

 

Comments