이전 포스팅을 읽지 않으신 분들은 반드시 이전 포스팅의 내용을 숙지하고 아래의 내용을 읽어주세요.
>> 이전 포스팅
S3를 스프링 부트에서 사용하려면 AWS 계정의 액세스 키와 비밀 키를 사용하여 인증해야 한다. 이러한 액세스 키와 비밀 키는 AWS IAM(Identity and Access Management)을 통해 발급받을 수 있다.
① AWS에 접속한 후 IAM 서비스로 들어간다.
② IAM의 좌측 메뉴 > 사용자를 클릭하고 사용자 추가를 눌러준다.
③ 아래와 같이 입력하고 다음을 눌러준다.
④ 직접 정책 연결을 선택한다.
⑤ 권한 정책에서 S3를 검색한 후 AmazonS3FullAccess를 체크한다.
⑥ 선택사항은 모두 건너뛰고 사용자 생성을 눌러주면 된다.
⑦ 방금 생성한 사용자를 클릭한 후 보안 자격 증명 메뉴로 들어간다. 스크롤을 조금만 내려 액세스 키 만들기를 눌러준다.
⑧ 본인의 필요에 맞게 선택한다. 여기서는 일단 AWS 외부에서 실행되는 애플리케이션을 선택하기로 한다.
⑨ 설명 태그는 선택사항이니 넘어가주도록 한다.
⑩ .csv파일을 다운로드 받는다. 이 때가 아니면 다시는 볼 수 없으니 다운을 받거나 복사해두어야 한다.
이로써 Access Key와 Secret Key의 발급이 모두 완료된다.
S3의 secret key가 외부에 노출되지 않도록 주의해야 한다. 블로그에 업로드하거나, github에 yml 파일을 함께 업로드 할 경우, 해킹의 대상이 될 수 있다. 주로 해당 아이디로 비트 코인을 채굴한다고 하는데, 이로 인해 해당 아이디의 주인은 막대한 요금을 지불해야 할 수도 있는만큼 주의해야 할 부분이다. (물론, AWS에서 유출을 자동으로 감지하여 알아서 Blocking 해주긴 하지만, 사용자가 직접 주의하는 것이 제일 좋다.) 비단 S3의 secret key 뿐 아니라, EC2의 프라이빗 IP, RDS의 엔드포인트 및 비밀번호 등도 외부에 유출되지 않도록 주의해야 한다.
.yml은 아래와 같이 작성되어야 한다. 아래에 {AccessKey}와 {SecretKey}라고 되어있는 부분에 ⑩번에서 생성한 access-key와 secret-key 값을 넣어주어야 한다.(중괄호는 넣지 않는다. 구분을 위해 작성된 것이다.)
spring:
servlet:
multipart:
max-request-size: 30MB
max-file-size: 30MB
datasource:
url: jdbc:mysql://{RDS엔드포인트}:3306/{초기데이터베이스 이름}?userSSL=false&useUnicode=true&serverTimezone=Asia/Seoul&autoReconnect=True
username : root
password : {비밀번호}
driver-class-name: com.mysql.cj.jdbc.Driver
jpa:
show-sql: true
generate-ddl: true
hibernate:
ddl-auto: create
properties:
hibernate:
format_sql: true
cloud:
aws:
s3:
bucket: {버킷이름}
region:
static: ap-northeast-2
stack:
auto: false
credentials:
access-key: {AccessKey}
secret-key: {SecretKey}
① @Value
② @Bean
※ @Configuration
이 어노테이션이 클래스에 적용되면, 해당 클래스는 스프링의 설정 파일 역할을 수행한다. 스프링은 @Configuration 어노테이션이 적용된 클래스를 스캔하여 컨테이너에 등록되는 빈(Bean) 설정 정보로 사용한다.
③ AmazonS3
④ AWSCredentials 객체
⑤ AmazonS3ClientBuilder
이번 시간에는 S3관련 설정에 대해서 다루어 보았다. 다음시간에는 S3에 대한 Service와 Repository, Controller에 대한 코드를 배워보기로 하자.