OAuth를 만들 때는 @Value를 사용하여 주입 해주었으나 해당 방법은 불변이 아닌 데다, 타입 안정성이 보장되지 않는 문제가 있다고 한다.
물론 @ConfigurationProperties를 사용하는 방식도 불변도 아니고 Setter가 공개되어 있어 값이 변경 될 수도 있다. 하지만 @ConstructorBinding과 함께 활용한다면 final 필드에 대해 값을 주입해주기 때문에 불변성을 보장하고 Setter 없이 값을 매칭할 수 있다.
@ConfigurationProperties와 @ConstructorBinding을 함께 사용하기 위해서는 ...
@ConfigurationProperties 사용을 하는 클래스인 AwsProperties는 자동으로 Spring bean을 생성해주지 않기 때문에 @EnableConfigurationProperties를 사용하여 생성할 Properties 클래스의 클래스 타입을 명시해줘야 한다.
AwsProperties 값 중 static이 Java 내부의 예약어이기 때문에 변수명을 statics으로 추가 기입
3. AwsS3Service 클래스 - 이미지 저장하는 비즈니스 로직 구현
확장성을 위해 StorageService라는 인터페이스를 만들어 AwsS3Service 클래스에서 상속해 주었음
참고
upload() 메서드에 있는 Tika
아파치 티카는 csv, pdf 등 다양한 형태의 파일 메타 데이터와 텍스트를 감지하고 추출해주는 라이브러리이다.
해당 라이브러리를 통해 입력받은 파일의 미디어 타입을 추출하여 올바른 파일 형식인지 판단하는 checkMimeType()을 호출해주고, 보낼 metadata에 추출한 미디어 타입을 set 한다.
metadata에 미디어 타입을 설정하지 않으면, S3 저장소에 파일이 저장될 때 기본 Content-Type인 application/octet-stream으로 저장이 되어 저장 경로를 접근했을 때, 웹에 파일이 출력되는 것이 아닌 파일이 곧바로 다운로드가 돼버린다.
업로드가 가능한 서비스와 컨트롤러 만들기
ImageTestService 및 StorageTestController 생성(추후 클래스 위치는 다시 고민 해봐야 할듯)
*서버 실행 전
.env
파일에 S3 버킷 관련 설정 추가 해주어야 합니다!AWS S3을 사용하는 방법
1. AWS S3 사용하기 위한 의존성 추가
2.
AwsProperties
객체 만들기@Value
를 사용하여 주입 해주었으나 해당 방법은 불변이 아닌 데다, 타입 안정성이 보장되지 않는 문제가 있다고 한다.@ConfigurationProperties
를 사용하는 방식도 불변도 아니고 Setter가 공개되어 있어 값이 변경 될 수도 있다. 하지만@ConstructorBinding
과 함께 활용한다면 final 필드에 대해 값을 주입해주기 때문에 불변성을 보장하고 Setter 없이 값을 매칭할 수 있다.@ConfigurationProperties
와@ConstructorBinding
을 함께 사용하기 위해서는 ...@ConfigurationProperties
사용을 위한 의존성 추가@ConfigurationProperties
사용을 하는 클래스인AwsProperties
는 자동으로 Spring bean을 생성해주지 않기 때문에@EnableConfigurationProperties
를 사용하여 생성할 Properties 클래스의 클래스 타입을 명시해줘야 한다.AwsProperties
값 중static
이 Java 내부의 예약어이기 때문에 변수명을statics
으로 추가 기입3.
AwsS3Service
클래스 - 이미지 저장하는 비즈니스 로직 구현StorageService
라는 인터페이스를 만들어AwsS3Service
클래스에서 상속해 주었음upload()
메서드에 있는Tika
checkMimeType()
을 호출해주고, 보낼 metadata에 추출한 미디어 타입을 set 한다.업로드가 가능한 서비스와 컨트롤러 만들기
ImageTestService
및StorageTestController
생성(추후 클래스 위치는 다시 고민 해봐야 할듯)업로드 테스트 하기
현재 기능에서 더 필요한 부분
참고 사이트