💨 S3 연동하기
아마 S3관련해서 글을 보다가 넘어왔을 확률이 높다고 생각한다. 혹여 혹시라도 그런게 아니라면 이전의 글에서 S3를 등록하는 방법도 적어놓았으니 한번 보고오는것도 좋을것 같다
🗃 S3 사용해보기
💬 S3가 뭘까??파일 저장 서비스를 제공하는 S3는 사진이나 동영상 같은 다양한 파일을 저장할 수 있다. 마치 iCloud같은 것이라고 생각해보면 된다 왜 S3를 사용하는 걸까?우리가 서비스를 구성하
latewalk.tistory.com
1. Depency 추가
implementation 'org.springframework.cloud:spring-cloud-starter-aws:2.2.6.RELEASE'
2. yml 혹은 properties 설정
- IAM : 우리가 s3를 설정하면 IAM에 권한을 만들어주었을텐데 그 accessKey와 Private key를 입력하면 된다
- region : 우리의 s3가 저장되어 있는 위치이다. 저긴 서울이다
- s3.bucket : 그냥 bucket을 로직단에 적으면 좀 그러니까 설정창에서 만져준다
3. Config 설정
s3를 config로써 연동해주는 것을 볼 수 있다. s3Client 메소드를 요약하자면
- BasicAWSCredentials : AWS 자격증명을 생성한다
- AWSStaticCredentialsProvider : AWS 자격 증명 공급자를 설정한다
- S3 클라이언트가 사용할 AWS 리전을 설정한다
- 위의 설정을 총합해서 AmazonS3 클라이언트를 생성하고 반환한다
이렇게 AmazonS3가 생성되고 다른 부분에서 S3 서비스와 상호작용할때 사용된다
3. upload 코드 설정
3 - 1. upload 메소드
- upload할 파일을 전체적으로 설정하고 어떤 이름으로 업로드 할지 설정한다
- uniqueFileName으로 uuid에 원래 파일이름적힌 것을 space되어 있는곳은 언더바 처리해서 이름을 저장한다.
3 - 2. convert 메소드
- 또다시 UUID를 통해 파일이름을 작성해주는 것으로 보인다 왜냐하면 여기서 사용하는 UUID는 파일 명을 생성해서 그걸 파일이름으로 사용하는 것이고
- 좀더 집중 할 부분은 File 객체를 생성하고 나서 부터이다
- createNewFile : 파일을 생성하는데 만약 이미 존재하면 false 없으면 true를 반환한다
- convertFile에 데이터를 복사하는 내용이다. 전달받은 파일을 바이트 단위로 써내려가는데 이때 BufferedOutputStream으로써 작성하면서 성능을 향상한다
- try-with-resources 구문을 사용해서 자동으로close()를 구현하여 자원이 끝나면 자동으로 닫힌다
3 - 3. putS3 메소드
- 여기서 UUID를 작성하고 뒤에 파일이름을 왜 두 번이나 반복하는지에 대한 내용이 나온다.
- 1. 처음에 만든 UUID는 파일명은 S3에 저장할 파일 명이다.
- 2. convert에서 만드는 UUID는 데이터를 저장할 파일명이다.
- 왜 굳이 2개나 만들어야하는걸까? 왜 convert작업이 필요할까?
중간단계에서 파일을 검수하기 위해 사용되는데 지금은 그냥 파일을 복사하는 수준으로 멈추지만 나아가 파일을 따로 우리가 원하는 검수작업을 진행할 수 있기 때문이다.
- PutObjectRequest를 통해 어떤 버킷에 어떤 이름으로 어떤 파일을 올릴것인지 정하고 puObject를 통해 파일을 업로드한다
- 그리고 getUrl을 통해 내가 원하는 파일의 Url을 따서 사용자에게 전달할 수 있다.
3 - 4. removeNewFile 메소드
- S3를 사용하면 굳이 로컬에 파일을 남겨둘 필요가 없다. 때문에 지워준다.
- File의 delete메소드를 보내면 해당 파일을 지울 수 있다.
3 - 5. Controller의 uploadImage메소드
- 간단하게 어떤 파일을 받은지 받고 dirName에 어떤 폴더로 전달할지 적어주는 것이다.
💨 S3 연동한 결과
- 보이는 것처럼 postman을 통해 이미지를 등록하는 과정을 거쳐보자
- 이렇게 잘 저장된것을 확인할 수 있다.
'AWS' 카테고리의 다른 글
🗃 S3를 이용한 정적 웹 사이트 호스팅 그리고 CloudFront(feat. CDN) - 2부 (0) | 2024.06.08 |
---|---|
🗃 S3 사용해보기(1부) (1) | 2024.06.08 |
🗃 VPC를 활용해서 RDS를 연결해보자 (0) | 2024.06.07 |
🗃 ELB를 통해 HTTPS 설정하기 (0) | 2024.06.06 |
🗃 도메인 구성 DNS, 그리고 Route 53 (0) | 2024.06.06 |