조급하면 모래성이 될뿐

S3 파일 업로드 본문

TroubleShooting/데브코스

S3 파일 업로드

Pawer0223 2022. 7. 11. 01:44

무엇 ?


  • 영화 정보를 등록할 때, 포스터 이미지를 로컬서버가 아닌 AWS S3에 저장하기

 

왜 ?


  • EC2에 파일을 저장하는것보다 효과적이기 때문에 S3에 분리해서 저장한다.
    • 메모리 공간이나, 파일관리도 S3를 사용하는 것이 더 유용하다.
    • S3 특징

 

어떻게 ?


참조1

 

여기가 그나마 신뢰할 수 있다. 구글에서 1페이지에 포스팅된글은 다 봤는데 버킷 생성하는 부분을 설명한데가 한군데도 없어서 화딱지가 난다. 

 

버킷 정책을 편집해서 Json을 가져다 붙이는데, 왜 붙이는지 설명한곳이 한군데도 없다. 더군다나 이렇게 적용해도 안된다.

없어도 잘 된다.

 

 

1. S3 버킷을 생성한다.

  • 처음에 객체 소유권에서 ACL을 활성화 하지 않았더니 SpringBoot에서 접근이되지 않았다.

  • 퍼블릭 액세스도 모두 풀어버린다.
    • 실제 서비스는 보안상 모두 차단하는 것이 좋다.
    • 그래서 처음에 다 차단하고 시도했는데.. 계속 막혀서 일단 차단을 푼 버킷으로 다시 만들었다.

버킷 생성은 끝이다.

 

다음으로 SpringBoot에 S3에 접근하기 위한 의존성 추가해서 사용하면 된다.

 

처음에 아래 의존성이 계속 추가가 안됐다 ㅡㅡ..

 

하루종일 삽질하면서 이것저것 다 시도해봤는데 이유는 아직도 못찾았다..

프로젝트를 새로만들고 저 implementation을 적용하니깐 또 그 프로젝트에서는 잘 받아지더라..

그래서 저장소를 다시 clone받아서 해결했다...

 

* 계속 안되던 프로젝트는 build.gradle을 지워도 External Libraries가 안지워지고.. 추가해도 추가가 안됐다..

 

    implementation 'org.springframework.cloud:spring-cloud-starter-aws:2.2.6.RELEASE'

 

추가하고 application.yml에 s3정보를 입력해준다. 아래 정보가 중요하다.

  • 버킷 이름
  • region
  • access-key
  • secret-key

access-key하고 secret-key는 s3에 접근 가능한 IAM 사용자의 정보이다. AmazonS3FullAccess 권한을 가진 사용자를 새롭게 만들면 access-key, secret-key가 발급되고 그 정보를 기입해주면된다.

 

그리고 2개의 key는 노출되면 안되니깐 별도로 분리해서 github에는 푸시하지 않는다.

 

key정보 분리하기 위해서 yml을 분리했다. 분리한 yml은 .gitignore에 등록해주었다.

이 블로그를 참조해서 설정하자

 

배포 후, ec2접속해서 직접 application.yml에 2개의 key정보를 수기로 입력해주었다.

 

S3접속하기 위한 코드는 여기서 그대로 가져다썼다.

 

반응형