내배캠 TIL 43일차

오병택·2025년 4월 17일

내배캠

목록 보기
65/73

한줄 요약

Spring 심화 3주차 완강 및 과제 lv3까지 완

Spring 심화 3주차

주말에 안 쓰면 나는 바보다 월요일: 나는 바보다🤪


Refactor-Test

이번 과제는 코드 개선과 테스트 코드를 시도하여 코드를 효율적으로 검증하고, 핵심 비즈니스 로직을 깔끔하게 관리하는 방법을 익히는 시간입니다.

필수 기능

Lv1 코드 개선

1-1 코드 개선 퀴즈 - Early Return

조건에 맞지 않는 경우 즉시 리턴하여, 불필요한 로직의 실행을 방지하고 성능을 향상

요구사항

  • 드래그한 코드의 위치를 리팩토링

1-2 리팩토링 퀴즈 - 불필요한 if-else 피하기

복잡한 if-else 구조는 코드의 가독성을 떨어뜨리고 유지보수를 어렵게 만듬

요구사항

  • 불필요한 else 블록을 없애 코드를 간결하게 하기

1-3 코드 개선 퀴즈 - Validation

요구사항

  • 드래그한 부분을 UserChangePasswordRequest Dto에서 직접 구현하기

Lv 2. N+1 문제

  • TodoControllerTodoService를 통해 Todo 관련 데이터를 처리
  • 여기서 N+1 문제가 발생할 수 있는 시나리오는 getTodos 메서드에서 모든 Todo를 조회할 때, 각 Todo와 연관된 엔티티를 개별적으로 가져오는 경우이고 현재 특정 기능을 활용해서 N+1 발생을 방지한 상태

요구사항

  • JPQL 특정 기능을 사용하여 N+1 문제를 해결하고 있는 TodoRepository가 있습니다. 해당 Repository가 어떤 기능을 활용해서 N+1을 해결하고 있는지 분석 해보세요.
  • 이를 동일한 동작을 하는 @EntityGraph 기반의 구현으로 수정해주세요.

원래 코드

@Query("SELECT t FROM Todo t LEFT JOIN FETCH t.user u ORDER BY t.modifiedAt DESC")
    Page<Todo> findAllByOrderByModifiedAtDesc(Pageable pageable);

수정 코드

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

Lv 3. 테스트코드 연습

3-1 테스트 코드 연습 (예상대로 성공하는지에 대한 케이스)

요구사항
matches메서드가정상적으로_동작한다() 테스트가 의도대로 성공할 수 있게 수정해 주세요.

3-2.1 테스트 코드 연습 (예상대로 예외처리 하는지에 대한 케이스)

요구사항
manager목록조회시_Todo가없다면NPE에러를_던진다() 테스트가 성공하고 컨텍스트와 일치하도록 테스트 코드와 테스트 코드 메서드 명을 수정해 주세요.

3-2.2

요구사항
comment등록할일을찾지못해에러가_발생한다() 테스트가 성공할 수 있도록 테스트 코드를 수정해 주세요.

3-2.3

요구사항
todo의user가_null인경우예외가발생한다() 테스트가 성공할 수 있도록 서비스 로직을 수정해 주세요.

느낀 점

이번 과제는 그전과는 달리 난이도가 쉬워서 여유로운 느낌이였다. 도전 부분은 제대로 안 봐서 모르겠지만 내일 도전하는 것으로 하겠습니다. 오늘도 컨디션이 좋지는 않았지만 그래도 열심히 했으니 만족합니다.🙌

profile
걱정하지 말고 일단 해봐!

0개의 댓글