이전 내용
[파이썬] 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
'[파이썬 Projects] > <파이썬 웹개발>' 카테고리의 다른 글
[파이썬] AI 활용 웹 서비스 개발 기록 : 5 models_dir 설명 (0) | 2025.06.27 |
---|---|
[파이썬] AI 활용 웹 서비스 개발 기록 : 4 frontend 설명 (1) | 2025.06.27 |
[파이썬] AI 활용 웹 서비스 개발 기록 : 2 controllers 설명 (0) | 2025.06.27 |
[파이썬] AI 활용 웹 서비스 개발 기록 : 1 - 서비스 화면 및 기능 소개 (0) | 2025.06.26 |
[패키지 버전 관리] requirements.txt (0) | 2025.06.09 |