프로젝트 내역 : https://drive.google.com/file/d/1AuY-JMz5XyerScCCW90G1qJha9OHvu5u/view
프로젝트 코드 : https://github.com/smkim9202/mykit
Board 테이블 하나로 2종류의 게시판을 만드는게 생각보다 어려웠다. 특히 전체적으로 만드는 것보다 테스트하다가 발견 된 작은 오류들을 하나하나 잡는 과정이 어려웠다. 또한 그런 오류를 해결해가는 과정에서 다양한 테스트 케이스들을 생각하고 여러번 테스트 해보는 과정이 생각보다 오랜 시간이 걸렸다.
게시판 공통
1. board 테이블 변경 : 컬럼조회해서 설계대로 나오는지 확인
- Board -> num(자료형크기) / img, boardlock, replycontent 컬럼삭제 / boardlock, grpnum 컬럼추가
- MultipartFile 자료형 => pom.xml 파일업로드 설치 : commons-fileupload 1.3.3
alter table board modify(num number);
alter table board drop column img;
alter table board drop column boardlock;
alter table board drop column replycontent;
alter table board add boardlock VARCHAR2(8 char) check(boardlock IN('bdunlock','bdlock')) NOT NULL;
alter table board add grpnum number;
commit;
desc board
2.게시판 클래스 캡슐화 및 유효성검사 : logic.board.java
3. 구조 : Controller, Service, Repository, MyBatis, 예외처리, AOP
- @Service(내부에서 자바 로직 처리) : logic.ShopService.java 생성
- @Controller(웹 요청과 응답을 처리) : controller.BoardController.java 생성
- @Repository(DB파일 및 I/O 작업 처리) : dao.BoardDao.java 생성
- Mybatis 인터페이스 : dao.mapper.boardMapper.interface 생성
- 예외처리 : exception.BoardException.java 생성
- @Aspect(AOP) : aop.BoardAspect.java 생성
Q&A 게시판
- 자동으로 구분 btype-1 설정
- 답글형 게시판
- 비공개 글 작성 가능
Q&A 글 작성(board/qawrite)
- 로그인시에만 글쓰기 가능
- 공개 여부 선택 권한 : 작성자, 관리자
- 답글 달기 권한 : 관리자
1. Q&A 글쓰기 view단(임시) view/borad/qawrite.jsp 코딩
Q. 유효성검사
=> pom.xml : validation-api 2.0.1.Final / hibernate-validator 6.1.0Final
Q. 한글 데이터 입력 인코딩
=> web.xml :filter-mapping(CharacterEncodin /*)
2. URL연결(http://localhost:8090/mykit/board/qawrite), 작성글 DB저장
BoardController.java @GetMapping("qawrite")
BoardController.java : @PostMapping("qawrite")
BoardController.java : @RequestMapping("imgupload") //스마트에디터-이미지업로드
ShopService.java : boardqawrite()
BoardDao.java : qawrite() -> BoardMapper.interface : insert(Board board)
BoardDao.java maxNum메서드 -> BoardMapper.interface : maxNum()
Q.로그인한사람만가능, 로그인유저아이디넣는법(현재는 강제로 admin)
Q&A 글 목록(board/qalist)
- 페이징처리
- 검색기능 : 구분(제목, 작성자, 내용) 선택
- 비공개 글 : 작성자와 관리지만 클릭 가능
1. Q&A 목록 view단(임시) view/borad/qalist.jsp 코딩
2. URL연결(http://localhost:8090/mykit/board/qawrite), 작성글 DB조회, 페이징처리, 검색기능
BoardController.java @RequestMapping("qalist")
ShopService.java : boardcount(searchtype, searchcontent)
BoardDao.java : count(searchtype, searchcontent) -> BoardMapper.interface : count(searchtype, searchcontent)
ShopService.java : List<Board> boardlist(pageNum, limit, searchtype, searchcontent)
BoardDao.java : List<Board> list(pageNum, limit, searchtype, searchcontent)
Q.게시글 상세보기는 비회원도?, 비공개글 aop권한(작성자로그인, 관리자로그인)
Q&A 글 상세보기(board/qadetail)
- 답변 버튼 : 관리자에게만 노출
- 수정 버튼 : 작성자에게만 노출
- 삭제 버튼 : 관리자, 작성자에게만 노출
1. Q&A 글상세보기 view단(임시) view/borad/qadetail.jsp 코딩
2. URL연결(http://localhost:8090/mykit/board/qadetail), 작성글 DB조회
BoardController.java @GetMapping("qadetail")
ShopService.java : Board getBoard(Integer num)
BoardDao.java : Board selectOne(num) -> BoardMapper.interface : Board selectOne(num)
Q.답변버튼 - 관리자로그인 / 수정버튼 - 작성자로그인 / 삭제버튼 – 관리자&작성자로그인:
Q&A 글수정하기(board/qaupdate)
- 수정하기 권한 : 작성자
1. Q&A 글상세보기 view단(임시) view/borad/qaupdate.jsp 코딩
2. URL연결(http://localhost:8090/mykit/board/qaupdate), 원글 DB조회 후 수정글 업데이트
BoardController.java @GetMapping("*")
BoardController.java @PostMapping("qaupdate")
ShopService.java : Board boardUpdate(board, request)
BoardDao.java : qaupdate(board) -> BoardMapper.interface : Board qaupdate(board)
BoardException.java import
Q.수정페이지 – 작성자로그인시 조회 및 등록가
Q&A 글삭제하기(board/qadelete)
- 권한 : 작성자, 관리자
1. Q&A 글삭제하기 view단(임시) view/borad/qadelete.jsp 코딩
2. URL연결(http://localhost:8090/mykit/board/qadelete), 원글 DB조회 후 DB 삭제
BoardController.java @GetMapping("*")
BoardController.java @PostMapping("qadelete")
ShopService.java : Board boardDelete(num)
BoardDao.java : qadelete(num) -> BoardMapper.interface : Board qadelete(num)
Q.삭제페이지 – 관리자&작성자로그인시만 조회 및 삭제가능:
Q&A 답글쓰기(board/qareply)
- 권한 : 관리자
1. Q&A 답글쓰기 view단(임시) view/borad/qareply.jsp 코딩
2. URL연결(http://localhost:8090/mykit/board/qadelete), 글 DB등록
BoardController.java @GetMapping("*")
BoardController.java @PostMapping("qareply")
ShopService.java : Board boardReply(board)
BoardDao.java : qareply(board) -> BoardMapper.interface : Board qareply(board)
Q.삭제페이지 – 관리자만 조회 및 답변가능 /
공지사항 & 이벤트 게시판
- 자동으로 구분 btype-2 설정
- 첨부파일 기능
공지사항&이벤트 글쓰기(board/evwrite) 관리자만 글쓰기 가능
- 권한 : 관리자
- 첨부파일 기능
1. 공이 글쓰기 view단(임시) view/borad/evwrite.jsp 코딩
2. URL연결(http://localhost:8090/mykit/board/evwrite), 작성글 DB저장
BoardController.java @GetMapping (value ={"qawrite", "evwrite"})
BoardController.java : @PostMapping("evwrite")
ShopService.java : boardevwrite()
BoardDao.java : evwrite() -> BoardMapper.interface : insert(Board board)
Q.관리자만글쓰기가능, 로그인유저아이디넣는법(현재는 강제로 admin)
공지사항&이벤트 목록(board/evlist)
- 페이징처리
- 검색기능 : 구분(제목, 내용) 선택
- 작성 버튼 : 관리자에게만 노출
1. 공이 목록 view단(임시) view/borad/evlist.jsp 코딩
2. URL연결(http://localhost:8090/mykit/board/evwrite), 작성글 DB조회, 페이징처리, 검색기능
BoardController.java @RequestMapping(value ={"qalist","evlist"})
ShopService.java : boardcount(searchtype, searchcontent, boardtype)
BoardDao.java : count(searchtype, searchcontent, boardtype) -> BoardMapper.interface : count(searchtype, searchcontent, boardtype)
ShopService.java : List<Board> boardlist(pageNum, limit, searchtype, searchcontent, boardtype)
BoardDao.java : List<Board> list(pageNum, limit, searchtype, searchcontent, boardtype)
공지사항&이벤트 글상세보기(board/evdetail)
- 삭제 버튼 : 관리자에게만 노출
- 수정 버튼 : 관리자에게만 노출
1. 공이 글상세보기 view단(임시) view/borad/evdetail.jsp 코딩
2. URL연결(http://localhost:8090/mykit/board/qadetail), 작성글 DB조회
BoardController.java @GetMapping("qadetail",”evdetail”)
ShopService.java : Board getBoard(Integer num)
BoardDao.java : Board selectOne(num) -> BoardMapper.interface : Board selectOne(num)
Q:답변버튼 - 관리자로그인 / 수정버튼 - 작성자로그인 / 삭제버튼 – 관리자&작성자로그인:
공지사항&이벤트 글수정하기(board/evupdate)
- 권한 : 관리자
1. 공이 글상세보기 view단(임시) view/borad/evupdate.jsp 코딩
2. URL연결(http://localhost:8090/mykit/board/evupdate), 원글 DB조회 후 수정글 업데이트
BoardController.java @GetMapping("*")
BoardController.java @PostMapping("qaupdate",”evupdate”)
ShopService.java : Board boardUpdate(board, request)
BoardDao.java : update(board) -> BoardMapper.interface : Board update(board)
BoardException.java import
Q: 수정페이지 – 관리자로그인시 조회 및 등록가능
공지사항&이벤트 글삭제하기(board/evdelete)
- 권한 : 관리자
1. Q&A 글삭제하기 view단(임시) view/borad/qadelete.jsp 코딩
2. URL연결(http://localhost:8090/mykit/board/evdelete), 원글 DB조회 후 DB 삭제
BoardController.java @GetMapping("*")
BoardController.java @PostMapping("qadelete",”evdelete”)
ShopService.java : Board boardDelete(num)
BoardDao.java : delete(num) -> BoardMapper.interface : Board delete(num)
Q: 삭제페이지 – 관리자&작성자로그인시만 조회 및 삭제가능:
게시판 공통
공통. 게시판 AOP 적용하기기&로그인정보로 버튼 보이게
Qalist(qa목록) : 글쓰기버튼(클릭시 login체크) / 비공개글상세보기(클릭시 login체크)
- Qawrite(qa 글쓰기) : 글쓰기 url로 접속 => login 상태 아니면 사용 불가(권한이없습니다.)
Qadetail(qa 글상세보기) : 답변버튼(관리자로그인시에만보임) / 수정&삭제버튼(관리자로그인&작성자로그인시에만보임)
Qareply(qa 답변하기) : 답변하기 url로 접속 => 관리자 로그인 상태 아니면 사용 불가(권한이없습니다.)
Evlist(공이 목록) : 글쓰기버튼(관리자로그인시에만보임)
Evwrite(공이 글쓰기) : 글쓰기 url로 접속 => 관리자 로그인 상태 아니면 사용 불가(권한이없습니다.)
Evdetail(공이 글상세보기) : 답변버튼&삭제버튼(관리자로그인시에만보임)
Evupdate(공이 글수정하기) : 글수정 url로 접속 => 관리자 로그인 상태 아니면 사용 불가(권한이없습니다.)
Evdelete(공이 글삭제확인) : 글수정 url로 접속 => 관리자 로그인 상태 아니면 사용 불가(권한이없습니다.)
ð aop처리 안하고 controller에서 처리
Qalist글목록에서 비공개글이면 표시하는법 => 작성자&관리자 로그인 상태 아니면 사용 불가(권한이없습니다.)
Qaupdate(qa 글수정하기) : 글수정 url로 접속 => 작성자&관리자 로그인 상태 아니면 사용 불가(권한이없습니다.)
Qadelete(qa 글삭제확인) : 글삭제확인 url로 접속 => 작성자&관리자 로그인 상태 아니면 사용 불가(권한이없습니다.)
공통. 게시판 오류 고치기
Y: 다른 게시판 같은 기능 메서드 하나로 합치기=> 구분하는 url주소 값으로 받아오기
String requestUrl = (String)request.getAttribute(HandlerMapping.PATH_WITHIN_HANDLER_MAPPING_ATTRIBUTE);
Y: 글목록 조회시 글 순서가 자기 마음대로.. 답글도 원글 밑에 넣는법 문제해결..: => orderby정렬기준고치기(grpnum)
Y:게시판 글 목록 (게시판 타입 별 조회 나누는 법) => 페이징처리에서 게시판 타입 매개변수 보내주기
Y:게시판 글 목록에서 검색시 (게시판 타입 별 검색조회 나누는 법) => 페이징처리에서 게시판 타입 매개변수 보내주기
Y: 답글상세보기에서는 답글쓰기버튼삭제하는법 => 화면단에서 if로 고치기
Y: 답변달기 완료전 원글삭제시 답변달면 오류나게 하기 => checkgrpnum으로 원글삭제 됐는지 체크후 예외처리 페이지로 넘겨줬다.
Y: 원글삭제시 답글까지 전부 삭제하기 => delete를 orgdelete와 redelet로 세분화시켜서 원글은 grpnum기준 답글은 num기준 삭제
Y: 글작성시 로그인정보 가져와서 작성자값으로 로그인한userid => qawrite hidden에서 ${loginUser.userid} 로그인유저값 보내주기
Y : 목록에서 제목 옆에 비공개글 표시
Y : 비공개글 답변시 원글의 boardlock정보가져와서 옵션창 비공개가 자동으로 seleted
'프로젝트 > Team project(with KIC)' 카테고리의 다른 글
[Django Project : OOTD] mariaDB 연결 (0) | 2022.01.19 |
---|---|
[Django Project : OOTD] ~2022-01-19(수) 기획 및 역할분담 (0) | 2022.01.19 |
[Spring Project : Mykit] ~2021-12-14(화) 레시피게시판 완성 (0) | 2022.01.19 |
[Spring Project : Mykit] Oracle Board 테이블 변경 (0) | 2021.12.06 |
[Spring Project : Mykit] 2021-12-03(금) 게시판 버튼, URL 정리 (0) | 2021.12.04 |