프로젝트가 끝난 후, 자신이 경험한 내용을 Keep / Problem / Try 관점에서 돌아보며
성장 포인트를 발견하고, 다음 프로젝트에 개선 방향을 적용하기 위한 회고 문서입니다.
이번 프로젝트에서는, 개발자로서 여러분의 기술적 강약점을 뚜렷하게 도출해봅시다!
프로젝트 회고 TIL의 1차안이라고 생각하며, 다시 돌아보고 싶은 코드 구간을 뽑아보세요.
🔍 내가 작성한 코드 중 스스로 고민하고 리서치하여 작성한 코드, 노력한 결과가 잘 나타난 코드와 그렇게 생각한 이유를 적어보세요.
튜터님과 이야기나누고 싶은 코드가 여러 군데라면, 양식을 복사하여 작성하는 것도 좋습니다.
<aside> 1️⃣
✏️ Keep 코드
✏️ Keep 하고 싶은 이유
</aside>
<aside> 2️⃣
✏️ Keep 코드
✏️ Keep 하고 싶은 이유
</aside>
🔍 내가 작성한 코드 중 특히 구현하는데 힘들었던 부분, 또는 완성하고 나서도 고민이 되거나 만족스럽지 않은 코드가 있다면 작성해주세요. 어렵거나 아직까지 고민이 되는 이유를 작성해보세요.
<aside>
작성 TIP
Problem 코드 작성이 어렵다면, 프로젝트 기간 중 작성한 트러블슈팅 TIL을 참고해도 좋습니다!
</aside>
<aside> 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 여기서 참조 하였습니다.
</aside>
<aside> 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코드에 추가 하였습니다.
</aside>