본문 바로가기

Laravel Blog

Back) Laravel AWS S3와 연결해 이미지 업로드하기 - 1. 설정

반응형

 

안녕하세요 주갬입니다.

 

 

저는 포스팅 에디터로 summernote를 사용하려고 찾아보던 중 서머노트의 이미지 업로드 방식은 base64 방식으로 인코딩되어 DB부하가 걸리기 쉽다는 사실을 알게 되었습니다.

 

그래서 더 좋은 방법이 없을까 찾아보던 중 이미지를 인코딩 없이 S3 버킷에 업로드한 후 불러오는 방식으로 구현한다면 좀 더 효율적이지 않을까 싶어 summernote와 S3를 연결해보려고 합니다.

 

이번 시간에는 사전 환경 구축에 대해서만 다루고 다음시간부터 본격적인 연동 작업을 보여드리도록 하겠습니다.

  1. php73 artisan storage:link 실행
  1. laravel에 league/flysystem-aws-s3-v3 설치
  1. AWS 콘솔에서 S3버킷 생성 & 키 생성
  1. laravel .env파일에 나의 S3버킷 정보 입력

을 해줘야 합니다.

 

  1. php73 artisan storage:link를 실행하면

다음과 같이 링크가 생성됩니다. 

 

2. laravel에 league/flysystem-aws-s3-v3 설치

composer require league/flysystem-aws-s3-v3

명령어를 사용해 laravel과 S3연동에 필요한 패키지를 설치해 줍니다.

이 설치 과정에서 이슈가 하나 발생했는데요,

 

또 왜그래 컴포저야,,ㅎ

 

검색 끝에 다행히 stackoverflow에서 이유를 찾아냈습니다!!!

이유는 league/flysystem v2 가 글 작성 시점으로부터 5개월 밖에 안된 따끈한 패키지여서

 spatie/laravel-backup 패키지와 호환이 안되어 발생하는 문제였습니다.

 

league/flysystem-aws-s3-v3:"^1.0"

명령어로 1.0 구 버전을 설치하는 것으로 문제를 해결했습니다!!

 

따봉 구선생아 고마워!

 

 

 

3. AWS 콘솔에서 S3 버킷 생성 & 생성

AWS management console에 들어가 S3버킷을 생성합니다.

버킷을 만들 때 버킷명(S3 명)을 지정해 주고 나서 퍼블릭 엑세스 차단해제해줍니다. 퍼블릭한 접근을 허용해 준다는 뜻이겠죠? 이 두가지 설정을 제외하고는 다음만 계속 누르시면 됩니다.

 

 

 

퍼블릭 읽기 권한을 추가 하기 위해 이어서 권한 편집을 해보도록 하겠습니다.

 

권한 탭에 들어가서 ACL(엑세스 제어 목록) 을 편집합니다.

퍼블릭 엑세스 부분에 읽기 권한을 추가해줍니다.

 

 

버킷 정책을 편집해보겠습니다.

Add Statement 를 누르면 다음과 같이 Policy에 대한 요약이 생성되고 Generate Policy를 누르면 편집된 json을 확인할 수 있습니다.

 

위 내용으로 편집을 했을 때 오류가 난다면 아래 내용과 같이 "Resource"의 끝부분에 /* 를 넣어주시면 됩니다.

 

 

 

 

그리고 '내 보안 자격 증명' 에 들어가 IAM키를 만들어 줍니다.

AWSAccessKeyId, AWSSecretKey 두 가지를 다음 단계에서 사용하게 됩니다.

 

 

 

4. laravel .env파일에 나의 S3버킷 정보 입력

 

/config/filesystems.php은 파일 시스템에 대한 설정들을 저장하고 있습니다.

...

's3' => [
            'driver' => 's3',
            'key' => env('AWS_ACCESS_KEY_ID'),
            'secret' => env('AWS_SECRET_ACCESS_KEY'),
            'region' => env('AWS_DEFAULT_REGION'),
            'bucket' => env('AWS_BUCKET'),
            'url' => env('AWS_URL'),
            'endpoint' => env('AWS_ENDPOINT'),
        ],
...

env파일에 자세한 내용을 담고 있네요!

 

...
AWS_ACCESS_KEY_ID= AKIAYM23OC5QYDDN3ECK
AWS_SECRET_ACCESS_KEY= ~
AWS_DEFAULT_REGION=ap-northeast-2
AWS_BUCKET= laravel-blog-yj
...

앞 단계에서 생성한 AWS 키와 리전, 버킷이름을 적어주었습니다.

AWS_SECRET_ACCESS_KEY 는 말그대로 본인만 알고 있어야하는 비밀키이므로 잘 관리하시기 바랍니다.

 

 

위와 같이 설정을 끝냈다면 다음 시간에는 연동이 잘 되고 있는지 확인해보록 합시다.

 
 

 

다음 블로그를 참조했습니다. 

https://jjong-factory.tistory.com/38

 

쫑 팩토리

개발, 맛집, 여행에 대한 정리!

jjong-factory.tistory.com

 

반응형