본문 바로가기
T.I.L. :: Today I Learned/항해99 14기 본과정

Day 31. 연관관계야 나랑 그만 연관관계를 맺어보자~ plz🙏🏻

by DaSsom 2023. 5. 3.

지난 주 시험부터 나의 발목을 잡고 놔주질 않네 연관관계 ^^

미챠버리겠다. 오늘의 연관관계는!

 

게시물 - 댓글 - 좋아요 문제였다.

그냥 게시물 삭제? 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에 대한 미련 삭제..!!)