Server

게시판 개발 STEP 1 - Ajax, Json, Oracle, JDBC etc..

2023. 5. 31. 13:55
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
'Server' 카테고리의 다른 글
  • 게시판 개발 STEP 2 - Board
  • AJAX STEP 11 - Map
  • AJAX STEP 10 - 게시판 목록 보기
  • AJAX STEP 9 - 상품 목록 페이지
IT의 큰손
IT의 큰손
IT계의 큰손이 되고 싶은 개린이의 Log 일지
IT의 큰손
Developer Story House
IT의 큰손
전체
오늘
어제
  • 분류 전체보기 (457)
    • 정보처리기사 필기 (18)
    • 정보처리기사 실기 (12)
    • 정보처리기사 통합 QUIZ (12)
    • 빅데이터 (11)
    • 안드로이드 (11)
    • 웹페이지 (108)
    • 자바 (49)
    • SQLD (3)
    • 백준 알고리즘 (76)
    • 데이터베이스 (41)
    • 깃허브 (2)
    • Library (14)
    • Server (31)
    • 크롤링&스크래핑 (3)
    • Spring (23)
    • Vue.js (13)
    • React (27)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

  • Developer Stroy House

인기 글

태그

  • 개발블로그
  • DB
  • 프론트엔드
  • html
  • 정보처리기사필기
  • 개발자
  • ajax
  • 백준
  • jquery
  • 웹개발
  • 데이터베이스
  • IT자격증공부
  • DBA
  • 자바
  • React
  • IT자격증
  • JavaScript
  • 웹페이지
  • java
  • 코딩테스트
  • 백엔드
  • 정보처리기사
  • it
  • 웹개발자
  • jsp
  • css
  • 알고리즘
  • 앱개발자
  • IT개발자
  • 정보보안전문가

최근 댓글

최근 글

Designed By hELLO
IT의 큰손
게시판 개발 STEP 1 - Ajax, Json, Oracle, JDBC etc..
상단으로

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.