데이터베이스 세팅하기

연동 작업은 당연하게도 MySQL의 설치가 선행되어야합니다. MySQL의 설치에 대해서는 생략합니다.

root 계정으로 MySQL에 접속한 후 다음과 같은 SQL문을 날립니다.

CREATE DATABASE library;

CREATE TABLE Book (
	id BIGINT AUTO_INCREMENT NOT NULL,
	name VARCHAR(30) NOT NULL,
	author VARCHAR(30) NOT NULL,
	registerDate DATETIME NOT NULL DEFAULT NOW(),
	lent INT NOT NULL,
	expense INT NOT NULL,
	PRIMARY KEY (id)
);

CREATE USER appclient@localhost IDENTIFIED BY '12345678';
GRANT ALL PRIVILEGES ON library.* TO appclient@localhost;

저는 습관적으로 sql의 문법을 대문자로, 변수명은 소문자로 놓고 사용합니다. 이것은 SQL 문법에서 전혀 영향이 없습니다. 이것은 함께 작업하는 팀 끼리 정해놓으면 깔끔하고 좋습니다.

속성명도 대소문자 구분없이 사용해도 되지만, 테이블명과 속성명등의 컨벤션도 정해놓으면 좋습니다. 저는 제목은 파스칼케이스, 속성명은 카멜케이스를 선호합니다. 하지만 데이터베이스에서 속성명을 snake_case 로 하는 경우도 많습니다.

appclient 라는 사용자를 만들었습니다. appclient의 접근허용주소가 localhost로 설정되어있기 때문에, 이는 다음과 같은 상황에서는 제대로 작동하지 않습니다.

  1. DB 서버와 웹애플리케이션 서버가 서로 다른 하드웨어에서 작동될때 MySQL 서버를 기준으로 localhost만 접근 가능하므로 웹애플리케이션 서버는 접근하지 못합니다. 반면 MySQL 서버와 웹애플리케이션 서버가 같은 곳에서 작동하는 경우 접속 가능합니다.
  2. 여러 프로젝트 인원이 appclient라는 사용자만을 이용해서 DB에 접근할 때 각각의 프로젝트 인원은 서로 다른 환경에서 개발하므로 DB에서 접근을 막습니다. 이 경우 localhost 대신 % 를 사용해야 합니다.

데이터베이스 관련 에러 코드 정의

데이터베이스라는 새로운 기능이 추가됨으로써 생길 수 있는 새로운 에러를 ErrorCode에 정의해주겠습니다.

public enum ErrorCode {
	...
		DATABASE_ERROR(6000,"데이터베이스 관련 에러가 발생했습니다."),
    DATABASE_CONNECTION_ERROR(6001,"데이터베이스 연결 에러가 발생했습니다."),
    DATABASE_QUERY_ERROR(6002,"데이터베이스 쿼리 에러가 발생했습니다."),
    DATABASE_RELEASE_FAILURE(6003,"데이터베이스 연결 해제 에러가 발생했습니다."),
	...
}

Connection 생성하는 클래스 만들기

hellspringboot 하위에 database라는 패키지를 만들고 Connection을 생성하는데 필요한 상수들을 정의할 ConnectionConst를 작성합니다.

Untitled

public class ConnectionConstant {
    public static final String DB_URL = "jdbc:mysql://localhost:3306/library?useSSL=false&serverTimezone=UTC&allowPublicKeyRetrieval=true";
    public static final String ID = "appclient";
    public static final String PW = "12345678";
}

DB_URL 은 실제 운영되는 mysql 서버의 엔드포인트가 들어갈 것입니다. 지금은 MySQL과 스프링부트를 같은 환경에서 돌리고 있기 때문에 localhost로 작성해줘도 무방합니다.`