Client 요청을 보내는쪽
Server 요청을 받고 데이터를 보내주는쪽
Client와 Server가 데이터를 주고받기 위한 방식
CRUD method를 제공해준다
GET, POST, PUT, PATCH, DELETE
REST를 잘 지켜서 설계된 API
JOIN은 Key값만 가져오고!
FETCH JOIN은 전체를 가져온다고!
-> mappedby를 이용해 주인을 가려내자! 쓰면 주인 아님
-> DB에... 저장이 안 된다?
@ManyToOne으로 저장했을 때처럼 Key값만 넣어진다!
하지만 hibernate같은 ORM을 통해서 JAVA에서는 객체로 표현이 된다고~
JPA에서 양방향이더라도 DB에서는 단방향으로 표현된다!
@OneToMany를 쓰는 테이블은 연관 관계의 정보를 안 갖고있음
🔗참고
🔗참고
나는 댓글 기능 구현을 맡았는데
맡은 부분이 좁다보니
어떻게 구현을 해야 객체지향적일까?
이런 방식으로 하려면 구현하기 너무 어려워질까?
이부분은 보통 어떤 바아식을 많이 사용할까?
이런 식은 비효율적일까? 현업에서 잘 안 쓸까?
안 쓰면 왜 안 쓸까?
.
.
.
같은 고민들을 너~~무 많이 해서 오래 걸렸다.
그리고 12시간은 걸린 듯한 댓글 리스트 조회 방식!
Entity에서 원하는 정보만 뽑아 Dto 형태로 바꿔주는데
내가 구현한 댓글은 자기참조하는 무한계층형 댓글!
댓글 안의 대댓글까지 곧바로 Dto 형태로 바꿔줄 수 없는게 문제였다.
기능을 구현하기 위해 꼭 필요했던 부분이라 꼭 구현해야 했었다.
1차 완성
List<CommentResponseDto> responseDtoList = new ArrayList<>(); List<CommentResponseDto> temp = new ArrayList<>(); public List<CommentResponseDto> getLike(List<Comment> comments) { for(Comment comment : comments) { CommentResponseDto commentResponseDto = CommentResponseDto.builder() .comment(comment) .build(); responseDtoList.add(commentResponseDto); if(comment.getReplies().size() != 0) { getLike(comment.getReplies()); // 재귀함수로 replies 가 없는 comment 까지 들어가기 } int countLike = likeRepository.countByCommentCommentId(comment.getCommentId()); // 좋아요 개수 가져오기 CommentResponseDto commentResponseDto = CommentResponseDto.builder() // dto 로 바꾸기 .comment(comment) .countLike(countLike) .build(); if(comment.getReplies().size() != 0) { // 최하위 comment 만 수행 commentResponseDto.getReplies().addAll(temp); // temp List 를 dto 의 replies 에 새로 넣어주기 } temp.clear(); temp.add(commentResponseDto); // temp List 비우고 dto 넣기 if(comment.getParent() == null) { responseDtoList.addAll(temp); // 최상위 comment 일 경우에만 return 해줄 List 에 추가 } } return responseDtoList; }
오류가 있었다.
임시 리스트를 만들어서 최하위 댓글부터 바꿔주는 형태였는데
그냥 무시해버리는 부분이 생겨버렸다...!
그래서 생각을 바꿨다.
단순하게 이해해본 stream
List<CommentDto> commentDtoList = commentList.stream()
.map(c -> new CommentDto(c, +인자))
.collect(Collectors.toList());
실제 동작하는 stream도 병렬로 일어나기 때문에 비슷하지 않을까 생각중