이노베이션 캠프 W5

KIM YOUJEONG·2022년 8월 24일
0

이노베이션 캠프

목록 보기
5/6

🗝️ API?


🗝️ Client와 Sever란 무엇인가?

Client 요청을 보내는쪽
Server 요청을 받고 데이터를 보내주는쪽


🗝️ WAS란 무엇인가? Web Server와 차이점은 무엇인가?


🗝️ HTTP 프로토콜이란 무엇인가?

Client와 Server가 데이터를 주고받기 위한 방식

CRUD method를 제공해준다
GET, POST, PUT, PATCH, DELETE


🗝️ RESTful API는 무엇인가?

REST를 잘 지켜서 설계된 API


🗝️ JPA 연관관계 맵핑


Join과 Fetch Join의 차이?

JOIN은 Key값만 가져오고!
FETCH JOIN은 전체를 가져온다고!


@ManyToOne @OneToMany로 셀프참조 했을때?

-> mappedby를 이용해 주인을 가려내자! 쓰면 주인 아님


@Entity List를 @OneToMany를 이용해 넣었다면 DB에는 어떻게 저장될까?

-> 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

단순하게 이해해본 stream

List<CommentDto> commentDtoList = commentList.stream()
									.map(c -> new CommentDto(c, +인자))
									.collect(Collectors.toList());

실제 동작하는 stream도 병렬로 일어나기 때문에 비슷하지 않을까 생각중

profile
공부합니다📚

0개의 댓글