게시판 만들기 (기본구조, 테이블 생성)

Back-End/Spring 2019. 7. 2. 12:24
728x90
반응형

-게시판의 주요 기능-


1. 기본 기능


ㄱ. 로그인 후 게시물 등록, 수정이 가능하도록 처리


ㄴ. 글쓰기 (스마트 에디터 적용, 태그 문자 처리, 공백 처리, 줄바꿈 처리)


ㄷ. 게시물 상세정보, 조회수 증가 처리


ㄹ. 게시물 수정


ㅁ. 게시물 삭제 (delete 방식)


ㅂ. 게시물 삭제 (update 방식)


ㅅ. 검색 기능


ㅇ. 페이지 나누기



2. 파일업로드 (ajax)


ㄱ. 게시판에 파일 첨부


ㄴ. 첨부파일 목록, 다운로드, 삭제


ㄷ. 수정화면에서 새로운 파일 올리기



3. 댓글 기능


ㄱ. 일반적인 방식으로 댓글쓰기 (RestController, REST 방식)

$.ajax( ) 함수 호출하여 insert

컨트롤러에서 뷰로 포워딩한 responseText를 html 태그에 출력


ㄴ. 컨트롤러에서 ArrayList json 형식으로 리턴받아 댓글 목록 출력 (list_json.do)


ㄷ. 목록에 댓글 갯수 표시


ㄹ. 댓글 페이지 나누기 (댓글 목록은 일반적인 방식으로 처리)


ㅁ. 비밀댓글 쓰기, 표시


ㅂ. REST 방식으로 댓글 쓰기 (insert_rest.do)

크롬 확장 프로그램을 이용한 입력 처리

{ "replytext" : "댓글", "replyer" : "kim", "bno" : "1", "secret_reply" : "n" }


ㅅ. REST 방식으로 댓글 목록 출력


ㅇ. REST 방식으로 댓글 상세 화면, 수정, 삭제 기능 구현



4. 페이지 나누기


- 페이지당 게시물수 : 10개


- 전체 게시물수 : 991개


- 몇 페이지? : 100


991 / 10 => 99.1 올림 => 100



- 페이지의 시작번호, 끝번호 계산


where rn between 1 and 10


1페이지 => 1 ~ 10

2페이지 => 11 ~ 20

.....

11페이지 => 101 ~ 110

57페이지 => 561 ~ 570

99페이지 => 981 ~ 990

100페이지 => 991 ~ 1000


시작번호 = (현재페이지 - 1) * 페이지당 게시물수 + 1


1페이지 => (1-1) * 10 + 1 => 1

2페이지 => (2-1) * 10 + 1 => 11

7페이지 => (7-1) * 10 + 1 => 61


끝번호 = 시작번호 + 페이지당 게시물수 - 1


1페이지 => 1 + 10 - 1 => 10

2페이지 => 11 + 10 -1 => 20


* 전체 페이지 블록수

전체 페이지 갯수 / 10

91 / 10 => 9.1 => 10개


 

예시 )


1    2    3    4    5    6    7    8    9    10    [다음]

[이전]    11    12    13    14    15    16    17    18    19    20    [다음]



현재 페이지가 속한 블록


(현재 페이지 - 1) / 페이지 블록 단위 + 1


1페이지 => 몇번째 블록? 1

(1-1) / 10 + 1 => 1


9페이지 => 1블록

(9-1) / 10 + 1 => 1


11페이지 => 2블록

(11-1) / 10 + 1 => 2


57페이지

(57-1) / 10 + 1 => 6


* 페이지 블록의 시작번호

(현재블록 - 1) * 블록단위 + 1

1블록 => (1-1) * 10 + 1 => 1

2블록 => (2-1) * 10 + 1 => 11

6블록 => (6-1) * 10 + 1 => 51


* 페이지 블록의 끝번호

블록 시작번호 + 블록단위 - 1;

1블록 => 1 + 10 - 1 => 10

2블록 => 11 + 10 - 1 => 20

6블록 => 51 + 10 - 1 => 60



-데이터베이스 게시판 테이블 만들기-



1
drop table board cascade constraints; //기존의 테이블과 중복되지 않도록 제약조건까지 모두 삭제
cs


1
2
3
4
5
6
7
8
9
create table board ( //테이블 생성
bno number not null, // 게시물 번호
title varchar2(200not null, // 제목
content varchar2(4000), // 내용
writer varchar2(50not null, // 작성자 아이디 (member테이블과 join할 예정)
regdate date default sysdate, // 작성 날짜 (기본값으로 현재 시간이 들어가게됨)
viewcnt number default 0, // 조회수 (기본값이 0이기 때문에 0부터 시작)
primary key(bno) //기본키는 게시물 번호로 설정함
);
cs



1
2
insert into board (bno,title,content,writer) values
((select nvl(max(bno)+1,1)from board),'제목','내용','pard');
//게시물의 번호를 시퀀스를 이용해도 되지만 객체를 따로 관리해야 하기때문에
//서브쿼리를 작성하여서 관리
기본적으로 board에서 가장 큰 게시글 번호에서 1을 더하거나, 값이 없을때 (초기값) 은 1을 준다는 쿼리이다.
cs


1
commit; //작업을 완료시키는 쿼리
cs


728x90
반응형

'Back-End > Spring' 카테고리의 다른 글

게시판 만들기 (게시글 쓰기)  (0) 2019.07.02
게시판 만들기 (게시글 목록)  (0) 2019.07.02
Spring Editor (CKEditor, SummerNote) 사용  (1) 2019.07.02
Spring 이메일 보내기  (1) 2019.07.01
Spring xml bean property 정리  (0) 2019.07.01
: