본문 바로가기

개발 일지

[TIL] 사이드 프로젝트 52일차

 

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 공부