2024. 9. 27. 15:22ㆍ내일배움캠프
어제 미리 세팅해둔 '일정 관리 앱(Schedule Management)' 프로젝트에 사용될 'DB(데이터베이스, 스키마)' 와 'Table(테이블)' 을 생성해 보자!
0. ERD
'Lv.1 ~ 3' 에 해당 하는 요구사항을 반영했을 때 필요로하는 DB Table 에 대한 'ERD(Entity Relationship Diagram, 객체 관계도)' 를 아래와 같이 작성해 두었다.
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 목록을 보여준다. 여기에 이제 'schedule_management' 를 생성하려면 아래와 같이 명령어를 입력하면 된다. 'DB(스키마) 이름' 에 생성하고자 하는 DB 명을 적어주면 된다.
create database 'DB(스키마) 이름';
'Query OK(쿼리 정상처리를 나타내는 듯)', '1 row affected(아까의 DB 목록에 1행 이 추가 되었다)' 라는 메시지들이 뜨며 종합적으로 입력한 쿼리가 잘 수행되어 DB 가 생성됬다는 것을 알 수 있다. 그럼 아까 처럼 다시 DB 목록을 확인하면
맨 아래 '9 rows..' 만 봐도 아까 보다 목록의 행의 개수가 1 증가한 걸 볼 수 있으며, Database 목록을 봐도 'schedule_management' 란 이름이 추가된 것을 확인할 수 있다. 물론 해당 내용은 'MySQL Workbench' 를 통해서도 확인이 가능하다.
2. Table 생성
자 이제 생성한 'schedule_management' 에 ERD 에 작성한 'schedule' 테이블을 생성해야 한다.
use '사용할 DB 명'
위의 명령어를 콘솔에 입력하면 'Database changed' 라는 메시지가 출력되는데, 지정한 DB 에 접근했음을 알 수 있다. 만약 나처럼 콘솔 사용에 익숙치 않다면 해당 명령어는 '세미콜론(;)' 을 사용하지 않는다는 점을 주의하자!
Table 또한 DB 와 유사하게 목록을 조회할 수 있다. 'databases → tables' 로만 바꿔 입력하면 현재 DB 에 존재하는 Table 목록을 조회할 수 있다.
show tables;
하지만 현재 '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)
);
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' 테이블을 생성할 수 있었다.
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 간 연결이 되는지 확인해 봤다.
간단하게 말해 DB 가 가진 데이터 소스를 IntelliJ 에서 확인할 수 있게끔 'Data Source and Drivers' 에서 테스트 연결한 것인데 테스트 연결이 '성공' 인 것을 확인할 수 있다. 그리고 해당 연결을 적용하면
이렇게 IntelliJ 내에 있는 'Database' 탭에서 'schedule_management' 스키마(DB)와 'schedule' 테이블을 확인할 수 있다. 추후에 '일정 관리 앱' 의 기본적인 CURD 를 만들고 나면 Spring 과 DB 연결을 제대로 확인해 볼 생각이다.
'내일배움캠프' 카테고리의 다른 글
[내일배움캠프] TIL - 24.09.27(금) (0) | 2024.09.27 |
---|---|
[내일배움캠프] 일정 관리 앱 - DB 연동 및 API 테스트 (0) | 2024.09.27 |
[내일배움캠프] TIL - 24.09.26(목) (0) | 2024.09.26 |
[스탠다드반] 스타크래프트 유닛 - 객체화 & 캡슐화 (0) | 2024.09.25 |
[내일배움캠프] TIL - 24.09.24(화) (0) | 2024.09.24 |