게시판 DB 테이블 - gesipan DB teibeul

안녕하세요. 금일부터 게시판을 만들어 보겠습니다.

spring + mybatis + mariadb로 게시판 실습을 해보겠습니다.

mariadb는 mysql과 문법이 거의 유사하다고 생각하시면 되고요. 저는 MariaDB 10.3.11 윈도우 버젼을 설치하였습니다.

다운로드 경로는 https://downloads.mariadb.org/ 로 가셔서 받으시면 됩니다.

MariaDB를 설치하면 HeidiSQL이라는 접속 클라이언트 프로그램이 깔리는데, tode나 debeaver 프로그램이라고 보시면 됩니다.

HeidiSQL을 실행하시면 아래와 같은 화면을 보실 수 있는데, 저는 로컬에 MariaDB를 설치하였으므로 호스트명은 127.0.0.1이 되고,

자신에 맞는 아이디와 암호를 입력하시고, 기본적으로 MariaDB를 설치하실때 Default 포트는 3306입니다.

게시판 DB 테이블 - gesipan DB teibeul

접속하시면 아래와 같은 화면을 보실 수 있습니다. 툴의 사용법은 따로 설명하지 않겠습니다.

DB 클라이언트 툴을 사용해보신 분이라면 어렵지 않게 사용하실 수 있을거라고 생각되어 집니다. ^^;

그럼 게시판 실습을 하기 위해서 먼저 데이터 베이스를 만들어 보겠습니다.

쿼리로 데이터 베이스를 만드는 DDL문을 작성할 수도 있겠지만, 그냥 툴에서 쉽게 만들어보도록 하겠습니다.

좌측 판넬에서 마우스 우클릭을 하시면 팝업이 뜨는데 거기서 새로생성 -> 데이터베이스를 선택하시여 데이터 베이스를 만드시면 됩니다.

저는 board_db로 데이터베이스를 생성하였습니다.

이제 테이블을 생성하겠습니다. 아래의 DDL문을 쿼리에서 실행을 합니다.

CREATE TABLE `BOARD_TABLE` (

`IDX` INT(11) AUTO_INCREMENT,

`UPPER_IDX` INT(11),

`TITLE` VARCHAR(100) NOT NULL,

`CONTENTS` VARCHAR(4000) NOT NULL,

`CLICK_CNT` DECIMAL(10,0) NOT NULL,

`DELYN` VARCHAR(1) NOT NULL DEFAULT 'N',

`CREATE_DATE` DATE NOT NULL,

`CREATE_ID` VARCHAR(30) NOT NULL,

PRIMARY KEY (`IDX`)

);

IDX는 자동으로 늘어나고 게시글의 인덱스이고, UPPER_IDX은 계층형 게시판을 위한 부모글의 인덱스입니다.

TITLE은 글제목, COMMENTS는 글내용, CLICK_CNT는 조회수, DELYN은 삭제여부, CREATE_DATE는 게시일시, CREATE_ID는 게시자를 나타내주는 컬럼입니다.

아래와 같이 생성되었음을 확인할 수 있습니다.

이시간에는 MariaDB에서 데이터 베이스를 생성하고 테이블을 생성하는 방법에 대해서 알아보았습니다.

다음 시간에는 이클립스에서 실질적인 코딩을 하면서 계속해서 진행해보도록 하겠습니다.

TOY PROJECT/Music Archive V1.0(Spring)

2020. 10. 1.

SpringFrameWork 게시판 만들기 팁

1. 회원가입과 로그인은 마지막에 구성해라.

(기간이 촉박하니 가장 중요한 사이트에 대한 걸 먼저 만들고 괜히 회원가입과 로그인에 시간을 뺏기지 말아라.)

2. 이메일주소로 계정찾기/ 질문 답변으로 패스워드 찾기 방식의 오류 언급

  • 요새 아이디 같은 경우 이메일주소로 많이 사용. 그렇기에 이메일 주소로 아이디를 찾는 경우는 의미가 없다.
  • 패스워드를 알려주는 것 자체가 보안실패. 보통 임시비밀번호를 발급하지 비밀번호를 알려주지 않는다.
  • 그렇기에 회원가입에서 id와 email을 다 입력하게 하지 말고 email을 id로 사용하게 유도하라.

3. ERD 모델을 설계 할때 Aquerytool을 이용해보아라.(직관적이고 간편하다.)

4. DB에 긴 내용을 넣을 경우, VARCHAR 말고 TEXT를 이용하여라.

5. 게시판 table을 구성할 때, 등록날짜 외에도 수정날짜와 삭제날짜도 만들어 게시글 복구가능성에 대해서도 생각.

게시글을 삭제 하였을 때, 삭제날짜가 null이 아닌경우만 보여주면 삭제 된 게시글을 제외하고 보여줄 수 있다.

프로시저를 이용하여 삭제 된지 몇일이 지나면 DB에서도 삭제하게 만들어라.

6. Aws ec2 free tier를 이용하여 실제 서버를 구축하는 경험을 해보아라.

7. git add . 쓰지말고 정확히 너가 올리고 싶은 파일들을 올리고 commit 할 때도 너가 어떤 것들을 commit했는지 자세하게 써라.

