코드개선 과제(2)

정채림·2026년 3월 5일

Lv.3 N+1 문제

@EntityGraph(attributePaths = {"user"})
    @Query("SELECT t FROM Todo t ORDER BY t.modifiedAt DESC")
    Page<Todo> findAllByOrderByModifiedAtDesc(Pageable pageable);

    @EntityGraph(attributePaths = {"user"})
    @Query("SELECT t FROM Todo t WHERE t.id = :todoId")
    Optional<Todo> findByIdWithUser(@Param("todoId") Long todoId);

Lv.4 테스트코드 연습

문제: 파일경로에 한글이 들어있어서, 테스트 코드가 정상적으로 실행되지 않았다.
해결: 해당 프로젝트 폴더를 영어명으로만 된 폴더 루트로 옮겨 해결하였다.

  • 4-1: PasswordEncoderTest는 matches의 인자 순서가 잘못되었다. 그래서 rawPassword와 encodedPassword의 위치를 바꿔주었다.

  • 4-2: 1번 케이스는 메서드 명과 Equals안의 expect문을 수정해주면 되었다.
    2번 케이스는 ServerException을 InvalidRequestException으로 수정해주면 되었다.
    마지막으로 3번 케이스는 서비스 로직에 todo user가 null이거나 일정을 생성한 유저 인지를 검증하는 로직을 추가하면 되었다.
    검증 로직

if (todo.getUser() == null || !Objects.equals(todo.getUser().getId(), user.getId())) {
            throw new InvalidRequestException("일정을 생성한 유저만 담당자를 지정할 수 있습니다.");
        }

0개의 댓글