😀
Hyune's Wiki
  • Welcome
  • Article
    • Link
  • Mentor & Code Reviewer
    • 진행하기에 앞서..
    • Code Review History
      • 한방 쿼리 vs 애플리케이션에서 조립
      • DB에서 TIMESTAMP와 DATETIME 타입의 차이
      • Service는 어떤 dto를 반환해야 할까?
        • 확장 질문
  • Legacy
    • 실무 경험 & 팁
      • Kotlin
        • 파일 조작하기
      • Infra
        • Lightsail
          • 인스턴스 구성 예제
        • 공인 ip 확인하기
      • Database
        • INSERT INTO SELECT SHARED LOCK(row LOCK)
      • API Document
        • OpenAPI (Swagger 3.0)
          • 정적 문서 내보내기
      • Side Project
        • Codesquad
      • ETC
        • HTTP Request 추적하기 with HAR File
    • Study
      • Language
        • Java
          • Copy
          • 메모리 관리
          • Garbage Collection
          • 자료구조
          • Java 17
        • Kotlin
          • Coroutine
      • Framework & Library
        • Spring
          • Spring Security
          • @Component vs @Configuration
        • JPA
          • show-sql 설정의 단점
          • @GeneratedValue strategy
          • Entity의 field type
        • Logback
          • 기본 설정
        • Monitoring
          • VisualVM
            • 설치
            • 문자열 생성으로 테스트
          • nGrinder
      • Database
        • MySQL
          • SQL 문 수행 절차
          • 트랜잭션과 잠금
          • 인덱스
      • Infra
        • AWS
          • S3
            • 용어
            • Amazon SDK 1.x with Spring
          • DynamoDB
            • Get vs Query vs Scan
        • Docker & Kubernetes
      • Computer Science
        • OS
          • Process vs Thread
          • Process
        • Web
          • HTTP
            • HTTP vs HTTPS
            • HTTP 구성
            • HTTP 그외
          • REST API
            • GET 메서드에 payload를 사용해도 되는가?
            • 특정 목적의 API는 어떻게 만들어야 할까?
          • TCP / UDP
          • 인터넷의 작동 원리
          • OAuth 2.0
        • Design Pattern
          • Builder Pattern
        • MSA
        • DDD
      • Test
        • Test Doule
      • Book & Online Class
        • 한 번에 끝내는 Spring 완.전.판 초격차 패키지 Online
          • AOP, Aspect Oriented Programming
          • Data Binding
          • IoC(Inversion of Control), DI(Dependency Injection)
          • Null Safety
          • Spring Resource
          • Spring Boot 버전별 변화
          • SpEL, Spring Expression Language
          • Validation
        • 이펙티브 자바 3판
          • 2장 객체 생성과 파괴
            • 아이템 1. 생성자 대신 정적 팩터리 메서드를 고려하라
            • 아이템 2. 생성자에 매개변수가 많다면 빌더를 고려하라
            • 아이템 3. private 생성자나 열거 타입으로 싱글턴임을 보증하라
            • 아이템 4. 인스턴스화를 막으려거든 private 생성자를 사용하라
            • 아이템 5. 자원을 직접 명시하지 말고 의존 객체 주입을 사용하라
            • 아이템 7. 다 쓴 객체 참조를 해제하라
          • 3장 모든 객체의 공통 메서드
            • 아이템 11. equals를 재정의하려거든 hashCode도 재정의하라
            • 아이템 12. toString을 항상 재정의하라
            • 아이템 14. Comparable을 구현할지 고려하라
          • 4장 클래스와 인터페이스
      • Webinar
        • 요즘 힙한 스타트업의 DBDB DEEP한 이야기
Powered by GitBook
On this page

Was this helpful?

Edit on GitHub
  1. Legacy
  2. Study
  3. Infra
  4. AWS
  5. S3

Amazon SDK 1.x with Spring

Amazon SDK 2.x 버전이 존재하지만 'Amazon S3 전송 관리자, Amazon SQS 클라이언트 측 버퍼링' 등 일부 기능이 제한되어 있습니다.

AmazonS3 Bean 설정

@Configuration
@RequiredArgsConstructor
public class AmazonS3Beans {

	public static final Regions CLIENT_REGION = Regions.AP_NORTHEAST_2;

	@Value("${cloud.aws.credentials.accessKey}")
	private String accessKey;

	@Value("${cloud.aws.credentials.secretKey}")
	private String secretKey;

	@Bean
	public AmazonS3 amazonS3() {
		final BasicAWSCredentials credentials = new BasicAWSCredentials(accessKey, secretKey);
		return AmazonS3ClientBuilder.standard()
				.withCredentials(new AWSStaticCredentialsProvider(credentials))
				.withRegion(CLIENT_REGION)
				.build();
	}
}
  • AWS 접근 방법을 하나로 통일시키기 위해 bean으로 설정할 수 있습니다.

    • 하나의 애플리케이션에서 복수 개의 AWS 접근 방법이 있다는 건 이상합니다.

PutObjectRequest 생성

protected PutObjectRequest createRequest(final String objectKey, final File file, final CannedAccessControlList cannedAclHeader) {
	final PutObjectRequest request = new PutObjectRequest(bucketName, objectKey, file);
	request.setMetadata(ObjectMetadataType.getMetadata(file));
	request.withCannedAcl(cannedAclHeader);

	return request;
}
  • object를 저장하기 위한 PutObjectRequest 생성을 위해 4가지가 필요합니다.

    • bucketName 대상 버킷 이름

    • objectKey 고유 식별자

    • file 대상 파일

    • cannedAclHeader 공개 범위

    • metadata 메타 데이터

      • Content-Type file이 아닌 stream으로 업로드 하는 경우 application/octet-stream가 지정됩니다.

PutObject - 객체 저장

public PutObjectResult putObject(final PutObjectRequest request) {
	try {
		return amazonS3.putObject(request);
	} catch (final SdkClientException e) {
		log.error(e.getClass().getName(), e);
		throw EXCEPTION_AMAZON_S3_UPLOAD_FAIL.get();
	}
}
  • PutObjectResult는 활용하지 않았습니다.

    • 기대한 api들이 없었습니다.

Previous용어NextDynamoDB

Last updated 3 years ago

Was this helpful?

Working with object metadata - Amazon Simple Storage ServiceAmazon Simple Storage Service
Logo