TOP
본문 바로가기
📚 목차
[파이썬 Projects]/<파이썬 웹개발>

[파이썬] AI 활용 웹 서비스 개발 기록 : 3 emails 설명

by 기록자_Recordian 2025. 6. 27.
728x90
반응형
이전 내용
 

[파이썬] AI 활용 웹 서비스 개발 기록 : 2 controllers 설명

이전 내용 [파이썬] AI 활용 웹 서비스 개발 기록 : 1 - 서비스 화면 및 기능 소개프로젝트 소개- 프로젝트 주제: AI 활용 동화 생성 웹 서비스- 프로젝트 내용: 아이를 위한 맞춤형 동화를 생성해주

puppy-foot-it.tistory.com


전체 디렉터리 구조

 

- 기술 스택

  • FastAPI (비동기 REST API)
  • SQLAlchemy (ORM)
  • Pydantic (입력값 검증)
  • PostgreSQL (RDBMS)
  • 로깅 시스템 (logger): logging 모듈 기반 로그 기록
  • 비밀번호 해싱: Passlib (bcrypt)
  • 이메일 처리: SMTP + 커스텀 EmailService
  • 유효성 검사: re 정규표현식, 수동 로직
  • 백그라운드 작업: BackgroundTasks
  • 세션 처리: FastAPI session middleware
  • API 키 관리: dotenv (.env), st.secrets

- 구현 의도

  • 단순한 CRUD API를 넘어서 실서비스에서 필요한 유효성 검사, 예외 처리, 중복 방지 등 실제 운영 환경에서 중요한 요소들을 고려해 설계.
  • 실무에서 바로 사용 가능한 사용자 인증 API를 처음부터 끝까지 설계 및 개발
  • DB 설계, 암호화, 유효성 검사, 예외처리, 이메일 전송 등 실무 요구 사항 반영
  • 보안 및 사용자 경험을 모두 고려한 구조라는 점에서 팀 프로젝트 혹은 SaaS 백엔드 개발에 바로 투입 가능

디렉터리 구조 2: emails

 

사용자의 다양한 활동 (회원가입, 비밀번호 변경, 계정 찾기, 회원 탈퇴 등)에 따른 이메일 발송 서비스를 구현해 놓은 디렉터리


◆ email_class.py

- 사용자의 다양한 이벤트(회원가입, 탈퇴, 비밀번호 재설정 등)에 따라 자동으로 이메일을 발송하는 시스템

- SMTP (Gmail) + MIME + HTML 템플릿 기반으로 구성되며, 보안 키 관리를 .env로 처리

 

[지원하는 이메일 종류 및 클래스 구성]

클래스명 이메일 내용 사용 시점
EmailServiceWelcome 환영 메시지 및 로그인 링크 회원가입 직후
EmailServiceBye 탈퇴 완료 안내 및 재가입 유도 회원 탈퇴 직후
EmailServiceFindId 사용자 아이디 정보 아이디 찾기
EmailServiceSendTempPW 임시 비밀번호 전송 비밀번호 재설정 요청 시
EmailServiceSendNewPW 비밀번호 변경 알림 비밀번호 변경 완료 후

 

[예외 처리 및 로깅]

상황 처리 방식
SMTP 실패 try-except로 감싸고, logging.error() 사용
이메일 전송 성공 logging.info()로 성공 로그 출력
환경 변수 누락 .env 또는 FastAPI settings에서 관리

 

[향후 고도화 아이디어]

방향 내용
템플릿화 Jinja2, MJML 등 이메일 템플릿 엔진 도입
메일 대량 발송 Celery + Redis로 큐잉 처리
전송 통계 이메일 클릭률, 오픈률 추적 기능 추가
보안 강화 OAuth 2.0 SMTP 인증 적용 (Gmail OAuth 등)
다국어 지원 이메일 내용 다국어 템플릿화

◆ email_service.py

- 이메일 전송 로직과 사용자 비밀번호 변경 로직을 분리한 서비스 계층 모듈

- FastAPI 기반 동화 생성 서비스에서 사용자 인증 및 알림 이메일 전송을 담당하는 핵심 서비스 컴포넌트

- 책임을 명확히 분리하고, 로깅 및 예외 처리를 통해 실서비스 운영에 필요한 안정성과 확장성을 고려하여 개발

 

[주요 기능 설명]

기능 설명
send_welcome_email 회원가입 완료 후 사용자에게 환영 이메일 전송.
send_bye_email 회원 탈퇴 시 작별 인사를 포함한 이메일 전송.
send_username_email 아이디 찾기 기능으로 사용자 이메일로 아이디 전달.
generate_temp_pw Faker를 활용한 보안 임시 비밀번호 생성.
update_user_password SQLAlchemy + SQL 문으로 사용자 비밀번호를 해싱 후 DB에 저장.
send_temp_pw_email 임시 비밀번호 발급 시 안내 이메일 전송.
send_changed_pw_email 비밀번호 변경 완료 후 사용자에게 변경 알림 이메일 전송.

 

[설계 및 아키텍처 포인트]

요소 설계 설명
책임 분리 (Separation of Concerns) 이메일 내용(템플릿)과 서비스 로직(트리거)은 각기 다른 클래스로 분리되어 유지보수 용이.
로깅 기반 운영 관리 각 이메일 전송 및 DB 작업에 대해 logging을 활용한 추적/디버깅 가능.
비밀번호 보안 passlib을 통한 bcrypt 해시 알고리즘을 사용하여 안전한 비밀번호 저장 보장.
SQLAlchemy + Raw SQL 혼합 사용 ORM과 Raw SQL의 장점을 적절히 조합하여 성능과 유연성을 동시에 확보.
Faker 사용 사용자 친화적이고 안전한 임시 비밀번호 생성을 위해 Faker 패키지 활용.

 

[향후 고도화 아이디어]

기능 내용
이메일 발송 방식 Celery + Redis 기반의 비동기 큐 처리로 안정성 강화
보안 이메일 서버 인증 방식을 OAuth2 또는 SendGrid로 교체
테스트 환경 MailHog 또는 Ethereal 기반 이메일 테스트 환경 구축
템플릿 HTML 이메일을 Jinja2 템플릿 파일로 분리하여 유지보수 용이성 향상
트래킹 이메일 오픈 및 클릭 트래킹 기능 추가

다음 내용

 

[파이썬] AI 활용 웹 서비스 개발 기록 : 4 frontend 설명

이전 내용 [파이썬] AI 활용 웹 서비스 개발 기록 : 3 emails 설명이전 내용 [파이썬] AI 활용 웹 서비스 개발 기록 : 2 controllers 설명이전 내용 [파이썬] AI 활용 웹 서비스 개발 기록 : 1 - 서비스 화면

puppy-foot-it.tistory.com

728x90
반응형