마지막!!! 어제 해결 못 한 회원탈퇴를 완성시켜버렸다..!!
팀장님한테 도움도 청하고 팀장님 AWS가 갑자기 막혀서(해킹 때문에 막힌거라고 한다.. 하나의 계정을 같이 쓰다가 그렇게 된걸까..??? 과금도 많이 되셨다는데.. 잘 해결 되면 좋겠다!! 프로젝트 기간동안 과금은 N빵 하기로 해서 괜찮긴 한데.. 해킹땜에 과금 많이 되면 억울 하자나!!!)
왜??? 회원탈퇴가 안된걸까??? 어제는 DB에 접근도 안되고(이것도 AWS 막혀서.. ㅠ)
DBeaver로 확인을 할 수가 없어서 인텔리제이 콘솔창만 확인했었는데.
어찌저찌 일단 AWS 계정 복구가 되서 DBeaver로 하나하나 확인 하면서 하니 그나마 빨리 해결했다!!! 오전을 날리긴 했지만..... ㅎㅎ
DBeaver 에서 raw를 삭제하려고 하니... ChatRoom 에서 user_id 에러..
그럼 ChatRoom으로 가서 그걸 먼저 삭제하자!!! 했더니?
이번엔 ChatMessage 에서 에러... 후;; 그러면 또 이동!!!
ChatMessage에서 삭제하니 잘 삭제가 됨!!!
그러면 java 파일도 chatmessage 부분을 수정하면 되겠구나!!!!
어디를 수정하지...??
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "msg_id")
Long id;
@Enumerated(value = EnumType.STRING)
private MessageType type;
//채팅방 ID
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "room_id", nullable = false)
private ChatRoom room;
//보내는 사람
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "user_id", nullable = false)
private User sender;
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "msg_id")
Long id;
@Enumerated(value = EnumType.STRING)
private MessageType type;
//채팅방 ID
@ManyToOne(fetch = FetchType.LAZY, cascade = CascadeType.ALL)
@JoinColumn(name = "room_id", nullable = false)
private ChatRoom room;
//보내는 사람
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "user_id", nullable = false)
private User sender;
room 이랑 연결되는 부분에 cascade가 없어서 일단 추가!!!
이렇게만 수정하고 회원탈퇴를 하면??
와!!! 탈퇴 된다!!!
근데! 탈퇴하면서 게시물까지 삭제함... 그것도 남의 게시물을....
이게 뭔 얘기냐면;;; A랑 B가 거래를 하고, B가 탈퇴를 하면 A랑 거래했던 해당 게시물을 삭제해버림;;;
후.. 도대체 어디가 잘 못 된걸까.. 잘 지워지는데.. 왜 자꾸 post가 삭제될까...
이 생각을 했을때 빠르게 post와 연결된 부분을 찾았어야 했는데.. 너무 뺑뻉이 돌아 버렸다.. ㅠㅠㅠㅠ
분명 post가 삭제되는게 문제였는데.. 왜 다른 짓을 했을까.. 워낙 뻘짓을 많이해서 뭔 짓을 했는지도 기억이 안난다.. ㅋㅋㅋㅋㅋ
그러므로.. 일단 해결한 것만 올리겠음!!!
@Id
private String roomId;
private String roomName;
@ManyToOne(fetch = FetchType.LAZY, cascade = CascadeType.ALL)
@JoinColumn(name="post_id")
@JsonIgnore
private Post post;
@OneToOne(fetch=FetchType.LAZY)
@JoinColumn(name= "user_id")
@JsonIgnore
private User user;
@JsonIgnore
@OneToMany(mappedBy = "room", cascade = CascadeType.ALL)
private List<ChatMessage> messages = new ArrayList<>();
여기!!! 여기가 문제였던것!! Message에서 잘 삭제가 되니! 여기를 고쳐야 하는데
계속 반복해서 말하는게 뭐다?? Post 부분!!
위 코드를 잘 보면 Post_id 부분에 cascade가 있는가 아닌가??
나 : 아.. 그러면 저거 없애고 돌려보자!
@Id
private String roomId;
private String roomName;
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name="post_id")
@JsonIgnore
private Post post;
@OneToOne(fetch=FetchType.LAZY)
@JoinColumn(name= "user_id")
@JsonIgnore
private User user;
@JsonIgnore
@OneToMany(mappedBy = "room", cascade = CascadeType.ALL)
private List<ChatMessage> messages = new ArrayList<>();
post_id 부분에 cascade를 없애고 돌리니!!!!!!!
드디어!!
드디어 제대로 회원탈퇴가 되었다..!!!
게시글도 안 없애고 잘!!!! 혹시 몰라서 3번을 확인하고 팀원들이랑 다 같이 1번 더 확인했다..
진짜 제발 아무 문제 없기를...
//채팅방 ID
@ManyToOne(fetch = FetchType.LAZY, cascade = CascadeType.ALL)
@JoinColumn(name = "room_id", nullable = false)
private ChatRoom room;
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name="post_id")
@JsonIgnore
private Post post;
이 두 부분!! Message 부분에선 cascade 를 추가 / Room 부분에서는 cascade를 제거!!!
진짜 이거 하나 때문에 양방향맵핑 된거 어디가 잘못된건지 어제부터 진짜 하루종일 찾았다...
AWS 가 말썽만 안부렸어도 Dbeaver로 더 빠르게 찾을 수 있었을텐데...(라는 변명을 해본다)
DB에서 직접 없애보면서 어느 부분이 문제인지 파악하니 더 쉽게 코드를 수정할 수 있었다!!