Fullstack-Study-241204-250625

커리큘럼(12-30/변경)

01. Java
02. git
03. Database 
04. Jsp [Server]

05. HTML,CSS 
07. JS
06. 미니프로젝트-2W

08. SpringFramework , SrpingBoot 
19. 중간프로젝트 (1M)
10. Linux 명령어
11. AWS(v)
12. React JS [Front-end]
13. DevOps - Docker
14. App - Android
15. 최종프로젝트 (1M)

AWS

AWS S3(Simple Storage Service)

버킷

버킷 생성 및 파일 업로드 시나리오

  1. 버킷 생성
  2. 이름은 모든 AWS상에서 고유하며 특정 리전에 생성
  3. 나머지 옵션은 default로 생성
  4. 버킷이 생성되면 파일을 드래그앤드롭으로 업로드
  5. 상위 Open탭을 눌러 확인 (signature가 포함된 URL이 오픈됨)
  6. 객체 URL을 눌러 확인 (signature가 포함되지 않아 오픈되지 않음)

버킷 정책

정적 웹사이트 호스팅

  1. 속성 탭에 들어가서 가장 아래쪽에 정적 웹사이트 호스팅 활성화
  2. 인덱스 문서를 작성
  3. index.html파일을 이제 업로드 해주면 됨
  4. 정적페이지의 엔드포인트로 접속

S3의 버전관리

  1. 속성탭에 버전관리 활성화

CORS 관리

Access-Control-Allow-Origin: 요청을 허용할 서버명 or *
Access-Control-Allow-Method: GET, POST, PUT, DELETE

자바와 S3스토리지 연결

//버킷목록확인하기> 
public void getBucketList() {
    //자격증명
    S3Client s3 = S3Client.builder()
            .region(Region.AP_NORTHEAST_2)
            .credenti> alsProvider(ProfileCredentialsProvider.create()) //유저폴더/.aws/credentails파일을 읽음
            .build();

    //버킷목록
    ListBucketsResponse response = s3.listBuckets();
    List<Bucket> bucketList = response.buckets();
    for (Bucket bucket: bucketList) {
        System.out.println("Bucket name "+bucket.name());
    }
}
//버킷에 업로드하기
public void uploadBucket(MultipartFile file) {
    String filename = file.getOriginalFilename();
    System.out.println( "한글: " + filename);
    //자격증명
    S3Client s3 = S3Client.builder()
            .region(Region.AP_NORTHEAST_2)
            .credentialsProvider(ProfileCredentialsProvider.create()) //유저폴더/.aws/credentails파일을 읽음
            .build();
    String bucketName = "sws-project"; //버킷명
try {
    Map<String, String> metadata = new HashMap<>(); //파일의 대한 정보
    metadata.put("author", "Mary Doe");
    metadata.put("version", "1.0.0.0");
    PutObjectRequest putOb = PutObjectRequest.builder()
            .bucket(bucketName) //버킷명
            .key(filename) //올릴파일명
            .metadata(metadata) //메타데이터
            .contentType(file.getContentType() ) //데이터에 대한 컨텐츠타입 (지정하지 않으면, 기본타입으로 지정됨)
            .build();
    s3.putObject(putOb, RequestBody.fromBytes( file.getBytes() ) );
    System.out.println("Successfully placed " + filename + " into bucket " + bucketName);
} catch (Exception e) {
    System.err.println(e.getMessage());
    //System.exit(1);
}

}

public void list_bucket_objects() {
    //자격증명
    S3Client s3 = S3Client.builder()
            .region(Region.AP_NORTHEAST_2)
            .credentialsProvider(ProfileCredentialsProvider.create()) //유저폴더/.aws/credentails파일을 읽음
            .build();
    String bucketName = "sws-project";

    try {
        ListObjectsV2Request listReq = ListObjectsV2Request.builder()
                .bucket(bucketName)
                .maxKeys(1)
                .build();
        ListObjectsV2Iterable listRes = s3.listObjectsV2Paginator(listReq);
        for(S3Object content : listRes.contents() ) {
            System.out.println("Key: " + content.key() + " size = " + content.size());
        }
    } catch (S3Exception e) {
        System.err.println(e.awsErrorDetails().errorMessage());
    }
}
public void delete_bucket_object(List<String> bucket_obj_name){
    //자격증명
    S3Client s3 = S3Client.builder()
            .region(Region.AP_NORTHEAST_2)
            .credentialsProvider(ProfileCredentialsProvider.create()) //유저폴더/.aws/credentails파일을 읽음
            .build();

    String bucketName = "sws-project";
    List<ObjectIdentifier> keys = new ArrayList<>();
    ObjectIdentifier objectId;

    for (int i = 0; i < bucket_obj_name.size(); i++) {
        String keyName = bucket_obj_name.get(i);
        objectId = ObjectIdentifier.builder()
                .key(keyName)
                .build();
        keys.add(objectId);
    }
    System.out.println(keys.size() + " objects successfully created.");

    // Delete multiple objects in one request.
    Delete del = Delete.builder()
            .objects(keys)
            .build();

    try {
        DeleteObjectsRequest multiObjectDeleteRequest = DeleteObjectsRequest.builder()
                .bucket(bucketName)
                .delete(del)
                .build();
        s3.deleteObjects(multiObjectDeleteRequest);
        System.out.println("Multiple objects are deleted!");
    } catch (S3Exception e) {
        System.err.println(e.awsErrorDetails().errorMessage());
        System.exit(1);
    }
}