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

feat: 영양사 이미지 압축 다운로드 #1175

Open
wants to merge 18 commits into
base: develop
Choose a base branch
from

Conversation

songsunkook
Copy link
Collaborator

🔥 연관 이슈

🚀 작업 내용

  1. 영양사페이지에서 특정 기간동안 업로드된 식단 이미지들을 압축하여 다운로드하는 기능을 구현했습니다.

💬 리뷰 중점사항

@songsunkook songsunkook self-assigned this Jan 16, 2025
@github-actions github-actions bot added the 기능 새로운 기능을 개발합니다. label Jan 16, 2025
Copy link

github-actions bot commented Jan 16, 2025

Unit Test Results

354 tests   353 ✔️  1m 31s ⏱️
  45 suites      1 💤
  45 files        0

Results for commit b4a339c.

♻️ This comment has been updated with latest results.

@songsunkook songsunkook added the Team Campus 캠퍼스 팀에서 작업할 이슈입니다 label Jan 16, 2025
Copy link
Contributor

@kih1015 kih1015 left a comment

Choose a reason for hiding this comment

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

잘개 쪼개진 커밋 + 함수 덕분에 빠르게 리뷰했습니다.

고생하셨어요~!

Comment on lines 28 to 34
// HTTP 응답 헤더 설정
HttpHeaders headers = new HttpHeaders();
headers.setContentType(MediaType.APPLICATION_OCTET_STREAM);
headers.add("Content-Disposition", "attachment; filename*=UTF-8''" + encodedFileName);
headers.add("Cache-Control", "no-cache, no-store, must-revalidate");
headers.add("Pragma", "no-cache");
headers.add("Expires", "0");
Copy link
Contributor

Choose a reason for hiding this comment

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

브라우저 캐싱을 허용하지 않은 이유가 있나요?

Copy link
Collaborator Author

Choose a reason for hiding this comment

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

다운로드 구현에 실패할 때 이것저것 시도하면서 들어갔는데 지금 다시 수정해보니 캐싱을 허용해도 잘 동작하네요.
캐싱 적용하겠습니다. 감사합니다!


private File generateZipFileOf(List<Dining> dinings) {
String bucketName = s3Utils.getBucketName();
File parentDirectory = new File("image-download", RandomStringUtils.randomAlphanumeric(6));
Copy link
Contributor

Choose a reason for hiding this comment

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

동시성 이슈를 이렇게 해결할 수도 있네요!
(매우 극악의 확률로 동시에 들어온 두 요청의 6자리 id값이 겹친다면..?)

Copy link
Collaborator Author

@songsunkook songsunkook Jan 17, 2025

Choose a reason for hiding this comment

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

단일 호출에서 동일한 값을 반환할 확률은 1/56,800,235,584 정도라고 합니다.(from. gpt)

이 기능을 사용하는 사용자는 현재로써 동시간에 1명뿐이라 괜찮지 않을까 생각합니다..!

+) 파일명이 겹쳐서 문제가 생기게 된다면 해당 파일명이 존재하는지 점검하는 로직을 추가하여 해소할 수도 있겠네요!

Comment on lines +320 to +324
public File generateDiningImageCompress(LocalDate startDate, LocalDate endDate, Boolean isCafeteria) {
validateDates(startDate, endDate);
List<Dining> dining = fetchDiningDataForImageCompress(startDate, endDate, isCafeteria);
return generateZipFileOf(dining);
}
Copy link
Contributor

Choose a reason for hiding this comment

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

기능 단위로 쪼개어 두고 무엇을 하는 코드인지 함수명으로 적절하게 명시를 해주어서 로직을 처음 접하는 입장에서도 흐름을 이해하기 편했습니다.

Copy link
Collaborator Author

Choose a reason for hiding this comment

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

감사합니다! ☺️

Comment on lines +392 to +394
public void removeDiningImageCompress(File zipFilePath) {
new Thread(() -> remove(zipFilePath.getParentFile())).start();
}
Copy link
Contributor

Choose a reason for hiding this comment

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

잔여 압축 파일 삭제를 비동기 처리하는 디테일.. 배워갑니다

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Team Campus 캠퍼스 팀에서 작업할 이슈입니다 기능 새로운 기능을 개발합니다.
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants