JPA(36)
-
[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 -
[Spring Plus] Level 1-2 요구사항 반영
'Level 1-2' 의 요구사항을 반영한 내용을 기록한 포스팅이다. 어떠한 생각과 과정을 통해 요구사항을 반영했는지 알 수 있도록 작성해 보았다. 0. 요구사항 기획자의 요청을 현재 프로젝트에 반영해야 한다. 전달 받은 요청은 JWT 에 사용자 닉네임 정보를 담아 프론트 쪽에서 이를 꺼내 화면에 보여주길 원한다는 것이다. 1. 사용자 닉네임 추가1-1. User 클래스 필드 추가 일단 JWT 에 사용자의 닉네임 정보를 담고 싶다면 User 클래스와 매핑된 테이블에 닉네임 정보를 가질 필드 및 컬럼을 아래와 같이 추가할 필요가 있다 생각했다.@Getter@Entity@NoArgsConstructor@Table(name = "users")public class User extends Timestamped..
2024.11.12