Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[BE] feat: Uploaded 상태로 오래되거나 Abandoned 상태의 UploadFile을 삭제하는 기능 추가 (#956) #957

Merged
merged 4 commits into from
May 15, 2024

Conversation

seokjin8678
Copy link
Collaborator

@seokjin8678 seokjin8678 commented May 10, 2024

📌 관련 이슈

✨ PR 세부 내용

Uploaded 상태로 오래되거나 Abandoned 상태의 UploadFile을 삭제하는 기능을 추가했습니다.

파일을 삭제할 때 S3Client.deleteObject() 메서드를 사용하지 않고 S3Client.deleteObjects() 메서드를 사용했습니다.

이유는 파일을 삭제할 때, 요청을 한 번씩 여러 번 보내는 것 보다, 한 번의 요청으로 모든 파일을 삭제하는 것이 효율적이라고 판단했습니다.

그에 따라 실패한 요청이 있을 수 있으므로 에러가 있는지 확인하고, 에러가 있으면 로그를 남기는 식으로 구현했습니다.
(FCM과 비슷하네요. Javadoc에 that if the object specified in the request is not found, Amazon S3 returns the result as deleted 라는 내용이 있습니다. 따라서 권한 문제가 아니라면 에러가 날 일이 있을까 싶네요 😂)

파일을 삭제하면, DB 데이터도 당연히 삭제를 해야하는데, JPA의 Query Creation 기능을 사용하지 않고, @Query 어노테이션을 사용하여 JPQL로 작성했습니다.

이유는 Query Creation 기능을 사용하면 in절로 사용을 했다고 생각했지만, delete 쿼리가 별도로 날아갑니다..!

image

이에 대한 자세한 내용은 동욱님 블로그 참고하시면 될 것 같습니다.

덤으로 바로 List<UploadFile> 타입을 넘길 수 있어서도 있습니다. 😂

그 외 삭제할 대상을 찾기 위해 findByCreatedAtBetweenAndStatus(), findByCreatedAtBeforeAndStatus() 메서드가 생겼습니다.

해당 메서드는 ANSI 표준을 따르므로 비즈니스 로직이 쿼리에 의존적이지 않기 때문에 굳이 실제 MySQL 구현체를 사용한 통합 테스트를 진행하지 않고, 메모리를 사용한 단위 테스트로 진행했습니다.

실제 파일이 삭제되는지, 테스트 코드로 확인이 불가능하기에 요청을 직접 날려봤는데, 우선 삭제는 잘 됩니다.

image

머지 되고나서, 개발 환경에 제대로 삭제가 되는지 테스트가 필요합니다!

@seokjin8678 seokjin8678 added BE 백엔드에 관련된 작업 ADMIN 📬 API API가 변경되거나 추가되는 작업 🏗️ 기능 기능 추가에 관한 작업 labels May 10, 2024
@seokjin8678 seokjin8678 self-assigned this May 10, 2024
@github-actions github-actions bot requested review from BGuga, carsago and xxeol2 May 10, 2024 19:12
Copy link

Test Results

230 files  230 suites   28s ⏱️
761 tests 761 ✅ 0 💤 0 ❌
780 runs  780 ✅ 0 💤 0 ❌

Results for commit f335668.

Comment on lines +31 to +33
@Modifying
@Query("delete from UploadFile uf where uf in :uploadFiles")
void deleteByIn(@Param("uploadFiles") List<UploadFile> uploadFiles);
Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

관련 글 찾아보니 deleteAllInBatch()도 같은 역할을 하던데, 해당 메서드를 구현해서 사용하면 예외가 발생하더라구요.
아마 구현을 Repository 타입으로 해서 그런건가 싶기도 합니다.
(deleteAllInBatch()JpaRepository 인터페이스에 작성되어 있네요)

@seokjin8678
Copy link
Collaborator Author

리뷰 기간이 지났기에 머지 처리 하도록 하겠습니다!

@seokjin8678 seokjin8678 merged commit 13f7318 into dev May 15, 2024
9 checks passed
@seokjin8678 seokjin8678 deleted the feat/#956 branch May 15, 2024 13:37
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
ADMIN BE 백엔드에 관련된 작업 🏗️ 기능 기능 추가에 관한 작업 📬 API API가 변경되거나 추가되는 작업
Projects
None yet
Development

Successfully merging this pull request may close these issues.

[BE] Uploaded 상태로 오래되거나 Abandoned 상태의 UploadFile을 삭제하는 기능을 추가한다.
1 participant