본문 바로가기
컴퓨터

👨‍💻 [AWS] AWS 의 S3 서비스를 MFC 로 구현된 메신저에서 첨부파일을 업로드하고 다운로드하는 용도로 사용하면 어떻게 해야 하나요?

by 밝음의기둥 2025. 3. 24.
반응형

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


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

AWS 의 S3 서비스를 MFC 로 구현된 메신저에서 첨부파일을 업로드하고 다운로드하는 용도로 사용하려고 하는데, 첨부 파일의 메타 정보는 메신저 서버에서 별도로 관리하고, 첨부 파일 업로드 / 다운로드 용도로만 사용하려고 합니다. 어떻게 해야 되는지 간략히 알아보았습니다.


질문 >

AWS 의 S3 서비스를 MFC 로 구현된 메신저에서 첨부파일을 업로드하고 다운로드하는 용도로 사용하려고 하는데, 첨부 파일의 메타 정보는 메신저 서버에서 별도로 관리하고, 첨부 파일 업로드 / 다운로드 용도로만 사용하려고 합니다.

답변 >

이 경우 AWS S3를 파일 저장소로 활용하고, 메신저 서버가 파일의 메타데이터(예: 파일명, 크기, 업로더 정보, 다운로드 URL 등)를 관리하는 방식이 적절합니다. 아래와 같은 아키텍처를 고려해볼 수 있습니다.


📌 구현 방식

  1. 파일 업로드 (MFC 클라이언트 → S3)
    • MFC 클라이언트가 파일을 선택하고, 메신저 서버에 업로드 요청을 보냄.
    • 메신저 서버는 S3에 파일을 업로드할 Pre-signed URL을 생성하여 클라이언트에 반환.
    • 클라이언트가 Pre-signed URL을 이용하여 파일을 S3에 직접 업로드.
    • 업로드 완료 후, 클라이언트는 메신저 서버에 파일의 메타정보(파일명, 크기, S3 URL 등)를 전송.
  2. 파일 다운로드 (MFC 클라이언트 ← S3)
    • 사용자가 파일을 다운로드하려고 하면, 메신저 서버가 해당 파일의 S3 URL을 반환.
    • MFC 클라이언트는 URL을 사용하여 S3에서 직접 파일을 다운로드.

📌 AWS S3 설정 및 고려 사항

Pre-signed URL 사용

  • S3에 대한 직접 접근을 제한하고, 메신저 서버를 통해 인증된 요청만 허용.
  • 서버에서 AWS SDK (Boto3, AWS SDK for C++, etc.)를 이용하여 URL을 생성.
  • URL 만료 시간을 적절히 설정 (예: 5~10분).

S3 스토리지 클래스 선택

  • 자주 다운로드하는 파일이면 Standard
  • 일정 기간 후 자동 이동이 필요하면 Lifecycle Rule을 설정

보안 설정

  • 버킷의 퍼블릭 액세스 차단
  • 서버에서 접근하는 IAM Role에 최소한의 권한만 부여
  • 파일 암호화(SSE-KMS 또는 SSE-S3) 적용 가능

📌 예제 코드

1️⃣ Pre-signed URL 생성 (Python, Boto3)

import boto3
import datetime

s3_client = boto3.client('s3', aws_access_key_id="YOUR_ACCESS_KEY", aws_secret_access_key="YOUR_SECRET_KEY")

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

# 예제 실행
bucket_name = "your-messenger-bucket"
file_name = "uploads/sample.txt"
upload_url = generate_presigned_url(bucket_name, file_name)
print(f"Upload URL: {upload_url}")

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

HRESULT UploadFileToS3(LPCTSTR 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;
    }
}


📌 결론

S3를 직접 접근하지 않고, 서버에서 Pre-signed URL을 발급하는 방식이 보안상 유리합니다.

메타데이터는 서버에서 관리하여 유연한 파일 검색 및 접근 권한 제어가 가능합니다.

파일 업로드/다운로드 로직을 MFC 클라이언트에서 구현할 때는 HTTP 요청을 활용하면 쉽게 처리할 수 있습니다.



🎬 유튜브 채널 🎬

 

위로그@WiLog

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

www.youtube.com

🎬 치지직 채널 🎬

 

위로그 채널 - CHZZK

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

chzzk.naver.com


반응형