본문 바로가기
Spring Boot (프로젝트)

[스프링 부트] 프로젝트 6 S3 백엔드 구현

by Hoozy 2023. 4. 17.

이전 게시글 프로젝트 5

https://hoozy.tistory.com/entry/%EC%8A%A4%ED%94%84%EB%A7%81-%EB%B6%80%ED%8A%B8-%ED%94%84%EB%A1%9C%EC%A0%9D%ED%8A%B8-5-S3-%EA%B4%80%EB%A0%A8-%EC%84%A4%EC%A0%95-%EC%B6%94%EA%B0%80

 

[스프링 부트] 프로젝트 5 S3 관련 설정 추가

이전 게시글 프로젝트 4 백엔드 구현 https://hoozy.tistory.com/entry/%ED%94%84%EB%A1%9C%EC%A0%9D%ED%8A%B8-4-%EB%B0%B1%EC%97%94%EB%93%9C-%EA%B5%AC%ED%98%84 회원의 프로필 사진을 EC2 인스턴스에서 업로드 하고 다운로드 하기

hoozy.tistory.com

기존 프로젝트에서 S3와 연결을 위한 클래스 추가와 기존 엔티티 변경

MySQL 관련 엔티티 변경

  • 기본에는 모든 PK인 @Id 어노테이션에 @GeneratedValue 어노테이션의 GenerationType을 AUTO로 자동으로 설정해주도록 하였다.
    • DDL-AUTO가 UPDATE여서 알아서 해주었지만, EC2 인스턴스에서는 UPDATE가 불가능했다.
  • 따라서 DDL-AUTO를 none 으로 바꾸고(기존 테이블이 있고, 지식 데이터를 넣어야 하기 때문에), mysql 테이블의 PK(int 형 PK)에 AUTO_INCREMENT 를 넣어서 자동으로 테이블 마다 1씩 늘어나게 만들었다.
  • 이에 따라서 자바의 엔티티에도 AUTO 대신 GenerationType을 IDENTITY로 바꿔줘서 MySQL의 AUTO_INCREMENT와 같게 만들어 줘서 에러가 안나게 했다.

  • 위의 이미지처럼 되어있던 AUTO를 아래 이미지처럼 IDENTITY로 바꿨다.

S3 연결을 위한 클래스 추가

  • 추가하기 전에 기존 회원의 프로필 사진 변경 및 회원가입할 때 default.png 파일을 위한 코드로 바꿨다. (UserController)
  • 아래 이미지에서 처럼 회원가입 할 때 프로필을 S3에 올린 default.png의 URL을 DB에 넣는다.

  • 이후 회원 변경에서는 변경한 이미지를 업로드 후 S3 이미지의 URL을 가져와서 DB에 넣는다.
  • 만약 이전 이미지가 default.png가 아닐 경우, 기존 이미지를 S3에서 삭제하고 바꾼 이미지의 URL을 DB에 넣는다.
  • uploadFile(file, "static"); -> S3의 static 폴더 안에 이미지를 업로드 한다는 의미.

1. S3 기본 설정 클래스

  • application.yml 에서 작성한 액세스 키, 비밀 액세스 키, 지역(서울) 을 가져와 변수로 선언한다.
  • amazonS3Client 메소드는 S3에 접근하기 위한 사용자 설정이다. -> S3FullAccess를 가지면 접근 가능.

2. S3 파일(이미지) 업로드 후 URL 가져오는 클래스

  • uploadFile 메소드는 유저가 변경한 이미지와 "static" 폴더 경로를 가져와서 File 객체로 바꾼 후 upload 메소드로 보내준다.
  • upload 메소드는 File 객체의 파일을 putS3 메소드로 보내 업로드 후 로컬 이미지를 삭제한 후 반환된 URL을 반환하는 메소드이다.
  • putS3 메소드는 File 객체를 S3에 직접 업로드하고 반환 값인 URL(이미지 URL)을 문자열로 바꿔서 반환하는 메소드이다.

  • removeNewFile 메소드는 S3에 이미지를 업로드 할 때 로컬(EC2 인스턴스에서 .jar 파일 실행한 폴더)에 이미지를 저장하는데 이 저장한 파일은 쓸모가 없으니 삭제하는 메소드이다.
  • convert 메소드는 MultipartFile(유저가 바꾼 이미지 파일 객체)를 받아서 File 객체로 변환 후 반환하는 메소드이다.

참고 자료

https://europani.github.io/aws/2022/03/03/004-spring-s3.html

댓글