파이썬을 활용한 서버리스 스팸 필터링

스팸 메일은 많은 사용자들에게 불편과 위험을 초래하는 문제입니다. 이에 대비하기 위해 우리는 파이썬을 사용하여 간단하고 효과적인 서버리스 스팸 필터링 시스템을 만들 수 있습니다. 서버리스 아키텍처를 사용하면 서버 설정과 관리에 소요되는 시간과 비용을 줄일 수 있으며, 트래픽이 많을 때 확장성을 갖추기에도 적합합니다.

필요한 리소스

알고리즘 개요

  1. 이메일 도착 시, AWS SES는 S3 버킷에 해당 이메일을 저장합니다.
  2. AWS Lambda 함수가 S3 버킷에 대한 이벤트 트리거를 설정하여 이메일의 도착을 감지합니다.
  3. Lambda 함수가 이메일을 가져와서 스팸 필터링 알고리즘을 적용합니다.
  4. 스팸 인지 여부에 따라 이메일을 수신함 또는 스팸함으로 분류합니다.

스팸 필터링 알고리즘 구현

import re

def filter_spam(email):
    # 이메일 본문에서 HTML 태그 제거
    text_only = re.sub('<[^<]+?>', '', email.body)
    
    # 스팸 패턴 매칭을 위한 정규식
    spam_patterns = [
        "특별한 혜택",
        "당첨",
        "로또",
        "광고"
    ]
    
    # 스팸 패턴과 일치하는지 확인
    for pattern in spam_patterns:
        if re.search(pattern, text_only, re.IGNORECASE):
            return True
    
    # 일치하는 패턴이 없는 경우 스팸이 아닌 것으로 분류
    return False

Lambda 함수 작성

import boto3

def lambda_handler(event, context):
    s3 = boto3.client('s3')
    ses = boto3.client('ses')
    
    for record in event['Records']:
        bucket_name = record['s3']['bucket']['name']
        object_key = record['s3']['object']['key']
        
        # S3에서 이메일 파일 가져오기
        response = s3.get_object(Bucket=bucket_name, Key=object_key)
        email = response['Body'].read().decode('utf-8')
        
        # 스팸 필터링 알고리즘 적용
        is_spam = filter_spam(email)
        
        if is_spam:
            # 스팸함으로 이동
            print("스팸 메일입니다.")
            # 스팸함 이동 로직
        else:
            # 이메일을 수신함으로 전달
            print("일반 메일입니다.")
            # 수신함 이동 로직
    
    return {
        'statusCode': 200,
        'body': 'Spam filtering completed'
    }

위의 코드는 AWS Lambda 함수로서, S3 버킷에 저장된 이메일 파일을 가져와 스팸 필터링 알고리즘을 적용한 후, 스팸 여부에 따라 적절한 동작을 수행합니다. 스팸인 경우 스팸함으로 이동하고, 스팸이 아닌 경우 이메일을 수신함으로 전달합니다.

이와 같은 방법으로 파이썬을 활용한 서버리스 스팸 필터링 시스템을 구축할 수 있습니다. AWS Lambda와 S3, SES를 조합하여 효율적이고 확장 가능한 스팸 필터링 시스템을 개발하고 운영할 수 있습니다.

#Python #서버리스 #스팸 #필터링