최길중 KPT 회고(Problem 위주)

최길중·2026년 2월 26일

✏️ 1. Problem 코드

// 쿼리 파라 미터 조회
    @Transactional(readOnly = true)
    public GetAdminListResponse getAllAdmins(String keyword, Integer page, Integer size, String sortBy, String sortDir, String role, String status) {
        int safePage = (page == null || page < 1) ? 1 : page;
        int safeSize = (size == null || size < 1) ? 10 : size;

        Sort.Direction dir = "desc".equalsIgnoreCase(sortDir) ? Sort.Direction.DESC : Sort.Direction.ASC;
        String safeSortBy = (sortBy == null || sortBy.isBlank()) ? "createdAt" : sortBy;

        AdminRole roleEnum = (role == null || role.isBlank()) ? null : AdminRole.valueOf(role);
        AdminStatus statusEnum = (status == null || status.isBlank()) ? null : AdminStatus.valueOf(status);

        Pageable pageable = PageRequest.of(safePage - 1, safeSize, Sort.by(dir, safeSortBy));

        Page<Admin> pageResult = adminRepository.findAllAdmins(keyword, roleEnum, statusEnum, pageable);

        return GetAdminListResponse.from(pageResult);
    }
    
     // 관리자 리스트 조회 전용
    @Query("""
                select p from Admin p
                where p.deletedAt is null
                  and (:status is null or p.status = :status)
                  and (:role is null or p.role = :role)
                  and (:keyword is null or :keyword = ''
                       or lower(p.name)  like lower(concat('%', :keyword, '%'))
                       or lower(p.email) like lower(concat('%', :keyword, '%')))
            """)
    Page<Admin> findAllAdmins(
            @Param("keyword") String keyword,
            @Param("role") AdminRole role,
            @Param("status") AdminStatus status,
            Pageable pageable
    );

✏️ Problem으로 느낀 이유

완전 이해를 못하고 거의 따라 적는 수준으로 작성 했습니다. 그래서 어떤식으로 돌아가는지 잘 모르고 JPQL에 대해 공부가 더 필요할 것 같습니다. 코드 참조는 https://kjw81024.tistory.com/55 여기서 참조 하였습니다.


✏️ 2. Problem 코드


 @SQLDelete(sql = "UPDATE admins SET deleted = true, deleted_at = NOW() WHERE id = ?")
@SQLRestriction("deleted = false")

    @Column(name = "deleted_at")
    private LocalDateTime deletedAt;
    

✏️ Problem으로 느낀 이유

soft delete에 대해 잘 몰랐었는데 이번 Q&A를 준비하면서 공부를 많이 하다보니 이제 좀 많이 알 것 같습니다. 처음에는 왜 이런식으로 적는지 잘 몰랐는데 공부를 하면서 JPA, Hibernate 에 대해서도 많이 알게 되었습니다. 그래도 많이 몰랐던 부분이니 Problem코드에 추가 하였습니다.


🚀 Try — 다음 프로젝트에서 시도해보고 싶은 것, 개선하고 싶은 방향

✏️ Try 내용 작성란

  • JWT와 Spring Security에 대한 이해를 보완해, 토큰 발급·검증 흐름부터 필터 체인 구성, 예외 처리까지 내가 직접 설계하고 구현해보는 경험을 쌓고 싶습니다.
  • 요청이 어떤 필터를 거쳐 어느 지점에서 차단되는지 내가 직접 확인할 수 있도록 로깅 전략을 설계·적용하고, “토큰 없음/만료/서명 오류/권한 부족” 같은 케이스별로 로그와 응답이 의도한 대로 나오는지 내가 직접 테스트하고 점검해보고 싶습니다.
profile
취준생

0개의 댓글