"이 포스팅은 쿠팡 파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받습니다."
👨💻 안녕하세요, 윌리 프로젝트의 윌리 입니다.
AWS 의 S3 서비스를 MFC 로 구현된 메신저에서 첨부파일을 업로드하고 다운로드하는 용도로 사용하려고 하는데, 첨부 파일의 메타 정보는 메신저 서버에서 별도로 관리하고, 첨부 파일 업로드 / 다운로드 용도로만 사용하려고 합니다. 어떻게 해야 되는지 간략히 알아보았습니다.
질문 >
AWS 의 S3 서비스를 MFC 로 구현된 메신저에서 첨부파일을 업로드하고 다운로드하는 용도로 사용하려고 하는데, 첨부 파일의 메타 정보는 메신저 서버에서 별도로 관리하고, 첨부 파일 업로드 / 다운로드 용도로만 사용하려고 합니다.
답변 >
이 경우 AWS S3를 파일 저장소로 활용하고, 메신저 서버가 파일의 메타데이터(예: 파일명, 크기, 업로더 정보, 다운로드 URL 등)를 관리하는 방식이 적절합니다. 아래와 같은 아키텍처를 고려해볼 수 있습니다.
📌 구현 방식
- 파일 업로드 (MFC 클라이언트 → S3)
- MFC 클라이언트가 파일을 선택하고, 메신저 서버에 업로드 요청을 보냄.
- 메신저 서버는 S3에 파일을 업로드할 Pre-signed URL을 생성하여 클라이언트에 반환.
- 클라이언트가 Pre-signed URL을 이용하여 파일을 S3에 직접 업로드.
- 업로드 완료 후, 클라이언트는 메신저 서버에 파일의 메타정보(파일명, 크기, S3 URL 등)를 전송.
- 파일 다운로드 (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
'컴퓨터' 카테고리의 다른 글
👨💻 [AWS] AWS 의 S3 서비스에서 Pre Signed URL 을 HTTPS 로만 접근하게 하려면 어떻게 해야 하나요? (0) | 2025.04.01 |
---|---|
👨💻 [AWS] AWS 의 CloudFront, Route 53, S3 서비스의 비용과 S3 에 파일을 업로드, 다운로드의 비용이 어떻게 되나요? (0) | 2025.03.28 |
👨💻 [AWS] AWS 의 S3 서비스를 잘 이용하려면 어떻게 해야 하나요? (0) | 2025.03.24 |
👨💻 [DB] DB 에서 Index 의 역할과 장단점은 어떻게 되나요? (0) | 2025.03.11 |
👨💻 [SQLite] SQLite3 의 인덱스 필드에 NULL 을 허용하려면 어떻게 해야 하나요? (0) | 2025.03.10 |