내일배움캠프 71일차

Drumj·2022년 7월 28일
0

내일배움캠프

목록 보기
72/80
post-thumbnail

<오늘의 학습>

마지막!!! 어제 해결 못 한 회원탈퇴를 완성시켜버렸다..!!

팀장님한테 도움도 청하고 팀장님 AWS가 갑자기 막혀서(해킹 때문에 막힌거라고 한다.. 하나의 계정을 같이 쓰다가 그렇게 된걸까..??? 과금도 많이 되셨다는데.. 잘 해결 되면 좋겠다!! 프로젝트 기간동안 과금은 N빵 하기로 해서 괜찮긴 한데.. 해킹땜에 과금 많이 되면 억울 하자나!!!)

왜??? 회원탈퇴가 안된걸까??? 어제는 DB에 접근도 안되고(이것도 AWS 막혀서.. ㅠ)
DBeaver로 확인을 할 수가 없어서 인텔리제이 콘솔창만 확인했었는데.

어찌저찌 일단 AWS 계정 복구가 되서 DBeaver로 하나하나 확인 하면서 하니 그나마 빨리 해결했다!!! 오전을 날리긴 했지만..... ㅎㅎ


왜??? 안 된걸까?

DBeaver 에서 raw를 삭제하려고 하니... ChatRoom 에서 user_id 에러..
그럼 ChatRoom으로 가서 그걸 먼저 삭제하자!!! 했더니?
이번엔 ChatMessage 에서 에러... 후;; 그러면 또 이동!!!
ChatMessage에서 삭제하니 잘 삭제가 됨!!!

그러면 java 파일도 chatmessage 부분을 수정하면 되겠구나!!!!
어디를 수정하지...??

  • ChatMessage
  1. 수정 전
@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;
  1. 수정 후
@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가 삭제되는게 문제였는데.. 왜 다른 짓을 했을까.. 워낙 뻘짓을 많이해서 뭔 짓을 했는지도 기억이 안난다.. ㅋㅋㅋㅋㅋ

그러므로.. 일단 해결한 것만 올리겠음!!!

  • ChatRoom
    자 봐봐??? 아까전에 메시지에서 room이랑 연결된 부분에 cascade를 추가 했지..?? 근데 그랬더니 ChatRoom이 없어지면서 회원 탈퇴가 되긴 하는데 문제가 뭐야??
    게시물도 같이 삭제되는거!!!!
    그러면 어디가 문제일까..?? ChatRoom에서 Post와 연결되는 부분 이겠지??
  1. 수정 전
@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가 있는가 아닌가??

나 : 아.. 그러면 저거 없애고 돌려보자!

  1. 정답
@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번 더 확인했다..
진짜 제발 아무 문제 없기를...


한 줄 요약

  • ChatMessage
//채팅방 ID
@ManyToOne(fetch = FetchType.LAZY, cascade = CascadeType.ALL)
@JoinColumn(name = "room_id", nullable = false)
private ChatRoom room;
  • ChatRoom
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name="post_id")
@JsonIgnore
private Post post;

이 두 부분!! Message 부분에선 cascade 를 추가 / Room 부분에서는 cascade를 제거!!!

진짜 이거 하나 때문에 양방향맵핑 된거 어디가 잘못된건지 어제부터 진짜 하루종일 찾았다...
AWS 가 말썽만 안부렸어도 Dbeaver로 더 빠르게 찾을 수 있었을텐데...(라는 변명을 해본다)


-오늘의 한 줄-

DB에서 직접 없애보면서 어느 부분이 문제인지 파악하니 더 쉽게 코드를 수정할 수 있었다!!

0개의 댓글