course 2021/Project

02. 기록(1)

코딩하는토끼 2022. 1. 2. 14:35

>> 2021/12/24~2022/01/20 : 28일의 기록 <<

  • 해주세요 (help) 게시판 CRUD 
  • 팀원들과 DB 통일, 테이블명, 경로명 변경 
  • 변경사항에 따른 경로 재설정, 연결
  • 글 작성 시 로그인한 회원 정보가 자동으로 전달되어 직접 작성하지 않도록
  • 필터 작성, 로그인 하지 않으면 글쓰기 불가하도록
  • 작성자가 아니면 글 수정/삭제 불가하도록
  • 조회수 카운트 기능 추가
  • 글쓰기 링크 게시판 화면에 띄우기, 연결
  • 어제 날아간 코드 복붙
  • 댓글이 달려있어도 게시글을 지울 수 있도록 수정
  • 작성자가 아니면 글 수정/삭제 페이지를 '경로로도' 접근할 수 없도록 수정
  • 태그 정하고 해주세요 게시판(register, modify)에 적용
  • 태그 not null, default "기타" 로 변경
  • 태그 게시판 (list, post) 에 표시되도록 추가
  • 태그 선택하지 않으면 사다주세요 선택되는 문제 -> 선택하지 않으면 기타로 등록되도록 수정
  • list, post 에 c:out 작성하여 script 공격 막기
  • 게시글 수정되면 ‘수정됨’ 뜨도록
  • innerNav 에 페이지 최상단으로 올라가는 버튼 추가
  • edit profile 드롭다운이 innerNav 뒤로 가려지는 문제 해결
  • 게시판 (list) 에 작성자 닉네임 표시되도록 추가
  • 지역별로 게시글 분류 
  • 지역 선택시 바로 쿼리에 전달 안되는 문제 해결
  • register, modify 폰트 바꾸고 css 일부 수정
  • 줄바꿈 반영되어 보여지도록 수정
  • 일상생활, 동네소식 게시판 구현
  • 일상생활, 동네소식 게시판도 로그인 안하면 글작성 못하도록 수정 (필터에 추가)
  • 일상생활, 동네소식 댓글 등록 안되는 문제 해결 (DB 문제)
  • 댓글에 대댓글 달 수 있도록 대댓글 기능 추가
  • 대댓글 달리면 게시글 삭제 안되는 문제 해결 (테이블에 boardId 컬럼 추가)
  • 신고기능 추가
  • @RestController -> @Controller 변경하여 포워딩 작동하도록
  • 결국 controller 두개로 분리
  • 신고관리 게시판 만들기
  • 신고관리게시판 관리자만 접근 가능하도록
  • 게시글 삭제하면 해당 게시글의 신고내역도 모두 삭제되도록 함
  • 게시글은 남겨두고 신고내역만 삭제 가능하도록 함
  • 로그인 해야 신고 가능하도록 수정
  • 신고관리게시판에 신고 상세사유 있는 경우 tooltip 으로 뜨도록 함
  • 관리자가 댓글, 대댓글 삭제 못하는 문제 해결 (controller 수정)
  • 신고관리 게시판 카테고리별(게시글/댓글) 필터링 기능 추가, css
  • 대댓글 정렬 문제 해결
  • 댓글/대댓글 삭제하면 해당 댓글/대댓글의 신고내역도 모두 삭제되도록 함
  • 댓글 정렬 변경 (최신 댓글이 아래에 위치하도록)
  • 댓글, 대댓글 글자수 최대 200자로 변경
  • 일상생활, 동네소식 게시판에도 변경사항 적용
  • 동네신문고 게시판에 좋아요 추가
  • 일상생활 게시판에 대댓글 안 달리는 문제 해결
  • 신고 시 게시판 이름 제대로 넘어가도록 수정
  • 해주세요 게시판 글 수정에만 태그에 빌려주세요 있는 것 삭제
  • 신문고 게시판에 부족한 기능 추가 
  • 게시판에 테스트로 작성된 글 모두 삭제하고, 새로 예시 글 작성
  • 경로 수정 /controller1/ → ${pageContext.request.contextPath }/

> 게시판 CRUD

0. DB 에 테이블 만들기

1. VO 작성 (class)

2. mapper.xml 작성 (file)

3. mapper.java 작성 (interface)

4. service 작성 (class)

5. controller 작성 (class)

6. jsp 작성 (jsp)


mapper.xml

- 테이블 전체 조회: List<VO> / 한 row 조회 - VO / 한 column 조회 - list / 한 칸 조회 - string

- select: resultType 작성

- nickname 도 같이 불러오기: 기존 getList 에 JOIN 하여 한번에 작성 (단, VO 에도 컬럼명 추가)

