TIL/Project

TIL 2024-11-20 (todo-log 2일차)

myoma 2024. 11. 20. 22:33

1 ) 프로젝트 진행도

  • 피드(feed) CRUD
    • 피드 생성
    • 피드 조회
      • 단건 조회
      • 전체 조회
    • 피드 수정
    • 피드 삭제 (2일차)
  • 친구 관리 기능
    • 팔로우 기능
    • 팔로워 목록 조회
    • 팔로잉 목록 조회
    • 언팔로우
    • 팔로잉의 게시글 조회
      • 생성순
  • 업그레이드 뉴스피드 기능
    • 전체 피드 수정순으로 조회
    • 좋아요 순으로 조회
    • 날짜별 기간 검색 기능

  • 뉴스피드 CRUD 기능구현
    • 게시물 작성
    • 게시물 조회 (단건, 전체)
    • 게시물 수정 (조건 확인)
    • 게시물 삭제 (조건 확인)

  • 협업 프로젝트 진행을 하며 느낀 점.
    • 서로 역할 분담을 하였어도 필요한 클래스와 필드들이 있기에 누군가는 작업이 멈추는 상황 발생.
    • 역할 분담을 잘 하였어도 이 문제는 완벽하게 해결되지 않을 것 이라고 생각.

 

  • 뉴스피드 CRUD 기능 구현 
    • 뉴스페드 조회 기능 Pageable 사용
    • 문제 발생
      • 페이징 조회를 하니 Join했던 User 데이터 또한 같이 조회.
      • User에는 Password가 있기에 같이 조회되면 안됌.
    • 문제 해결책
      • 페이징 조회할 시 Feed 필드에서 User 데이터를 제외한 나머지 필드들만 선택하여 조회하기

 

  • 시도 했던 방법 .1
return feedRepository.findAll(pageable).getContent().stream().map(FeedResponseDto::feedDto).toList();
  • 여기선 한 줄 밖에 없지만 리턴 타입이 List<Feed>라 return 실패.
  • 반환 타입과 리턴 타입이 맞지 않아 에러 발생.
  • 다른 방법을 몰색하려고 했으나 stream()에 대한 이해도 부족.

 

  • 시도 했던 방법 .2
    • 튜터님의 도움을 받아 새로운 방식으로 접근.
 public List<FeedResponseDto> findFeedByPageRequest(Pageable pageable) {

        List<FeedResponseDto> feedResponseDtoList = new ArrayList<>();
        Page<Feed> feedPage = feedRepository.findAll(pageable);
        List<Feed> feedList = feedPage.getContent();
        // Feed에서 User 객체를 제외하고 나머지 필드들만 불러와서 반환.

        for (Feed feed : feedList) {
            
            feed.setUser(null)
            
            );
            
            feedResponseDtoList.add(feedResponseDto);
        }
        return feedResponseDtoList;
}
  • feed Entity에 User을 setUser 메서드를 만든 후 메서드에 null 값을 집어넣은 뒤 새로 만든 리스트에 feedResponseDto를 넣어주면 User : null 로 나오며 데이터는 지켜주지만 조회 시 User : null 이라고 나오는 것 또한 좋지 않다.

 

  • 시도 했던 방법 .3
 public List<FeedResponseDto> findFeedByPageRequest(Pageable pageable) {

        List<FeedResponseDto> feedResponseDtoList = new ArrayList<>();
        Page<Feed> feedPage = feedRepository.findAll(pageable);
        List<Feed> feedList = feedPage.getContent();
        // Feed에서 User 객체를 제외하고 나머지 필드들만 불러와서 반환.

        for (Feed feed : feedList) {
            //FeedResponseDto에 Feed 필드를 넣는다.
            FeedResponseDto feedResponseDto = new FeedResponseDto(
                    feed.getId(),
                    feed.getUser().getNickname(),
                    feed.getTitle(),
                    feed.getDetail(),
                    feed.getCreatedAt(),
                    feed.getUpdatedAt()
            );
            feedResponseDtoList.add(feedResponseDto);
        }

        return feedResponseDtoList;
}
  • 새로운 feedResponseDto를 만들어 feed의 필요한 필드들만 get으로 가져와 데이터를 집어넣은 뒤 add로 List에 데이터를 넣어준다.
  • 결과는 매우 성공적.
  • 본 결과에 도달하기까지 튜터님의 페이징 설명과 코딩 공부법과 여러 팁들을 알려주셨다.
    • 시간이 걸리더라고 하나씩 뜯어가며 확인할 것
    • 내가 구현하고자 하는 기능, 목표를 주석으로 써놓고 계속 생각할 것
    • 코드를 간략화 하는 것은 내가 먼저 작성한 코드를 100% 이해한 다음에 할 것
    • 일단 어떠한 방식으로든 목표를 달성할 것

 

 

'TIL > Project' 카테고리의 다른 글

[KPT 회고록] (project : todo-log)  (0) 2024.11.25
TIL 2024-11-21 (todo-log 3일차)  (0) 2024.11.21
TIL 2024-11-19 (todo-log)  (1) 2024.11.19
Trouble Shooting ( Calender_JPA)  (0) 2024.11.15
Trouble Shooting ( 일정 관리 앱)  (0) 2024.11.08