개인과제(54)
-
[Spring Plus] Level 2-3 요구사항 반영
'Level 2-3' 의 요구사항을 반영한 내용을 기록한 포스팅이다. 어떠한 생각과 과정을 통해 요구사항을 반영했는지 알 수 있도록 작성해 보았다. 0. 요구사항 현재 일정 조회(단건)시 사용되는 'TodoRepository' 인터페이스의 'findByIdWithUser()' 는 JPQL 을 사용해 DB 에서 정보를 조회하고 있다. 이제는 일정 조회시 QueryDSL 을 사용해 DB 에 일정 조회 쿼리를 날리는 방식을 사용할 수 있게 코드를 수정해야 한다. 1. QueryConfig 생성 우선 QueryDSL 을 사용하려면 'build.gradle' 의 'dependencies' 에 의존성을 아래와 같이 추가해 주어야 한다. 해당 부분은 프로젝트 초기 설정 당시 추가해둔 상태이다.implementati..
2024.11.15 -
[Spring Plus] Level 2-2 요구사항 반영
'Level 2-2' 의 요구사항을 반영한 내용을 기록한 포스팅이다. 어떠한 생각과 과정을 통해 요구사항을 반영했는지 알 수 있도록 작성해 보았다. 0. 요구사항 현재 API(GET /todos/{todoId}/comments) 요청시 발생하는 'N+1' 문제를 해결해야 한다. 1. 문제 원인 파악 우선 CommentService 클래스를 확인해보니 댓글 목록 조회에 사용되는 'getComments()' 를 확인하였다. 해당 메서드는 패스 파라미터로 전달받은 일정 ID 로 CommentRepository 인터페이스의 'findByTodoWithUser()' 를 호출해 반환받은 'List' 로 'List' 를 생성해 반환하고 있었다.@Service@RequiredArgsConstructor@Transac..
2024.11.14 -
[Spring Plus] Level 2-1 요구사항 반영
'Level 2-1' 의 요구사항을 반영한 내용을 기록한 포스팅이다. 어떠한 생각과 과정을 통해 요구사항을 반영했는지 알 수 있도록 작성해 보았다. 0. 요구사항 이전 개발자의 의도대로 일정 생성 요청시 요청 사용자가 자동으로 해당 일정의 매니저로 등록될 수 있도록 코드를 수정해야 한다. 여기서 말하는 '매니저 등록' 은 DB 의 MANAGERS 테이블에 매니저(일정 생성 사용자) 및 일정 정보가 반영되는 것을 말한다. 해당 문제 해결시 JPA 의 Cascade 를 활용해 보자. 1. 문제 원인 파악 프로젝트를 살펴보니 현재 일정 생성시 생성을 요청한 사용자(작성자)의 정보까지 포함해 일정을 생성하고 있다는 것을 확인했다. 하지만 아래와 같이 테스트를 위해 계속해서 일정을 추가했음에도 현재 MANAGE..
2024.11.14 -
[Spring Plus] Level 1-5 요구사항 반영
'Level 0-0' 의 요구사항을 반영한 내용을 기록한 포스팅이다. 어떠한 생각과 과정을 통해 요구사항을 반영했는지 알 수 있도록 작성해 보았다. 0. 요구사항 API(GET /todos) 요청시 검색 조건을 사용할 수 있도록 코드를 수정해야 한다. 사용할 수 있는 검색 조건은 '날씨, 수정 기간' 이다. 조건 중 '수정 기간' 은 특정 범위의 기간안에 수정된 일정들을 조회하기 위해 사용된다. 모든 검색 조건들은 있던 없던 요청이 수행될 수 있어야 한다. 즉, 요청에 모든 조건이 없을 수도 있고 날씨 조건만 있거나 수정 기간 조건만이 있을 수도 있다. 또한 모든 조건이 있을 수도 있다. 1. TodoController 수정 먼저 컨트롤러에서 검색 조건에 해당하는 값을 전달 받을 수 있도록 'TodoC..
2024.11.13 -
[Spring Plus] Level 1-4 요구사항 반영
'Level 1-4' 의 요구사항을 반영한 내용을 기록한 포스팅이다. 어떠한 생각과 과정을 통해 요구사항을 반영했는지 알 수 있도록 작성해 보았다. 0. 요구사항 테스트 패키지 'org.example.expert.domain.todo.controller.TodoControllerTest' 의 테스트가 실패하고 있다. 해당 테스트가 정상적으로 수행되어 통과할 수 있도록 테스트 코드를 수정해야 한다. 1. 문제 원인 파악 요구사항에서 말한 테스트는 일정 조회(단건)시 해당 일정이 존재하지 않는 일정일 경우의 응답을 확인하는 코드였다. 하지만 아래와 같이 어색한 부분이 보였는데 바로 'then' 부분의 응답 값을 확인하는 부분이었다.@WebMvcTest(TodoController.class)class Tod..
2024.11.13 -
[Spring Plus] Level 1-3 요구사항 반영
'Level 1-3' 의 요구사항을 반영한 내용을 기록한 포스팅이다. 어떠한 생각과 과정을 통해 요구사항을 반영했는지 알 수 있도록 작성해 보았다. 0. 요구사항 AOP 가 원래 의도와 다르게 잘못 동작하고 있다. 'UserAdminController' 클래스의 'changeUserRole()' 수행전 'AdminAccessLoggingAspect' 클래스의 'logAfterChangeUserRole()' 이 동작하도록 코드를 수정해야 한다. 1. 문제 원인 파악 현재 프로젝트의 'org.example.expert.aop.AdminAccessLoggingAspect' 클래스는 아래와 같다.@Slf4j@Aspect@Component@RequiredArgsConstructorpublic class Admi..
2024.11.12