1. 개발 진행 상황
- s3 업로드 에러 해결
- 빌드 -> 배포 (빌드 에러 해결)
2. 개발 중 발생한 이슈와 해결
1) permission denied
- 에러 메시지
handleIOException
java.io.IOException:Permission denied
- 원인
s3 를 이용한 이미지 업로드 코드를 Multipartfile로 받은 이미지를 File로 변환하여 저장하도록 코드가 작성됨
File로 변환할 때 임시로 로컬에 저장되는 코드였는데 여기서 발생한 에러였음
로컬에서는 발생하지 않았던 에러가 EC2서버에서 발생했는데 직접적인 원인은 EC2서버에 파일을 작성하는 권한이 없어서 발생한 것
- 해결
해결 방법은 EC2서버에서 파일 작성할 수 있는 권한을 주는 것과 코드를 수정하는 것 두 가지를 생각했는데
찾아보니까 굳이 로컬에 저장하면서 변환하는 이유가 없었던 것... 이번 에러도 처음 이미지 업로드 구현했을 때 다른 사람들이 하는 코드 이유는 모르지만 이게 맞는거겠지 하면서 따라했던 것...😂
이랬던 코드를
private Optional<File> convert(MultipartFile image) throws IOException {
File convertFile = new File(Objects.requireNonNull(image.getOriginalFilename()));
// 지정된 경로에 파일 생성
if (convertFile.createNewFile()) {
try (FileOutputStream fos = new FileOutputStream(convertFile)) {
fos.write(image.getBytes());
}
return Optional.of(convertFile);
}
return Optional.empty();
}
변환 없이 업로드 되도록 수정
private String putS3(MultipartFile uploadFile, String fileName, String fileType) throws IOException {
ObjectMetadata metadata = new ObjectMetadata();
metadata.setContentType(fileType);
metadata.setContentLength(uploadFile.getSize());
amazonS3Client.putObject(
new PutObjectRequest(bucket, fileName, uploadFile.getInputStream(), metadata)
.withCannedAcl(CannedAccessControlList.PublicRead) // PublicRead 권한으로 업로드(누구나 읽을 수 있음)
);
return amazonS3Client.getUrl(bucket, fileName).toString();
}
2) 빌드 에러
- 에러 jar SKIPPED
- 해결
인텔리제이 오른쪽 Gradle 탭 -> clean
bootJar
3. 오늘 한 일 / 회고
에러 해결로 3일정도 시간을 보냈다.
에러 자체가 문제가 아니고 에러 로그 보기 위한 과정, 젠킨스로 자동배포되어있는 부분을 잘 이해하지 못해서 배포에도 시간을 많이 썼다ㅠㅠ
기본기 잡고 개발(프로젝트)도 하고 하니까 이래저래 시간이 너무 빨리간다.
4. TO-DO LIST
- java 공부
'개발 일지' 카테고리의 다른 글
[WIL] 사이드 프로젝트 9주차(1월 16일 ~ 22일) (0) | 2023.01.16 |
---|---|
[WIL] 사이드 프로젝트 8주차(1월 9일 ~ 15일) (0) | 2023.01.09 |
[TIL] 사이드 프로젝트 51일차 (0) | 2023.01.05 |
[TIL] 사이드 프로젝트 50일차 (0) | 2023.01.04 |
[TIL] 사이드 프로젝트 49일차 (0) | 2023.01.03 |