20211125 TIL - JPA를 곁들인 테이블 조인을 해보자

오랜만에 돌아온 TIL

이번 3차 프로젝트는 Spring을 이용해서 프로젝트를 진행한다
Flask로 프로젝트를 진행할때와는 다르게 고민할게 엄청 많았다
테이블구성이나 테이블간의 조인같은 🤯🤯
테이블에서 어떤 컬럼을 쓸것인가 이런것은 사실 어렵지 않았는데
나의 가장 큰 문제는 바로 조인이었다
이것도 맞는것같고 저것도 맞는것 같은 🤑🤑

게시글과 댓글의 관계에서

가설1)
게시글 1개에 댓글 여러개가 달리니까 1 : N
게시글 입장에서 OneToMany로 해주면 되지 않을까

가설2)
댓글 여러개에 게시글 하나니까 N : 1
댓글 입장에서 ManyToOne

가설3)
게시글과 댓글 서로가 서로룰 알아야하니까 양방향 매핑을 해주자

상상의 나래를 혼자서 펼쳐나갔다 🤯🤯

사실 우리팀의 코드는 양방향 매핑으로 다 구현되어있었지만, 나도 해내고 싶었기때문에 꼭 꼭 성공하고자 하는 마음이 컸다

게시글 엔티티인 Article에는 댓글의 리스트인 List<Comment>를 만들어주고, 댓글 엔티티인 CommentArticle 객체를 만들어주고 get,post를 구현하고자 했다

우여곡절 끝에 구현은 성공했는데
api테스트를 해보면 댓글 안에 게시글 안에 댓글리스트 안에 또 댓글 안에...🙃😐

무한루프에 빠져 나올수가 없었다 😢😢

이미 48시간넘게 고통받고 있던 나는 구글링해서 해결 해야겠다라는 의지조차 없었고
더 단순하게 시작하기위해 게시글이 댓글리스트를 가지고 있는 형태로 구현하였다

게시글이 댓글을 아는 경우를 시도해보았는데 처음에는 생성만 되고 게시글과 연관지을 수 없어서 왜그럴까 생각했는데...
게시글한테 댓글 리스트를 추가해주지 않아서인것 같았다

CommentService에서 findById로 게시글의 아이디값을 찾고 게시글이 존재하면 새 댓글을 생성하고 저장해준 뒤 게시글이 가지고있는 commentList에 추가해주니까 내가 원하는 결과물이 나왔다!!!

    public Comment createComment(CommentRequestDto requestDto, Article article) {
        articleRepository.findById(article.getArticleId()).orElseThrow(
                () -> new NullPointerException("해당 아이디가 존재하지 않습니다.")
        );
        Comment comment = Comment.builder()
                .content(requestDto.getContent())
                .build();

        commentRepository.save(comment);
        article.getCommentList().add(comment);
        return comment;

    }

테스트 결과는 아래와 같다

내 코드가 정답은 아니겠지만 내가 해냈다는것이 엄청 기뻐서 테스트를 계속 해봤던것 같다 😆😆

구현되어있는 우리팀의 코드가 더 좋은코드인지 내가 짠 코드가 더 좋은 코드인지 지금 나에게 중요치는 않았다
나는 현업개발자가 아닌 배우는 과정이고, 캠프에 참여하는동안 이런 저런 우여곡절을 많이 겪어볼 수록 더 나은 개발자가 되거라 생각한다

양방향매핑을 해야하는가에 대해서는 아직 고민해보는 중이지만 뭔가 하나를 해내고나니까 다음것도 다 할 수 있을것만 같은 기분이 든다!!
어제 같은 문제로 골머리를 앓던 캠퍼분을 알게되었는데, 구현에 성공하였다는 엄청난 소식을 듣고 두배로 기뻤다 👏🏻👏🏻
피곤한 목요일에 너무나 행복하게 잠들 수 있을것 같은 밤이다 🤣🤣

마지막으로 어젯밤 큰 도움을 주신 튜터님 정말 감사드립니다 🙇🏻‍♀️🙇🏻‍♀️

좋은 웹페이지 즐겨찾기