지난 주 시험부터 나의 발목을 잡고 놔주질 않네 연관관계 ^^
미챠버리겠다. 오늘의 연관관계는!
게시물 - 댓글 - 좋아요 문제였다.
그냥 게시물 삭제? OK / 댓글이 달린 게시물 삭제? OK !! but, 그러나 좋아요 달린 게시글, 좋아요 달린 댓글 삭졔? NO!!!
좋아요 엔티티의 리스트를 게시글과 댓글이 가지도록 연관관게를 추가해주니 잘 작동하였으나 왜인지 코드가 많이 지저분해진 느낌적인 느낌이랄까?
Post
@JsonBackReference
@OneToMany(mappedBy = "post", cascade = CascadeType.REMOVE)
private List<PostLike> postLikeList;
Comment
@JsonBackReference
@OneToMany(mappedBy = "comment", cascade = CascadeType.REMOVE)
private List<CommentLike> commentLikeList;
이렇게 엔티티 쪽에 무작정 때려넣기는 했는데 결국엔 이 녀석도 @OneToMany 연관관계를 맺어준 셈,, 이렇게 되면 DB에 날리는 쿼리가 늘어난다. 하나의 쿼리로 깔끔히 되는게 아니라 날아가는 쿼리의 양이 훨씬 많아지니 DB 접근 비용이 증가할 것이고 (지금은 큰 문제가 없지만) 나중에는 이런 곳에서 개선을 시켜야 할 것이다. 바로 어제의 TIL에서 확인할 수 있듯이 OneToMany는 '지양'하는 것이 좋다고하니 다음 프로젝트에서는 조금 더 개선해보는 것으로 하자
그리고 추가로 오늘 해본 것은 Redis를 이용하여 로그아웃 기능을 구현하는 것이었다. Redis는 In-memory 형식의 DB여서 '캐싱'과 비슷하게 생각하면 될 것 같고 이 녀석에게 로그아웃을 한 사용자의 엑세스 토큰을 블랙리스트로 담아주어 그 토큰을 또 다시 사용하지 못하게 한다. 그리고 기존에 db에 저장되어 있던 리프레시 토큰을 삭제해준다.
아.. 여기서 또 다시 난관봉착. 리프레시 토큰과 유저를 @OneToOne으로 묶어서 다 삭제되도록 해놓았으니 로그아웃 시 리프레시 토큰만 삭제가 되지 않는다..... ㅠㅠ
( ++ 매니저님 면담 결과, 리프레시 토큰과 user의 연관관계가 있는 것을 보지 못했다고 하셨다 ㅋㅋㅋㅋㅋ 참 웃긴 삽질이었던 것으로.. 그래도 이 과정이 있어서 내가 성장할 수 있는거라 생각하며, OneToOne에 대한 미련 삭제..!!)
'T.I.L. :: Today I Learned > 항해99 14기 본과정' 카테고리의 다른 글
Day 33. 코린이는 어린이날 코딩을 해요. (1) | 2023.05.05 |
---|---|
Day 32. 주특기주차까지 끝나버렸다. (0) | 2023.05.04 |
Day 30. Column user_user_name cannot be null (0) | 2023.05.02 |
Day 29. 오류가 너무 웃겨서 배꼽 빠지게 웃으면서 개발함ㅋㅋㅋㅋ (0) | 2023.05.01 |
Day 28. 계속해서 익숙해지는 수 밖에 없지 (0) | 2023.04.30 |