[내일배움캠프] 일정 관리 앱 - DB 세팅

2024. 9. 27. 15:22내일배움캠프

 어제 미리 세팅해둔 '일정 관리 앱(Schedule Management)' 프로젝트에 사용될 'DB(데이터베이스, 스키마)' 와 'Table(테이블)' 을 생성해 보자!

 

0. ERD

 'Lv.1 ~ 3' 에 해당 하는 요구사항을 반영했을 때 필요로하는 DB Table 에 대한 'ERD(Entity Relationship Diagram, 객체 관계도)' 를 아래와 같이 작성해 두었다.

ERD - 필수 기능

 

 

1. DB(= schema) 생성

 평소에는 'MySQL Workbench' 를 통해서 DB(schema) 만을 생성해두고 Spring Data JPA 를 통해 Entity 에 해당하는 테이블을 생성했었다. 하지만 이번 과제는 'JDBC' 를 사용해야 하기에 DB 연결전에 DB 와 Table 을 모두 미리 생성해두기로 하였고, 더불어 'MySQL Workbench' 가 아닌 'MySQL Command line Client' 를 통해 생성해보려 한다. 한 마디로 과제를 코드로 시작해 코드로 끝내볼 생각이다.

 

우선 Table 을 생성할 DB 를 생성해야 한다. DB 이름은 일단 과제가 '일정 관리 앱' 이므로 'schedule_management' 로 생성할 생각이다. 그럼 MySQL 에 생성된 DB 목록을 확인해보자.

show databases;

현재 DB 목록

 

위 명령어를 콘솔 창에 입력하면 현재 생성되어있는 DB 목록을 보여준다. 여기에 이제 'schedule_management' 를 생성하려면 아래와 같이 명령어를 입력하면 된다. 'DB(스키마) 이름' 에 생성하고자 하는 DB 명을 적어주면 된다.

create database 'DB(스키마) 이름';

schedule_management DB 생성 완료

 

'Query OK(쿼리 정상처리를 나타내는 듯)', '1 row affected(아까의 DB 목록에 1행 이 추가 되었다)' 라는 메시지들이 뜨며 종합적으로 입력한 쿼리가 잘 수행되어 DB 가 생성됬다는 것을 알 수 있다. 그럼 아까 처럼 다시 DB 목록을 확인하면

추가된 schedule_management

 

맨 아래 '9 rows..' 만 봐도 아까 보다 목록의 행의 개수가 1 증가한 걸 볼 수 있으며, Database 목록을 봐도 'schedule_management' 란 이름이 추가된 것을 확인할 수 있다. 물론 해당 내용은 'MySQL Workbench' 를 통해서도 확인이 가능하다.

 

 

2. Table 생성

 자 이제 생성한 'schedule_management' 에 ERD 에 작성한 'schedule' 테이블을 생성해야 한다.

use '사용할 DB 명'

schedule_management 사용

 

위의 명령어를 콘솔에 입력하면 'Database changed' 라는 메시지가 출력되는데, 지정한 DB 에 접근했음을 알 수 있다. 만약 나처럼 콘솔 사용에 익숙치 않다면 해당 명령어는 '세미콜론(;)' 을 사용하지 않는다는 점을 주의하자!

 

Table 또한 DB 와 유사하게 목록을 조회할 수 있다. 'databases → tables' 로만 바꿔 입력하면 현재 DB 에 존재하는 Table 목록을 조회할 수 있다.

show tables;

비어있는 DB

 

하지만 현재 'schedule_management' 테이블은 초기 상태이므로 생성된 Table 이 없어 위 처럼 'Empty set' 이란 메시지가 출력되었다. 말 그대로 현재 '텅 빈' 상태를 의미한다. 그럼 ERD 에 작성한 'schedule' Table 을 생성해보자.

create table '테이블명' (
    id int not null auto_increment,
    body varchar(150) not null,
    author varchar(20) not null,
    password varchar(6) not null,
    create_at datetime not null,
    update_at datetime not null,
    primary key (id)
);

schedule 테이블 생성

 

Table 생성 구문의 첫 부분은 DB 생성과 유사하다. 'create table 테이블명' 으로 생성이 가능하며 동시에 Table 이 갖는 Column(속성)도 함께 선언해 생성이 가능하다. ERD 와는 조금 다르게 Column 의 타입을 설정해 생성했는데 생성하면서 ERD 에 적힌 타입보다는 위의 타입이 더 적절하다 판단해 위와 같이 Column 의 타입을 설정하게 되었다.

 

모든 Column 은 'Null' 을 허용하지 않도록 'NOT NULL' 옵션을 적용했고, 해당 테이블의 기본 키(primary key, 고유)인 'id' Column 은 레코드(행)가 추가될 때마다 자동으로 값이 증가하도록 'AUTO_INCREMENT' 옵션을 적용했다. 또한 마지막에 'primary key (id)' 를 통해 'id' 컬럼을 기본 키로 등록해 ERD 와 좀 다르나 기존에 생각해둔 'schedule' 테이블을 생성할 수 있었다.

schedule 테이블 생성 확인

 

 

3. Spring - DB 연동

 자 그럼 이제 '일정 관리 앱' 에서 사용될 DB(Schema) 및 Table 을 생성했으니 Spring 과 생성한 DB 를 연동(연결) 해보자.

spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/schedule_management
spring.datasource.username='계정이름'
spring.datasource.password='비밀번호'

 

일단 'main/resource/application.properties' 문서를 위와 같이 '임시' 로 작성해 주었다. 하지만 현재 DB 의 데이터를 저장하거나 조회하는 구현이 전~혀 되어있지 않기 때문에 Spring 과 DB 간의 연결에 대한 정확한 확인이 불가능하다(이러한 점 때문에 나중에 DB 를 생성할까 고민했다). 그래서! 임시로 아래와 같이 '테스트 연결' 을 통해 'IntelliJ' 와 DB 간 연결이 되는지 확인해 봤다.

IntelliJ 와 DB 테스트 연결 성공

 

간단하게 말해 DB 가 가진 데이터 소스를 IntelliJ 에서 확인할 수 있게끔 'Data Source and Drivers' 에서 테스트 연결한 것인데 테스트 연결이 '성공' 인 것을 확인할 수 있다. 그리고 해당 연결을 적용하면

IntelliJ 'Database' 탭 화면

 

이렇게 IntelliJ 내에 있는 'Database' 탭에서 'schedule_management' 스키마(DB)와 'schedule' 테이블을 확인할 수 있다. 추후에 '일정 관리 앱' 의 기본적인 CURD 를 만들고 나면 Spring 과 DB 연결을 제대로 확인해 볼 생각이다.