- insert: useGeneratedKeys="true" keyProperty="id" keyColumn="id" 작성

- default 값으로 불러올 것들은 쿼리에 작성하지 말 것

- update: 이미 default 값이 들어가있는 updated 는 쿼리에서 직접 NOW() 값을 넣어줘야 함


> modify 화면에서 remove 가 작동하지 않는 (수정으로 작동하는) 문제

<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.6.0/jquery.min.js" referrerpolicy="no-referrer"></script>

↑ 이 코드를 modify.jsp 에 붙여넣기


> 태그 select 

register.jsp, modify.jsp 에서 태그를 여러개 중에 선택할 수 있도록

select 안에 option 태그 작성, value 로 값 전달

disabled: 선택 불가, selected: 선택되어있음

태그를 선택하지 않으면 기타로 등록되도록 함


> modify 에서 글 작성 시 등록해놓은 태그가 선택되어있도록 하기

<c:if test="">selected</c:if> 를 option 태그 안에 작성


> 글 작성 시 로그인한 회원 정보가 자동으로 전달되어 사용자가 직접 작성하지 않도록 하기

memberId - hidden

location, nickname - readonly

 

sessionScope.loginUser

↓ UserController 

email 로 회원 정보를 읽어와 vo 에 저장, vo 를 loginUser 에 저장

 

↓ UserService, UserMapper.java, UserMapper.xml

 

sessionScope

https://m.blog.naver.com/0192141606/70184767551 (출처)


> 로그인 하지 않으면 글쓰기, 수정 못하도록 - 필터 생성, web.xml 에 매핑 작성

CheckLogInFilter 필터 생성, doFilter 다음과 같이 작성

web.xml

* 12/14 수업 참고


> 작성자가 아니면 게시글 수정/삭제 (modify) 불가능 하도록 

1) 수정/삭제 버튼이 뜨지 않도록 설정 - post.jsp

<c:if test=""> </c:if> 안에 버튼 넣기

test 에서 ${session.Scope.loginUser.id eq post.memberId} 로 로그인한 유저의 id가 게시글의 memberId와 동일한지 확인

 

2) 경로로도 접근할 수 없도록 설정 - HelpController

Controller 의 GetMapping("/modify") 의 기존 코드에 위와같이 작성

로그인한 회원의 정보를 loginUser 로 받아와서 uvo

게시글의 id 로 해당 게시글의 정보를 받아와서 hvo

if 문 - 유저의 id 와 게시글의 memberId 가 다르면 all/list 로 리디렉트 

session.getAttribute("loginUser")


> 경로

1. "${pageContext.request.contextPath}/(경로)"

2. req.getContextPath()+"(경로)"

 

↓ 참고1

https://sooblair84.tistory.com/18 (출처)

 

↓ 참고2

https://byul91oh.tistory.com/203(출처)

 

https://tokkicode.tistory.com/45 참고


> 조회수 카운트 

1) mapper.xml

2) mapper.java

3) service

4) controller

post 로의 getMapping 에서 service.upViews(id) 실행


> 댓글이 달려있어도 게시물을 삭제할 수 있도록 - Service 에 @Transactional

댓글이 달려있을 때 게시글을 삭제하려고 하면 다음과 같은 문제가 발생

Cannot delete or update a parent row: a foreign key constraint fails (team.tb_reply_help, CONSTRAINT tb_reply_help_ibfk_1 FOREIGN KEY (boardId) REFERENCES tb_board_help (id))

즉, 댓글의 boardId 가 게시글의 id 를 참조하고 있기 때문에 (외래키) - 삭제 불가능

(12/22 수업 참고)

1) Reply(댓글) mapper.xml 에 작성

2) Reply(댓글) mapper.java 에 작성

3) Help (게시글) service 에 작성

댓글 삭제 코드를 추가하고

@Transactional 작성하여 댓글을 지우고 게시글을 지우는 작업을 묶어서 한번에 처리하도록 함


> updated 와 inserted 가 다르면 (수정됨) 표시되도록

같지 않으면 ne

https://itnewvom.tistory.com/4 (참고)


> innerNav 에 페이지 최상단으로 올라가는 버튼 추가

https://tokkicode.tistory.com/39 (참고)

https://tokkicode.tistory.com/33?category=999654 (참고)


> edit profile 드롭다운이 innerNav 뒤로 가려지는 문제 해결

z-index

https://aboooks.tistory.com/83 (참고)

↓ header

↓ innerNav

 

→ z-index 가 999 로 가장 큰 header 의 dropdown 이 가장 위에 위치하도록 수정함


> c:out 으로 script 공격 막기


> 줄바꿈이 반영되어 보여지도록 수정

https://offbyone.tistory.com/326 (참고)