Loading...
본문 바로가기
👥
총 방문자
📖
0
총 포스팅
🧑
오늘 방문자 수
📅
0일째
블로그 운영

여러분의 방문을 환영해요! 🎉

다양한 개발 지식을 쉽고 재미있게 알려드리는 블로그가 될게요. 함께 성장해요! 😊

🏫 인프라

[Alibaba] Spring+OSS 설정하기

by tmi-t 2025. 10. 19.

 

 

 

저는 Alibaba 중문 사이트를 사용하였습니다!!

 

우선 Object Stoage Service페이지로 이동해서  Bucket을 생성해줍니다.

 

 

스샷을 못했는데 설정하는 칸에서는 

Encryption Method 영역에서 OSS-Managed로 변경하는게 전부였습니다. (OSS에서 기본적으로 AES256암호화를 적용한다고 합니다.

 

Spring

 

*의존성 추가

implementation 'com.aliyun.oss:aliyun-sdk-oss:3.17.4'

 

*설정 코드

@Configuration
public class OssConfig {
    @Value("${oss.endpoint}") String endpoint;
    @Value("${oss.accessKeyId}") String keyId;
    @Value("${oss.accessKeySecret}") String keySecret;

    @Bean(destroyMethod = "shutdown")
    public OSS ossClient() {
        return new com.aliyun.oss.OSSClientBuilder().build(endpoint, keyId, keySecret);
    }
}

 

*서비스 코드

public String upload(String keyPrefix, MultipartFile file) {
        try (InputStream in = file.getInputStream()) {
            // 업로드될 키(버킷 내부 경로) 생성
            String safeName = java.util.Objects.requireNonNullElse(file.getOriginalFilename(), "file");
            safeName = safeName.replaceAll("[\\r\\n]", ""); 
            String key = String.format("%s/%s_%s",
                    keyPrefix, java.util.UUID.randomUUID(), safeName); // 예: uploads/uuid_name.png

            // 메타데이터(길이/타입 지정 권장)
            com.aliyun.oss.model.ObjectMetadata meta = new com.aliyun.oss.model.ObjectMetadata();
            meta.setContentLength(file.getSize());
            if (file.getContentType() != null) meta.setContentType(file.getContentType());
            meta.setHeader("x-oss-server-side-encryption", "AES256");

            oss.putObject(bucket, key, in, meta);
            return key;
        } catch (IOException e) {
            throw new RuntimeException("Failed to upload to OSS", e);
        }
    }

 

Upload메소드를 통해서 자유롭게 업로드가 가능합니다.

 

 

 

 

 

 

 

 

bucket-name은 자기가 설정한 이름 그대로 입력하면 되고

 

endPoint는 overview들어가면 나와있어요 

 

 

밑에 이렇게 3개가 나와있는데 

 

  1. Access Over Internet은 로컬 개발 PC, Git 등 외부에서 접근할 때 사용
  2. Access from ECS over the VPC는 같은 VPC안에 있을 때 내부망을 이용해서 통신
  3. Acess from ECS over the classic Network는 래거시 환경에서만 사용가능하다고 하는데 요즘은 잘 안쓴다고 합니다.

 

추가로 몇 가지 서비스 코드를 더 보여드리고 마치겠습니다

 

1. 다운로드 URL을 받는 코드입니다. minutes변수를 통해서 시간을 조절할 수 있습니다.

public URL presignedGetUrl(String key, int minutes) {
        java.util.Date exp = new java.util.Date(System.currentTimeMillis() + minutes * 60_000L);
        com.aliyun.oss.model.GeneratePresignedUrlRequest req =
                new com.aliyun.oss.model.GeneratePresignedUrlRequest(bucket, key, com.aliyun.oss.HttpMethod.GET);
        req.setExpiration(exp);
        return oss.generatePresignedUrl(req);
    }

 

 

2. bucket에 실제로 파일이 있는지 확인하기 위한 메소드 입니다.

public boolean isFileExist(FileAttachment file) {
        boolean result = oss.doesObjectExist(bucket, file.getPath());
        log.info("object isExist:{}",result);
        return result;
    }

 

 

3. 파일을 가져오기 위한 메소드 입니다.

public OSSObject getObject(FileAttachment file){
        log.info("getting object...");
        return oss.getObject(bucket, file.getPath());
    }