Spring Querydsl 과제 회고
- 할 일을 저장하는 API(/todos) 호출 시 Connection is read-only 에러가 발생.
- 정상적으로 할 일을 저장할 수 있도록 @Transactional 설정을 수정.
- 요구사항:
- User 테이블에 nickname 컬럼 추가 (중복 가능).
- JWT에서 nickname을 꺼내 프론트엔드에 전달.
- changeUserRole() 메서드 실행 전에 로그를 남기는 AOP 구현.
- AOP 클래스 AdminAccessLoggingAspect 수정 필요.
- todo_단건_조회_시_todo가_존재하지_않아_예외가_발생한다() 테스트 실패.
- 테스트가 정상적으로 통과하도록 수정.
- 할 일 검색 기능 확장:
- weather 조건으로 검색 (조건은 선택적).
- 수정일 기준으로 기간 검색 (기간 조건도 선택적).
- JPQL을 활용해 조건 처리.
- 할 일을 생성한 사용자가 자동으로 담당자로 등록되도록 cascade 설정.
- CommentController의 getComments() API에서 N+1 문제 발생.
- JPA fetch join을 사용하여 문제 해결.
- JPQL로 작성된 findByIdWithUser 메서드를 QueryDSL로 변경.
- N+1 문제 없이 데이터 조회 구현.
- 기존 Filter와 Argument Resolver 코드를 Spring Security로 변경.
- 기존 권한 및 접근 제어 로직 유지.
- JWT 기반 인증 방식 유지.
- 검색 조건:
- 제목 키워드 검색 (부분 일치).
- 생성일 범위 검색 (최신순 정렬).
- 담당자 닉네임 검색 (부분 일치).
- 검색 결과:
- 일정의 제목만 반환.
- 일정의 담당자 수와 댓글 개수 포함.
- 기능 요구사항:
- Projections를 사용해 필요한 데이터만 반환.
- 페이징 처리된 결과 반환.
[회고]
이번 코드는 기능 개선과 오류의 확인, 간단한 구현이 전부였다. 오히려 내용적인 부분보다는 이론적인 부분을 저오학히 알고 있는지를 확인하는 느낌이 강했던 것 같다. 다만 이번 과제를 하면서 느낀점이, 제대로 하고 있는가?라는 질문이 나왔던 것 같다.
현재까지는 이론을 듣고 그저 필요한 기능에 맞춰 구현했지만, 개발자의 필요한 능력은 팀플을 하면서 느낀바로는 문제 해결능력이었다. 더 효율적인 코드를 위해 앞으로의 유연한 확장을 위해 개발을 하는 것이 가장 큰 목표라고 느꼈으며, 코드를 짜는 것 자체는 상당히 중요한 건 맞지만 조금 보조적인 느낌이라고 느꼈다.
이렇게 생각하고 나니, 지금 제대로 학습을 하고 있는가?라는 생각이 들 수 밖에 없었다.
1. 왜 이걸 썼는가?
= 레디스는 빠르니까 데이터를 매핑해서 사용하거나 요청하는데 있어 조금이라도 더 속도가 빨라질 것 같아서 사용했다.
2. 레디스는 안정성이 떨어지는데 그 점은 괜찮은가?
= 안정성이 떨어지는 부분을 인지하고 있고 일시적으로만 저장될 데이터만 저장에 이용하였고 처리가 완전히 끝난 완전한 데이터만 Mysql로 저장했다.
지금까지는 이렇게 생각했다. 하지만 이건 내가 그나마 많이 사용한 기능이기에 부족하지만 이정도라도 답변이 가능했지만, 사실 생각지 못했던 marven gradle 중 왜 gradle을 사용했는가와 같은 답변에는 대답하기 힘들다는 생각이 들었다. 무엇보다 시간이 많이 없는 상태에서 어떻게 공부하는게 효과적인가 라는 질문이 계속 들었다.
이렇게 보니 앞으로의 최종 프로젝트에서 원래는 쿠버네티스, 엘라스틱서치와 같은 기능을 사용하려했지만, 과연 내가 이 기능의 이론이 아니라 정확히 이해하고 언제 사용해야하는지 그리고 각 단점을 어떻게 보완할지와 같은 질문에 대답할 수 있는가? 라는 질문도 생겼다.
"이론을 이해하고 적제 적소에 사용할 수 있는 능력, 그리고 각 기능의 단점을 보완하고 장점을 살려 문제를 해결하는 것"이게 현재까지 느끼는 개발자의 능력이었지만, 그저 코드만 짤 뿐이라면 위의 2개의 질문에 답할 수 없다.
과연 많은 기능을 포함한 프로젝트를 지금의 이해도로 만들어도 될까?
이론을 공부만 해서는 특정 상황을 질문을 하고 해결하라고 하면 답하기 힘들지 않을까?
그렇다면 어떻게 공부해야하는가, 아는 친구는 ORM의 작동 방식에 대해서도 상세히 알아야한다고 했다. 사실 자동으로 처리하니 그전까지는 ORM이 어노테이션을 이용해 자동으로 처리하는 것에 대해 아무생각이 없었다. 솔직히 여기까지 공부해야한다고? 생각이 들었다. 어떻게, 어디까지 공부해야하는걸까?
이 과제를 진행하면서 3가지가 가장 큰 고민이라는 생각이 든다.