항해-클론코딩 피드백 및 트러블슈팅

한동훈·2022년 8월 25일
0

항해99

목록 보기
25/29

피드백

1. 패키지 기능 구조에 대한 설계가 잘 못 되었다고, 아키텍쳐에 대한 이해도가 부족해 보인다고 하심
2. 자료형에 대한 고민이 부족해 보임, Long, float 등등....
구현할때 동영상을 찍어서 보여주고, 회원가입,로그인은 필요없다. 로그인 되어 있는 상태로 발표

트러블슈팅

1. 기능별로 나누고 계층별로 나누기

★원인:

  • 기존의 프로젝트에 패키지 구성에 깔끔하지 못하고, 찾고자 하는 데이터에 대한 정리가 잘 되지 않은 것을 느끼고, 프로젝트를 계속 진행하면서 패키지를 어떻게 구성할 것인가에 고민이 생겼다.
    프로젝트의 패키지 구성은 계층별, 기능별 구성으로 나눌 수 있다.
    ★해결방안 :
  • 클래스의 기능과 역할에 따라서 패키지를 구성하는 것이다. 예를 들어 Member의 정보를 관여하는 패키지를 구성한다면, member패키지 안에 domain, service, dto, repository가 포함되어 구성되게 된다.
    프로젝트가 커질수록 패키지 안의 클래스 수가 증가하기 때문에 기능별 구성이 재사용성이 좋고 Package Principle을 잘 지키기는 이점이 있어, 이러한 방식으로 정리를 하였음.

2. 좋아요 기능

★원인:

  • ERD를 참고하여 작성했지만 연관관계, oneTomany와 manyToOne에 대한 각각 이해가 부족해, 에러가 발생하였음
    ★해결방안
  • OneToMany(1 : N) 를 사용시 : 참조값 Like가 여러 movie에 적용된다 생각해 OneToMany를 적용시켜봄 ⇒ 연관관계 재확인 및 수정 후 재실행시 비디오 전체에 좋아요 카운트 증가
  • ManyToOne(N : 1) 사용 : 여러 movie를 좋아요 할 수 있고 고유 계정으로 하나의 영화에만 좋아요 가능 ⇒ 어떤 엔티티를 중심으로 상대 엔티티를 바라보느냐에 따라 다중성이 다른게 됨

3. Pagination시 nullpointException 발생

★원인:

  • JpaRepository를 상속받은 Repository는 페이징관련 Repository도 상속받아서 db에서 가져올때 페이징한 데이터를 분류해서 가져올 수 있다.
    하지만, Pageable만 사용했는데 이 Pageable만 사용했지 해당 분류내용을 지정하지 않았던 것이다.
    ★해결방안:

  • Pageable의 값을 지정해주기 위해 각 데이터값을 요청받음

  • 마지막으로 Repository에서도 정의 해주어야 한다. 그래야 해당데이터를 가져와서 분류해서 데이터를 전달해준다.

    @GetMapping("/video/pagination")
        public ResponseDto<?> getPaging(
                @RequestParam("page") int page,
                @RequestParam("size") int size,
                @RequestParam("sortBy") String sortBy,
                @RequestParam("isAsc") boolean isAsc
    
        ) {
            page = page - 1;
            return pagingService.getPagenation(page, size,sortBy,isAsc);
        }
    
    
    
    @Repository
    public interface VideoRepository extends JpaRepository<Video, Long> {
    
    Page<Video> findAll(Pageable pageable);

    }

profile
돌덩이

0개의 댓글