기존 게시판에 파일 관련 기능을 넣어서 자료실 형태로 만들어 보자.

자료실을 만들기 위해서는 기존 기능에 다음과 같이 파일 관련 기능을 넣어주면 된다.

  • 사용자가 글을 쓰면서 파일을 첨부하기 때문에, 글쓰기에 파일 태그(input type=file)를 추가해 주어야 한다.
  • 글 저장 컨트롤에서는 전송된 파일을 받아서 지정된 디렉터리에 저장하고 그 파일 이름을 게시물과 같이 데이터 베이스에 저장한다.
  • 글 수정은 글 쓰기와 같지만 첨부한 파일을 삭제할 수 있는 방법이 있어야 한다.
  • 게시판 리스트에서는 첨부 파일이 있는 경우 이미지 등의 방법으로 파일이 있다는 것을 보여 준다.
  • 글 읽기에서는 첨부된 파일 리스트를 보여주고 파일명을 클릭하면 다운로드 받을 수 있게 한다.
  • 글 삭제는 게시 글이 삭제 될 때 첨부 파일도 같이 삭제한다.

파일을 서버에 저장할 때 고려해야 할 사항이 몇 가지 있다.

먼저, 첨부한 파일을 서버에 어떻게 저장할 것인가 하는 문제이다. 

사용자가 첨부한 파일은 “xxx.jpg” 등과 같은 이름을 가지게 되는데

간혹 서버에서 실행 가능한 “xxx.jsp”, “xxx.js” 등으로 지정하여 많은 문제(해킹 등)를 발생시킬 수 있다.

따라서 저장할 때는 별도의 이름으로 저장해야 된다.

사용자가 명명한 파일명과 서버에 저장될 때의 파일명이 필요하다는 의미이다.

두 번째는 지정된 게시물과 첨부한 파일명이 같이 저장해야 된다는 것이다. 

당연한 것이지만 그렇게 해야 다운로드, 삭제 등이 가능하기 때문이다.

같이 저장하는 방식은 게시물이 저장된 테이블(TBL_BOARD)에 필드를 추가해서 처리할 것인지,

별도의 테이블에 처리할 것인지를 고려해야 한다.

첨부파일이 하나일 경우 같은 테이블에 저장하기도 하지만 대부분 하나 이상의 파일을 첨부하기 때문에 별도 테이블로 처리하는 것이 좋다.

이상의 두 가지를 고려해서 다음과 같이 첨부 파일을 저장하는 테이블(TBL_BOARDFILE)을 생성해야 한다.

CREATE TABLE TBL_BOARDFILE (
    FILENO INT(11)  NOT NULL AUTO_INCREMENT,   -- 파일 번호
    BRDNO INT(11),                                                -- 글번호
    FILENAME VARCHAR(100),                                -- 파일명
    REALNAME VARCHAR(30),                                -- 실제파일명
    FILESIZE INT,                                                   -- 파일 크기
    PRIMARY KEY (FILENO)
);

파일 번호(FILENO)는 첨부파일에 대한 기본 키 값으로 저장된 순서를 의미한다.

BRDNO는 게시판(TBL_BOARD)의 글 번호를 의미하는 것으로 게시물과 파일의 관련성을 나타낸다.

즉, 해당 게시물(BRDNO)의 모든 파일 파일을 가지고 오는데 사용한다.

FILENAME은 사용자가 첨부할 때의 원래 파일 이름을 의미하고, 

REALNAME은 서버에 저장하면서 새롭게 부여된 실제 파일명을 의미한다.

실제 파일명(REALNAME)은 날짜와 시간(millisecond)을 이용하여 중복되지 않게 부여하는데 30 자 이내로 저장한다.



'Java > 게시판 4:자료실' 카테고리의 다른 글

2. 자료실 - 글쓰기  (0) 2016.03.28
3. 자료실 - 글 수정  (3) 2016.03.28
4. 자료실 - 리스트  (0) 2016.03.28
5. 자료실 - 글 읽기 / 삭제  (0) 2016.03.26

+ Recent posts