728x90
★ 게시판 개발
- CRUD 개발
- ToyProject
■ 1. 주제
- 토이 프로젝트
■ 2. 요구 분석
- 회원
- 게시판
- 기타 등등..
■ 3. 전체 구성(페이지 관계도)
- 기능별...
- draw.io
■ 4. 화면 설계
- 생략
■ 5. 스토리 보드
- 생략
■ 6. 데이터 베이스
- ERD
■ 7. 스크립트
- DDL, DML
■ 8. 기초 데이터/더미 데이터
- DML
■ 9. 구현
- 기초 작업
- 패키지
- 업무별 작업
■ 업무 설계
■ 사용 jar 라이브러리
cos.jar
jacksonn-databind-2.13.3.jar
json-simple-1.1.1.jar
jstl-1.2.jar
lombok.jar
metadata-extractor-2.9.1.jar
mylibrary.jar
ojdbc8.jar
xmpcore-5.1.2.jar
■ 필요 프로젝트 및 자바 파일
- Dynamic > "ToyProject"
- Context name : "toy"
- web.xml > 체크(O)
ToyProject > ddl.script
> dml.script
기초 작업
패키지
- a. com.test.toy : 메인 패키지
- b. com.test.toy.board : 보드 패키지
- c. com.test.toy.board.repository : 보드 DB
- d. com.test.toy.filter : 필터링
- e. com.test.toy.place : 장소 패키지
- f. com.test.toy.place.repository : 장소 DB
- g. com.test.toy.user : 유저 패키지
- h. com.test.toy.user.repository : 유저 DB
파일
- a. com.test.toy
- Index.java : 시작 페이지
- Template.java : 템플릿 페이지
- b. com.test.toy.board
- Add.java : 게시글 추가
- Auth.java : 권한 부여
- Board.java : 게시글
- Comment.java : 댓글
- Del.java : 게시글 삭제
- DelComment.java : 댓글 삭제
- Dummy.java : 더미데이터
- Edit.java : 게시글 수정
- EditComment : 댓글 수정
- View.java : 조회
- c. com.test.toy.board.repository
- BoardDAO.java : 게시물 DAO
- BoardDTO.java : 게시물 DTO
- CommentDTO.java : 댓글 DTO
- d. com.test.toy.filter
- AuthFilter.java : 권한 필터 부여
- EncodingFilter.java : 인코딩 필터 부여
- e. com.test.toy.place
- AddPlace.java : 장소를 추가
- Place.java : 장소 공유 게시물
- View.java : 상세 보기 페이지
- f. com.test.toy.place.repository
- PlaceDAO.java : 장소 공유 게시물 DB
- PlaceDTO.java : 장소 공유 게시물 DTO
- g. com.test.toy.user
- CheckLog.java : 로그를 체크
- Info.java : 자신의 정보 확인
- Log.java : 기록들을 불러옴
- Login.java : 로그인 처리
- Logout.java : 로그아웃 처리
- Register.java : 회원가입 처리
- Unregister.java : 회원탈퇴 처리
■ jsp 파일
Webapp > WEB-INF > views > board
add.jsp
board.jsp
del.jsp
edit.jsp
view.jsp
Webapp > WEB-INF > views > inc
asset.jsp
header.jsp
Webapp > WEB-INF > views > place
addplace.jsp
place.jsp
view.jsp
Webapp > WEB-INF > views > user
info.jsp
login.jsp
register.jsp
unregister.jsp
Webapp > WEB-INF > views >
index.jsp
template.jsp
■ 데이터 베이스 DDL
-- ddl.sql
drop table tblUser;
-- 회원
create table tblUser (
id varchar2(50) primary key,
pw varchar2(50) not null,
name varchar2(50) not null,
email varchar2(100) not null,
lv char(1) not null,
pic varchar2(100) default 'pic.png' not null,
profile varchar2(500) not null,
ing char(1) default 'y' not null --탈퇴(n)
);
ALTER table tblUser
ADD (ing char(1) default 'y' not null);
select * from tblUser;
-- 게시판
drop table tblBoard;
create table tblBoard (
seq number primary key, -- 번호(PK)
subject varchar2(300) not null, -- 제목
content varchar2(4000) not null, -- 내용
id varchar2(30) not null references tblUser(id), --아이디(FK)
regdate date default sysdate not null, -- 작성시각
readcount number default 0 not null -- 읽음
);
create sequence seqBoard;
select * from tblBoard;
create or replace view vwBoard
as
select
seq, subject, id, readcount,
(select name from tblUser where id = tblBoard.id) as name,
(sysdate - regdate) as isnew,
case
when to_char(sysdate, 'yyyy-mm-dd') = to_char(regdate, 'yyyy-mm-dd')
then to_char(regdate, 'hh24:mi:ss')
else
to_char(regdate, 'yyyy-mm-dd')
end as regdate,
(select count(*) from tblComment where bseq = tblBoard.seq) as ccnt,
content,
depth
from tblBoard order by thread desc;
--
select * from vwBoard;
commit;
-- 댓글
create table tblComment (
seq number primary key, -- 번호(PK)
content varchar2(2000) not null, -- 댓글내용
id varchar2(50) not null references tblUser(id), -- 아이디(FK)
regdate date default sysdate not null, -- 날짜
bseq number not null references tblBoard(seq) -- 부모글(FK)
);
create sequence seqComment;
drop table tblComment;
drop table tblBoard;
----------------------계층형 게시판---------------------------------
-- 게시판
create table tblBoard (
seq number primary key, -- 번호(PK)
subject varchar2(300) not null, -- 제목
content varchar2(4000) not null, -- 내용
id varchar2(30) not null references tblUser(id), --아이디(FK)
regdate date default sysdate not null, -- 작성시각
readcount number default 0 not null, -- 읽음
thread number not null, -- 답변형(정렬)
depth number not null -- 답변형(출력)
);
create table tblComment (
seq number primary key, -- 번호(PK)
content varchar2(2000) not null, -- 댓글내용
id varchar2(50) not null references tblUser(id), -- 아이디(FK)
regdate date default sysdate not null, -- 날짜
bseq number not null references tblBoard(seq) -- 부모글(FK)
);
create sequence seqComment;
--------------------------------- Place -----------------------------------------------
drop table tblPlace;
create table tblPlace (
seq number primary key,
name varchar2(100) not null,
content varchar2(1000) not null,
pic varchar2(100) not null,
regdate date default sysdate not null,
id varchar2(50) not null references tblUser(id)
);
drop sequence seqPlace;
create sequence seqPlace;
select * from tblPlace;
create table tblHashTag (
seq number primary key,
tag varchar2(100) not null
);
create sequence seqHashTag;
create table tblPlaceHashTag (
seq number primary key,
pseq number not null references tblPlace(seq),
hseq number not null references tblHashTag(seq)
);
create sequence seqPlaceHashTag;
--------------------------------------------------------------------
select * from tblPlace;
select * from tblHashTag;
select * from tblPlaceHashTag;
select tblPlace.*,
(select name from tblUser where id = tblPlace.id) as uname
from tblPlace
where seq in (select seq from tblPlaceHashTag
where hseq = (select seq from tblHashTag where tag = '돼지' and rownum = 1))
order by seq desc;
select seq from tblPlaceHashTag
where hseq = (select seq from tblHashTag where tag = '돼지' and rownum = 1);
■ 데이터베이스 DML
-- dml.sql
-- 회원
insert into tblUser (id, pw, name, email, lv, pic, profile)
values ('hong', '1111', '홍길동', 'hong@gmail.com', '1', default, '자바를 공부하는 학생입니다');
-- 관리자
insert into tblUser (id, pw, name, email, lv, pic, profile)
values ('admin', '1111', '관리자', 'admin@gmail.com', '3', default, '프로젝트 관리자입니다. 언제든지 연락주세요~');
commit;
select * from tblUser;
select * from (select a.*, rownum as rnum from vwBoard a) where rnum between 1 and 10;
select count(*) from tblBoard;
select nvl(max(thread), 0) as thread from tblBoard;
select * from tblBoard;
----------------------------------
-- 특정 회원(hong)이 특정 날짜(2023.05.25)에
-- 어떤 행동(글/댓글/장소쓰기)을
-- 어떤 시간에 했는지?
select
level
from dual
connect by level <= 24;
select to_char(regdate, 'hh24') from tblBoard where id = 'minji' and to_char(regdate, 'yyyymmdd') = '20230525';
select
lv, count(hour) as cnt
from (select level -1 as lv from dual connect by level <= 24) a
left outer join
(select to_char(regdate, 'hh24') as hour from tblBoard where id = 'min' and to_char(regdate, 'yyyymmdd') = '20230525') b
on a.lv = b.hour
group by lv
order by lv asc;
select
lv, count(dd) as cnt
from (select level as lv from dual connect by level <= 31) a
left outer join
(select to_char(regdate, 'dd') as dd from tblBoard
where id = 'min' and to_char(regdate, 'yyyymm') = '202305') b
on a.lv = b.dd
group by lv
order by lv asc;
728x90
'Server' 카테고리의 다른 글
게시판 개발 STEP 2 - Board (0) | 2023.05.31 |
---|---|
AJAX STEP 11 - Map (0) | 2023.05.18 |
AJAX STEP 10 - 게시판 목록 보기 (0) | 2023.05.18 |
AJAX STEP 9 - 상품 목록 페이지 (0) | 2023.05.17 |
AJAX STEP 8 - 일기장 AJAX (0) | 2023.05.17 |