본문 바로가기
컴퓨터

👨‍💻 [AWS] AWS 의 S3에 파일을 업로드 및 다운로드 하도록 클라이언트를 구현하는데, 개인 도메인을 S3 저장소와 연결해서 사용할 수 있을까요?

by 밝음의기둥 2025. 4. 1.
반응형

"이 포스팅은 쿠팡 파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받습니다."


👨‍💻 안녕하세요, 윌리 프로젝트의 윌리 입니다.

AWS 의 S3에 파일을 업로드 및 다운로드 하도록 클라이언트를 구현하는데, 개인 도메인을 S3 저장소와 연결해서 사용할 수 있는지 간략히 알아보았습니다.


질문 >

AWS 의 S3에 파일을 업로드 및 다운로드 하도록 클라이언트를 구현하는데, 개인 도메인을 S3 저장소와 연결해서 사용할 수 있을까요?

답변 >

개인 도메인을 AWS S3에 연결하여 파일 업로드 및 다운로드에 사용할 수 있습니다. CloudFront + Route 53을 활용하면 S3 버킷을 개인 도메인과 연결하여 HTTPS 지원과 성능 최적화를 할 수 있습니다.


🔹 목표

  1. MFC 클라이언트에서 개인 도메인을 통해 S3에 파일 업로드 및 다운로드
  2. S3 버킷의 퍼블릭 접근을 차단하고, CloudFront를 통해 안전하게 접근
  3. 개인 도메인을 CloudFront에 연결하여 HTTPS 지원

🔹 설정 방법

1️⃣ S3 버킷 생성

  • 버킷 이름: your-bucket-name
  • 퍼블릭 액세스 차단 유지 (직접 접근 차단)
  • 버전 관리 및 암호화 옵션 설정 가능

2️⃣ CloudFront 배포 생성 (S3 원본)

CloudFront를 사용하여 S3 버킷을 도메인과 연결하고 HTTPS를 지원합니다.

  1. AWS 콘솔 → CloudFront → 배포(Create Distribution) 클릭
  2. 원본(Origin) 설정:
    • 원본 도메인: your-bucket-name.s3.amazonaws.com
    • Origin Access Control (OAC) 활성화 (S3 퍼블릭 접근 차단 유지)
    • 버킷 정책 자동 생성 (CloudFront만 접근 가능하도록 제한)
  3. HTTPS 적용:
    • AWS Certificate Manager(ACM)에서 개인 도메인에 대한 SSL 인증서 생성
    • CloudFront 배포에 SSL 인증서 적용
  4. 정적 콘텐츠 캐싱 설정 (선택 사항):
    • 파일 다운로드 URL 캐싱을 방지하려면 "Cache-Control: no-cache" 헤더 설정

3️⃣ Route 53에서 개인 도메인 연결

  1. Route 53 콘솔 → 호스팅 영역(Hosted Zone) 생성
  2. A 레코드(Alias) 추가:
    • 대상(Target): CloudFront 배포 도메인 (dxxxxxxxx.cloudfront.net)

🔹 파일 업로드 및 다운로드 방식

1️⃣ 업로드 방식

  • Pre-Signed URL 사용 (보안 강화)
  • MFC 클라이언트에서 Pre-Signed URL을 이용하여 개인 도메인 경로로 업로드

🚀 Pre-Signed URL 생성 (Python, Boto3)

import boto3

s3_client = boto3.client('s3')

def generate_presigned_url(bucket_name, object_key, expiration=3600):
    url = s3_client.generate_presigned_url('put_object',
                                           Params={'Bucket': bucket_name, 'Key': object_key},
                                           ExpiresIn=expiration)
    return url

# 사용 예시
upload_url = generate_presigned_url("your-bucket-name", "uploads/test-file.txt")
print(f"Upload URL: {upload_url}")

🚀 MFC 클라이언트에서 파일 업로드 (C++)

HRESULT UploadFileToS3(CString filePath, CString preSignedUrl)
{
    CInternetSession session;
    CHttpConnection* pServer = NULL;
    CHttpFile* pFile = NULL;

    try {
        pServer = session.GetHttpConnection(preSignedUrl);
        pFile = pServer->OpenRequest(CHttpConnection::HTTP_VERB_PUT, preSignedUrl);

        CFile file;
        if (!file.Open(filePath, CFile::modeRead)) {
            return E_FAIL;
        }

        BYTE buffer[4096];
        UINT bytesRead;
        while ((bytesRead = file.Read(buffer, sizeof(buffer))) > 0) {
            pFile->Write(buffer, bytesRead);
        }

        pFile->SendRequest();
        return S_OK;
    }
    catch (...) {
        return E_FAIL;
    }
}


2️⃣ 다운로드 방식

  • 클라이언트에서 개인 도메인을 통해 CloudFront를 통해 파일 다운로드
  • CloudFront가 S3와 연결되어 있으므로, URL이 https://yourdomain.com/uploads/file.txt 형식으로 제공됨

🚀 MFC 클라이언트에서 다운로드 (C++)

HRESULT DownloadFileFromS3(CString fileUrl, CString savePath)
{
    CInternetSession session;
    CHttpConnection* pServer = NULL;
    CHttpFile* pFile = NULL;

    try {
        pServer = session.GetHttpConnection(fileUrl);
        pFile = pServer->OpenRequest(CHttpConnection::HTTP_VERB_GET, fileUrl);

        CFile file;
        if (!file.Open(savePath, CFile::modeCreate | CFile::modeWrite)) {
            return E_FAIL;
        }

        BYTE buffer[4096];
        UINT bytesRead;
        while ((bytesRead = pFile->Read(buffer, sizeof(buffer))) > 0) {
            file.Write(buffer, bytesRead);
        }

        file.Close();
        return S_OK;
    }
    catch (...) {
        return E_FAIL;
    }
}


🔹 정리

CloudFront를 사용하여 개인 도메인을 S3에 연결
HTTPS 적용 (SSL 인증서 발급 후 CloudFront 배포에 설정)
MFC 클라이언트에서 Pre-Signed URL을 사용하여 안전하게 업로드 및 다운로드
S3 퍼블릭 접근 차단, CloudFront를 통해서만 접근 가능

이 방식으로 구성하면 개인 도메인(https://yourdomain.com)을 통해 안전하고 빠르게 파일을 업로드/다운로드할 수 있습니다.



🎬 유튜브 채널 🎬

 

위로그@WiLog

📢 안녕하세요, 위로그@WiLog 시청자 여러분, 저는 윌리(Willee) 입니다. 📢 위로그@WiLog 는 자기계발을 목적으로 하는 채널 입니다. 📢 오늘도 즐겁게~ 자신을 위한 계발을 함께 해보아요~ d^_^b 📌

www.youtube.com

🎬 치지직 채널 🎬

 

위로그 채널 - CHZZK

지금, 스트리밍이 시작됩니다. 치지직-

chzzk.naver.com


반응형