기존에 db에 id가 있고 해당 id로 로그인하는데 비밀번호가 다르다면 로그인 실패가 발생한다.

 

하지만 db에 로그인시 입력한 id가 없는 경우 

 

데이터 베이스에 없는 아이디를 입력하게 되면 해당 값이 없으므로 Null을 반납하게되며 최종적으로 에러가 발생한다.

 

그래서 비밀번호 비교하는 코드 전에

 

if(login == null) {
 rttr.addFlashAttribute("msg", "loginFalse");
 return "redirect:/";
 }

 

해당 코드를 작성하면 login 값이 null이라면 NPE(NullPointError)를 발생하지 않고

 

view에서 성공적으로 로그인실패 라는 경고창이 나온다.

 


CONSTRAINT fk_reply FOREIGN KEY (replyer) REFERENCES user(identification) ON DELETE CASCADE
    

 

위와 같은 foreign key를 추가하였다.

 

그 이유는 기존에

 

CONSTRAINT fk_board FOREIGN KEY (board_number) REFERENCES board(board_number) ON DELETE CASCADE,

 

fk_board만 있을 때 회원탈퇴를 진행하면 해당게시글이 지워지면 어떤 사람이 댓글을 달았더라도 글자체가

 

통째로 삭제가 가능하였다.

 

하지만 a라는 사용자가 다른 게시물의 댓글은 단 후에 회원탈퇴를 진행했을 때 

 

그대로 댓글을 작성한 게시글에 데이터가 표시가되는데,

 

그것을 방지하기 위해

 

CONSTRAINT fk_reply FOREIGN KEY (replyer) REFERENCES user(identification) ON DELETE CASCADE를

 

db에 추가하여 다른 게시글에 댓글을 작성하고 탈퇴하면 탈퇴한 사용자의 모든 정보가 지워지게 된다.

사용자의 정보를 담고있는 user table,

 

게시물의 정보를 가지고 있는 board table,

 

댓글정보를 가지고 있는 reply table,

 

파일의 정보를 가지고 있는 file table 등이

 

각각 테이블마다 foreign key를 사용하는데 delete를 할 때 db에러가 발생한다.

 

그 이유는 예를 들어 설명하자면

 

한 사용자가 글을 작성할 때 파일을 올리고 해당 글을 등록했다.

 

글을 등록한 후에 회원탈퇴를 하면 db에러가 발생하는데 그 이유는 

 

회원탈퇴를 하면 바로 탈퇴가 되어야 할 것 같지만 foreign key로 인해 board table에 있는 board_number과

 

연결이 되어있기 때문에 삭제가 되지 않는다.

 

회원탈퇴를 하면 해당 사용자의 모든 정보가 삭제가 되어야하는데 그러기 위해서는

 

foreign key를 설정한 곳에 ON DELETE CASCADE를 추가해준다

 

ON DELETE CASCADE를 추가해주는 이유는 연관된 데이터를 모두 삭제해주기 때문에 

 

회원탈퇴를 하고 싶은데 댓글이나, 파일등이 fk로 설정되어 있고 db에러가 발생한다면

 

ON DELETE CASCADE를 추가해야한다.

 

'error' 카테고리의 다른 글

btn 클릭시 jquery 에러  (0) 2020.02.19

+ Recent posts