코딩 학원 41일차 (웹 사이트 회원 탈퇴, 글 쓰기, 토큰 발급, 글 목록)
어제 회원 가입, 로그인, 로그아웃, 회원 정보 수정 까지 했으니 이제 회원 탈퇴를 하면 된다.
나는 회원탈퇴 div를 누르면 현재 세션에 저장 되어 있는 id를 파라메터로 가지고 간 상태로 비밀번호 입력창으로 보내고 입력한 비밀번호가 일치하면 탈퇴 되게끔 하려고 했는데
생각해보니까 세션이라 굳이 파라메터로 받을 필요 없고 선생님은 그냥 비밀번호 안 받고 탈퇴 시켜준다고 하셨다.
대신 이렇게 promt로 정확한 타이핑을 할 경우 탈퇴페이지로 가지게 해준다 하셨다.
무슨 앱을 쓰던 회원 탈퇴 하기는 개 같이 귀찮게 돼있던 경험을 살려서 최대한 귀찮게 만들고 싶었는데 이미 마음 떠난 이용자에게 비밀번호 까지 다시 입력하라 할 필요가 있나 싶기도 하다. 나도 그냥 저 방법대로 만들었다.
세션을 불러와서 회원 탈퇴를 먼저 해주고 성공했다면 사진또한 지워준다.
이제 게시판을 만들 것이다.
테이블을 만들고 아무 글이나 insert 해보면 없는 id로 지정을 해도 막 써질 것이다. id가 없다면 글쓰기를 못하게 해야한다.
또한 탈퇴 했을 때 글은 자동으로 삭제 하게끔 만들려고 한다.
drop table 할 때 썼던 constraint는 제약조건을 말한다.
primary key 같은 foreign key(외래 키) 라는 것이 있다.
constraint 제약조건명 foreign key 필드명 references 테이블명(필드명) on delete cascade
문법은 이렇고 실제로 적용해보자면
이렇게 테이블 안 쪽에 위의 양식대로 넣어준다.
member2 테이블의 id에 없는 사람은 글 작성을 못하며 또한 탈퇴한 계정의 글은 자동으로 삭제 된다.
테스트 삼아서 아이디 대충 넣고 insert 해보니 안 되고 가입 되어 있는 계정 넣고 만들면 잘 된다.
탈퇴 하면 댓글 지워지는 거랑 글 삭제 하면 써져있던 댓글도 사라지는 것들도 이러한 방법으로 한다.
이제 글쓰기 form을 먼저 만드는데 글쓰는 공간과 글 목록들이 동시에 존재하는 요즘 sns 느낌으로 만들어보려고 한다.
이렇게 if 문으로 로그인 정보가 있을 때만 아래 내용이 나오게끔 만들어준다.
요청파라메터 갯수는 무제한이지만 인터넷 주소는 길이제한이 있기에 글쓰기 기능이 있을 경우에는 그냥 post로 하는게 좋다.
그리고 새로고침하면 똑같은 파라메터로 요청을 다시 하게 되면서 글이 계속 새로 써지던 경우를 방지하기 위해서
아까랑 똑같은 요청이 또 들어오면 insert를 안 하게끔 만들어야 한다.
이런 경우 때문에 토큰이라는 것을 발급 해준다. 요청을 할 때 마다 새로운 토큰을 발급 해주면서 새 토큰일 경우 insert를 해주고 같은 토큰이라면 무시해버리는 전략을 취한다.
이렇게 초 단위까지 세세하게 해주면 토큰의 값이 절대 중복이 나지 않을 것이다.
만든 토큰 기능을 이 글 쓰기 페이지로 넘어올 때 마다 생성을 해준다.
글쓰기 할 때 이 토큰이 인풋 값에 입력이 되고 누가 건들 수 없게 hidden 처리 해준다.
DAO의 글 쓰기 기능에서 토큰을 불러와주고 글쓰기 성공 시 토큰을 세션으로 만든다.
세션으로 만들어졌을 토큰을 글쓰기 기능 시작시에 받아오고
글쓰기 하면서 넘어온 토큰 값과 마지막 세션에 저장되있던 토큰 값이 같거나 마지막 토큰이 아예 없는 상태라면 글쓰기가 실행 되지 않게 해준다.
14:25:01 - 첫 글 쓰기
token = 142501
lastToken = null
글쓰기 성공 시 successToken = 142501
----
14:26:01 - 두번째 글쓰기
token = 142601
lastToken = 142501
성공 - successToken = 142601
-------
14:27:01 새로고침
token = 142601
lastToken = 142601
이렇게 진행이 될 것이다.
다음은 임의대로 글을 어느 정도 써주고 게시판 메인을 나오게 해줘야 한다.
jsp 쪽 말고는 크게 변한 것 없이 저번에 했던 게시판 만들기랑 비슷하기에 설명은 넘어가겠다.
페이지 이동은 이런식으로 구현했다.
jsp 쪽에서 a태그에 파라메터를 하나 넣고 페이지 번호를 그 파라메터로 넣어주었는데 컨트롤러를 하나 만들기 보다는 게시판 으로 이동 되는 유일한 컨트롤러인 여기서 if문을 이용하여 없을 때는 1 넣고 있을 때는 그거 넣게끔 만들어줬다.
오늘 낸 오류
1. 경로를 진짜 눈 씻고 다시 봐도 정확히 썼는데도 경로가 틀렸다고 나오는 경우 지정한 jsp 파일의 이름을 한번 바꾼 다음 jsp를 실행해주고 다시 원래 이름으로 바꿔 준 다음 실행해보면 정상 작동이 된다.
2. token 처리 중 업로드 할 때 입력되는 token 값을 받아올 때 나는 파일 업로드를 썼기 때문에 multipartrequest에서 가져왔어야 하는데 그냥 request로 가져와서 null 처리가 되어 새로고침 무한 글 생성이 되었다.