diff --git a/src/main/ai/data/FileDuplicateCheckQueue.py b/src/main/ai/data/FileDuplicateCheckQueue.py index 2267b64..6381af0 100644 --- a/src/main/ai/data/FileDuplicateCheckQueue.py +++ b/src/main/ai/data/FileDuplicateCheckQueue.py @@ -1,4 +1,5 @@ import json +import hashlib class FileDuplicateCheckQueue: def __init__(self, sqs_client, queue_url): @@ -17,10 +18,14 @@ def send_message(self, request_id: str, user_id: str, s3_bucket: str, s3_key: st } } + # MessageDeduplicationId는 알파벳, 숫자, 구두점만 포함 가능하므로 + # request_id를 MD5 해시로 변환하여 사용합니다. + deduplication_id = hashlib.md5(str(request_id).encode()).hexdigest() + response = self.sqs_client.send_message( QueueUrl=self.queue_url, MessageGroupId=str(user_id), - MessageDeduplicationId=str(request_id), + MessageDeduplicationId=deduplication_id, MessageBody=json.dumps(message_body), ) diff --git a/src/main/ai/service/FileDuplicateCheckService.py b/src/main/ai/service/FileDuplicateCheckService.py index ce0b6c1..6107cf4 100644 --- a/src/main/ai/service/FileDuplicateCheckService.py +++ b/src/main/ai/service/FileDuplicateCheckService.py @@ -53,16 +53,15 @@ def create_duplicate_check_request(self, request: FileDuplicateCheckRequest) -> "s3_key": file["s3_key"] } - message = { - "request_type": "file_duplicate_check_embedding_file", - "request_id": str(result["_id"]), - "user_id": request.user_id, - "payload": file_data - } + message_id = str(result["_id"]) + logger.info(f"SQS 메시지 발송 준비: request_id: {message_id}, user_id: {request.user_id}, s3_bucket: {file['s3_bucket']}, s3_key: {file['s3_key']}") - message_json = json.dumps(message) - logger.info(f"SQS 메시지 발송: {message_json}") - response = self.sqs_service.send_message(message_json) + response = self.sqs_service.send_message( + request_id=message_id, + user_id=request.user_id, + s3_bucket=file["s3_bucket"], + s3_key=file["s3_key"] + ) logger.info(f"SQS 메시지 발송 응답: {response}") # 5. 요청 ID 응답 diff --git a/src/tests/ai/data/test_file_duplicate_check_queue.py b/src/tests/ai/data/test_file_duplicate_check_queue.py index afa91c5..cb0caef 100644 --- a/src/tests/ai/data/test_file_duplicate_check_queue.py +++ b/src/tests/ai/data/test_file_duplicate_check_queue.py @@ -1,5 +1,6 @@ import pytest import json +import hashlib from unittest.mock import MagicMock, patch from src.main.ai.data.FileDuplicateCheckQueue import FileDuplicateCheckQueue @@ -32,6 +33,8 @@ def test_send_message_success(self): } } + expected_deduplication_id = hashlib.md5(str(self.test_request_id).encode()).hexdigest() + expected_response = {"MessageId": "12345"} self.mock_sqs.send_message.return_value = expected_response @@ -47,7 +50,7 @@ def test_send_message_success(self): self.mock_sqs.send_message.assert_called_once_with( QueueUrl=self.test_queue_url, MessageGroupId=self.test_user_id, - MessageDeduplicationId=self.test_request_id, + MessageDeduplicationId=expected_deduplication_id, MessageBody=json.dumps(expected_message_body) ) assert response == expected_response @@ -65,5 +68,4 @@ def test_send_message_exception(self): s3_key=self.test_s3_key ) - assert str(exc_info.value) == "SQS Error" - self.mock_sqs.send_message.assert_called_once() \ No newline at end of file + assert str(exc_info.value) == "SQS Error" \ No newline at end of file