Aquerytool 이용법을 구글에서 간단히 찾아 다음과 같이 ERD설계를 해보았다.

게시판 DB 테이블 - gesipan DB teibeul

확실히 다른 ERD 설계 툴 보다 간편하고 직관적이다는 느낌을 받았다.

또, 모든테이블 생성 SQL이라는 버튼을 통해,

다음과 같이 자동으로 SQL구문을 완성시켜주는 걸 확인할 수 있었다.


DB 구성

-- board Table Create SQL
CREATE TABLE board
(
    `board_id`    INT              NOT NULL    AUTO_INCREMENT COMMENT '게시글ID', 
    `writer`      VARCHAR(50)      NOT NULL    COMMENT '작성자', 
    `title`       VARCHAR(50)      NOT NULL    COMMENT '제목', 
    `content`     VARCHAR(1000)    NOT NULL    COMMENT '내용', 
    `regdate`     DATETIME         NOT NULL    COMMENT '등록일자', 
    `updatedate`  DATETIME         NULL        COMMENT '수정일자', 
    `deletedate`  DATETIME         NULL        COMMENT '삭제일자', 
    PRIMARY KEY (board_id)
);

ALTER TABLE board COMMENT 'community(자유게시판) 게시글을 위한 테이블';


-- board Table Create SQL
CREATE TABLE album
(
    `album_id`      INT             NOT NULL    COMMENT '앨범ID', 
    `artwork_file`  VARCHAR(100)    NOT NULL    COMMENT '앨범사진파일이름', 
    `title`         VARCHAR(100)    NOT NULL    COMMENT '앨범제목', 
    `release`       DATETIME        NOT NULL    COMMENT '발매날짜', 
    PRIMARY KEY (album_id)
);

ALTER TABLE album COMMENT '발매앨범에 관한 테이블';


-- board Table Create SQL
CREATE TABLE reply
(
    `board_id`  INT              NOT NULL    COMMENT '게시글ID', 
    `reply_id`  INT              NOT NULL    AUTO_INCREMENT COMMENT '댓글ID', 
    `writer`    VARCHAR(50)      NOT NULL    COMMENT '작성자', 
    `content`   VARCHAR(1000)    NOT NULL    COMMENT '내용', 
    `regdate`   DATETIME         NOT NULL    COMMENT '등록일자', 
    PRIMARY KEY (reply_id)
);

ALTER TABLE reply COMMENT '게시글에 대한 댓글 테이블';

ALTER TABLE reply
    ADD CONSTRAINT FK_reply_board_id_board_board_id FOREIGN KEY (board_id)
        REFERENCES board (board_id) ON DELETE RESTRICT ON UPDATE RESTRICT;


-- board Table Create SQL
CREATE TABLE file
(
    `file_id`   INT             NOT NULL    AUTO_INCREMENT COMMENT '파일ID', 
    `board_id`  INT             NOT NULL    COMMENT '게시글ID', 
    `filename`  VARCHAR(100)    NULL        COMMENT '파일이름', 
    `regdate`   DATETIME        NOT NULL    COMMENT '등록일자', 
    PRIMARY KEY (file_id)
);

ALTER TABLE file COMMENT '여러 개 파일 등록을 위한 테이블';

ALTER TABLE file
    ADD CONSTRAINT FK_file_board_id_board_board_id FOREIGN KEY (board_id)
        REFERENCES board (board_id) ON DELETE RESTRICT ON UPDATE RESTRICT;


-- board Table Create SQL
CREATE TABLE song
(
    `album_id`   INT             NOT NULL    COMMENT '앨범ID', 
    `track_no`   INT             NOT NULL    COMMENT '트랙번호', 
    `title`      VARCHAR(100)    NOT NULL    COMMENT '트랙제목', 
    `song_file`  VARCHAR(100)    NULL        COMMENT '노래파일 이름', 
    `lyric`      TEXT            NOT NULL    COMMENT '가사'
);

ALTER TABLE song COMMENT '앨범 수록곡에 관한 테이블';

ALTER TABLE song
    ADD CONSTRAINT FK_song_album_id_album_album_id FOREIGN KEY (album_id)
        REFERENCES album (album_id) ON DELETE RESTRICT ON UPDATE RESTRICT;


-- board Table Create SQL
CREATE TABLE member
(
    `id`              VARCHAR(50)     NOT NULL    COMMENT '아이디', 
    `pw`              VARCHAR(100)    NOT NULL    COMMENT '비밀번호', 
    `zipcode`         VARCHAR(10)     NULL        COMMENT '우편번호', 
    `address`         VARCHAR(100)    NULL        COMMENT '주소', 
    `address_detail`  VARCHAR(100)    NULL        COMMENT '상세주소', 
    `picture`         VARCHAR(100)    NULL        COMMENT '사진파일이름', 
    `regdate`         DATETIME        NOT NULL    COMMENT '가입일자', 
    PRIMARY KEY (id)
);

ALTER TABLE member COMMENT '회원에 관한 테이블';

ALTER TABLE member
    ADD CONSTRAINT FK_member_id_board_writer FOREIGN KEY (id)
        REFERENCES board (writer) ON DELETE RESTRICT ON UPDATE RESTRICT;