본문 바로가기
TOY PROJECT/Music Archive V1.0(Spring)

[Spring/Aquerytool] 게시판 만들기 팁 & DB 설계

by LAY CODER 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설계를 해보았다.

 

 

 

확실히 다른 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;

 

 

댓글