서론Spring 심화과정의 첫 번째 프로젝트가 끝났습니다. 짧은 기간이었지만, 계획했던 기능을 1가지 제외하고 모두 구현을 해서 아쉽기도하지만 만족스러운 프로젝트였습니다. 본글에서는 프로젝트에서 제가 맡은 도메인의 트러블 슈팅에 대해서 정리하고자 합니다. 트러블 슈팅 1문제 발생 @EntityListeners(AuditingEntityListener.class)를 사용하여 Timestamped 클래스를 통해 생성 및 수정 시간 정보를 자동으로 관리하고, @MappedSuperclass를 통해 공통 매핑 정보를 자식 클래스에서 상속받아 사용하고 있었습니다. 그러나 updateBy와 deleteBy 필드가 업데이트되지 않는 문제가 발생했습니다. 문제 원인문제를 조사한 결과, @Column(updatabl..
til
프로젝트를 완료하고, 튜터님의 피드백을 받았습니다. 다양한 피드백 중 이번 일일 회고에서는 Pageable에 대한 피드백을 정리하고자 합니다. 기존 구현 방식 원래 프로젝트에서는 각 페이징 관련 정보를 RequestParam으로 개별적으로 받아와야 했습니다. 그리고 서비스 레이어에서 PageRequest를 사용하여 페이지 요청을 처리했습니다. 피드백 반영 및 개선 사항 튜터님께서 제안하신 개선 사항에 따라, 페이징 처리와 정렬을 Pageable 객체로 한 번에 받을 수 있도록 변경하였습니다. 이렇게 하면 코드가 더 간결해지고, 유지보수도 쉬워집니다.개선된 사항@PageableDefault 사용@PageableDefault 어노테이션을 사용하여 기본 페이지 크기와 정렬 기준을 설정합니다.이로 인해, 클라이..
서론현재 저희 프로젝트에서는 JWT 토큰을 통해 인증을 진행하고 있습니다. 이 과정에서 권한(role) 체크가 필요한데, 현재는 데이터베이스(DB)를 직접 조회하여 권한을 확인하고 있습니다. 모든 요청이 필터를 통해 처리되기 때문에, 지속적인 DB 조회는 성능 저하를 초래할 수 있습니다. 따라서 DB를 직접 조회하여 권한을 확인하는 대신, 사용자 정보를 인메모리 저장소인 Redis에 캐시하여 권한 체크를 빠르게 권한 체크를 수행할 수 있도록 구성하고자 합니다. [Redis] 인메모리 저장소와 redis란 무엇일까❓전통적으로 데이터는 관계형 데이터베이스(RDBMS) 시스템, 예를 들어 MySQL, MariaDB, Oracle과 같은 플랫폼을 통해 관리되었습니다. 이러한 데이터베이스는 파일 시스템(HDD,..
서론프로젝트 과정에서 Admin(Master, Manager) 생성을 처리하는 로직은 오직 Master 역할만 수행할 수 있습니다.http.authorizeHttpRequests((authorizeHttpRequests) -> authorizeHttpRequests.requestMatchers("/admin/**").hasAnyRole("MANAGER", "MASTER")); 현재 Spring Security 설정에서 /admin/** 경로에 대한 접근 권한을 MANAGER와 MASTER 역할을 가진 사용자에게 허용하고 있습니다. 즉, MANAGER 역할을 가진 사용자도 이 경로에 접근할 수 있지만, 실제로는 Master만이 매니저와 마스터를 생성할 수 있어야 합니다. 따라서 입력 DTO에 대한 ..