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

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

by Hoozy 2023. 4. 17.

이전 게시글 프로젝트 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

 

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

다음 게시글 프로젝트 3 엔티티, 비밀번호 암호화 https://hoozy.tistory.com/entry/%ED%94%84%EB%A1%9C%EC%A0%9D%ED%8A%B8-3-%EC%97%94%ED%8B%B0%ED%8B%B0-%EB%A1%9C%EA%B7%B8%EC%9D%B8-%EB%B9%84%EB%B0%80%EB%B2%88%ED%98%B8-%EC%95%94%ED%98%B8%ED%99%9

hoozy.tistory.com

회원의 프로필 사진을 EC2 인스턴스에서 업로드 하고 다운로드 하기 위해서 S3를 활용하려고 했습니다.
기존 프로젝트 3까지 만든 프로젝트를 EC2 인스턴스에서 MySQL 연결과 S3 연결을 위해서 설정을 추가했습니다.

S3 버킷을 생성하기 전에 IAM 사용자 생성하기

  • AWS 서비스를 이용하려면 (EC2 제외) IAM 에서 사용자를 생성 후 사용자의 액세스 키를 사용하여 접근해야 사용할 수 있다.
  • AWS에서 IAM 검색 후 사용자 카테고리에서 사용자 추가 클릭.

  • 사용자 이름을 정하고 다음을 클릭

  • 권한 옵션은 직접 정책 연결을 누르고, 아래 권한 정책에 'S3'를 검색하여 AmazonS3FullAccess (말 그대로 S3에 관한 모든 권한) 체크 후 다음 누르고 생성 클릭.

  • 사용자의 보안 자격 증명으로 가서 스크롤 내린 후 액세스 키에서 액세스 키 만들기 클릭.

  • 액세스 키 사용은 AWS 컴퓨팅 서비스에서 실행되는 애플리케이션 (S3 등) 체크 후 아래 이해한 내용 동의 칸에 체크.

  • 다음을 클릭하면 액세스 키의 키 값이 2개 나오는데, 이 2가지 다 한 번 밖에 안나오므로 무조건 기억하고 있어야한다.
  • .csv 파일 다운로드를 지원하기 때문에 파일 다운로드로 키 2가지를 저장하고 완료를 누른다.

  • S3 버킷 생성하기

  • AWS에서 S3 검색 후 버킷 카테고리에서 버킷 만들기 클릭.

  • 버킷 이름에 이름을 적는데 중복이 되면 안된다.

  • 테스트 프로젝트에서는 퍼블릭 액세스 차단을 해제해서 편하게 접근하도록 한다.

  • 생성 후에 버킷을 클릭하면 객체 칸이 나오는데 이 객체는 폴더, 이미지 등 파일을 통틀어서 각자 객체라고 부른다.
  • 저는 여기서 회원가입하면 기본이미지로 쓰기 위해서 default.png 를 기본 이미지로 업로드 했다.
  • 이처럼 기본적으로 필요한 이미지나 파일들은 아래 이미지의 업로드 버튼을 눌러서 업로드 하면 된다.

  • 이 버킷으로 접근하기 위해서 이 버킷의 권한을 수정해 준다.
  • 바로 아래 이미지가 권한(정책) 설정을 완성한 이미지이다.
  • 권한 생성은 아래 버킷 정책 오른쪽에 '편집' 버튼을 누른다.

  • 아래 이미지 에서 왼쪽 ARN을 복사 후에 오른쪽 정책 생성기를 클릭하자.

  • 이후 아래의 이미지처럼 페이지가 뜨는데 여기서 type of policy 는 S3, principal은 * (모두), ARN은 방금 복사한 ARN을 붙여 넣어주면 아래 Add Statement가 활성화되고, 클릭한다.

  • 클릭하면 아래 이미지 처럼 결과 내용이 나온다. 이후 Generate Policy 를 누른다.

  • 위의 Generate Policy를 누르면 아래 이미지와 같이 Policy 가 json 버전으로 나오는데 전체를 복사한다.

  • 복사한 json을 다시 정책 편집으로 와서 아래 정책에 붙여 넣어주고 오른쪽 아래에 변경 사항 저장을 클릭하면, 위의 완성한 이미지 처럼 퍼블릭 액세스 안내가 빨간색으로 뜨면 성공이다.

Application.yml 변경 (git.ignore 파일에 추가해서 git에 개인정보(S3 정보) 안올라가게 함)

  • EC2 인스턴스에서 설정한 mysql의 root 비밀번호로 mysql 연결을 설정하고, S3의 버킷, 액세스 키, 시크릿 액세스 키, DDL-AUTO 변경을 해주면 된다.
  • 기본 스프링부트 aplication 설정은 냅두고, S3 설정과 MYSQL 설정을 바꿔준다.
  • S3 설정 추가. (application.yml)
cloud:
  aws:
    stack:
      auto: false // CloudFormation을 통해 stack을 자동으로 지원하는 것을 꺼야 한다.
                     // 자세한 건 https://nearhome.tistory.com/117 참고.
    region:
      static: ap-northeast-2 // 서울
    credentials:
      access-key: // 위에서 생성한 사용자의 액세스 키
      secret-key: // 위에서 생성한 사용자의 비밀 액세스 키
    s3:
      bucket: // 위에서 생성한 S3 버킷 이름

// MySQL

datasource:
    driver-class-name: com.mysql.cj.jdbc.Driver
    url: jdbc:mysql://localhost:{설정한 포트(보통 3306)}/{EC2 인스턴스와 연결된 MYSQL의 스키마 이름}?createDatabaseIfNotExist=true&useUnicode=true&serverTimezone=Asia/Seoul
    username: root
    password: {EC2 인스턴스에서 MYSQL의 root에 설정한 비밀번호}
  jpa:
    database: mysql
    show-sql: true
    hibernate:
      ddl-auto: // create, none 두 가지 밖에 안된다.
                  // create : 테이블을 자동으로 생성한다.(JPA), none : 테이블 있는 거 그대로 쓸 때

다음 게시글 프로젝트 6

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-6-S3-%EB%B0%B1%EC%97%94%EB%93%9C-%EA%B5%AC%ED%98%84

 

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

이전 게시글 프로젝트 5 기존 프로젝트에서 S3와 연결을 위한 클래스 추가와 기존 엔티티 변경 MySQL 관련 엔티티 변경 기본에는 모든 PK인 @Id 어노테이션에 @GeneratedValue 어노테이션의 GenerationType을

hoozy.tistory.com

참고 자료

https://nearhome.tistory.com/117

댓글