이전 내용
[파이썬] AI 활용 웹 서비스 개발 기록 : 4 frontend 설명
이전 내용 [파이썬] AI 활용 웹 서비스 개발 기록 : 3 emails 설명이전 내용 [파이썬] AI 활용 웹 서비스 개발 기록 : 2 controllers 설명이전 내용 [파이썬] AI 활용 웹 서비스 개발 기록 : 1 - 서비스 화면
puppy-foot-it.tistory.com
전체 디렉터리 구조
- 기술 스택
- FastAPI (비동기 REST API)
- SQLAlchemy (ORM)
- Pydantic (입력값 검증)
- PostgreSQL (RDBMS)
- 로깅 시스템 (logger): logging 모듈 기반 로그 기록
- 비밀번호 해싱: Passlib (bcrypt)
- 이메일 처리: SMTP + 커스텀 EmailService
- 유효성 검사: re 정규표현식, 수동 로직
- 백그라운드 작업: BackgroundTasks
- 세션 처리: FastAPI session middleware
- 세션 상태 관리: st.session_state
- API 키 관리: dotenv (.env), st.secrets
- 구현 의도
- 단순한 CRUD API를 넘어서 실서비스에서 필요한 유효성 검사, 예외 처리, 중복 방지 등 실제 운영 환경에서 중요한 요소들을 고려해 설계.
- 실무에서 바로 사용 가능한 사용자 인증 API를 처음부터 끝까지 설계 및 개발
- DB 설계, 암호화, 유효성 검사, 예외처리, 이메일 전송 등 실무 요구 사항 반영
- 보안 및 사용자 경험을 모두 고려한 구조라는 점에서 팀 프로젝트 혹은 SaaS 백엔드 개발에 바로 투입 가능
디렉터리 구조 4: models_dir
- 데이터베이스 관련 기능을 수행하는 파일들이 있는 디렉터리
- SQLAlchemy ORM 모델 정의
◆ database.py
- SQLAlchemy + PostgreSQL 기반의 데이터베이스 연결, 세션 관리, 테이블 생성 초기화 작업을 담당
- 주요 역할
- .env 또는 직접 설정된 DATABASE_URL을 기반으로 DB 연결 및 테이블 생성
- SQLAlchemy Base 모델 초기화
- 세션 핸들링 제공
[주요 기능]
기능 | 설명 |
환경변수 로딩 | .env 파일로부터 DB URL을 안전하게 불러옴 |
DB 연결 설정 | SQLAlchemy의 create_engine()을 통해 DB 연결 |
세션 팩토리 생성 | ORM 세션을 핸들링할 수 있는 팩토리 제공 |
테이블 초기화 | 모델을 import 후 테이블 생성 (Base.metadata.create_all) |
연결 테스트 및 테이블 생성 | 엔진 연결 여부 확인 후 자동으로 테이블 생성 |
컨텍스트 기반 세션 제공 | @contextmanager 데코레이터로 get_db() 구현 |
[고도화 아이디어]
아이디어 | 내용 | 기대 효과 |
.env 로딩 최적화 | dotenv_path 인자를 통해 명시적으로 경로 지정 | 배포 환경과 로컬 환경 분리 운영 |
DB URL 분리 처리 | os.environ.get("MODE")로 개발/운영 모드별 URL 분기 처리 | 다양한 환경에서 안정적인 실행 |
Alembic 도입 | 마이그레이션 도구인 Alembic 연동 | DB 구조 변경 관리 자동화 |
연결 상태 캐시 | 자주 연결 테스트하지 않도록 캐시화 또는 @lru_cache 사용 | 성능 향상 및 오버헤드 감소 |
예외 세분화 | psycopg2.OperationalError, sqlalchemy.exc.SQLAlchemyError 등 구체적 처리 | 에러 원인 명확화 |
커넥션 풀링 설정 | pool_size, max_overflow, pool_timeout 설정 추가 | 고성능 서버에서도 안정성 보장 |
◆ models.py
- SQLAlchemy ORM 모델 정의 코드
- 사용자(User), 동화(Story), 아기(Baby), 역할(Role), 게시글(Article), 좋아요(Like)와 같은 핵심 도메인 객체들을 SQLAlchemy ORM 모델로 정의
- DB 테이블과의 매핑을 통해 관계형 데이터를 객체 지향적으로 다룰 수 있도록 모델 설계 및 관계 설정
[모델별 기능 요약]
모델 | 설명 | 주요 필드 | 관계 |
User | 회원 정보 저장 | username, email, role_id, created_at | stories, articles, babies, likes, role |
Role | 사용자 역할(권한) 구분 | role_name | users (1:N) |
Baby | 아이(또는 태아) 정보 | baby_name, baby_gender, baby_bday | user (N:1) |
Story | AI가 생성한 동화 데이터 | theme, voice, content, image, voice_content | user (N:1) |
Article | 사용자 게시글 (갤러리 등) | image, created_at | user (N:1), likes (1:N) |
Like | 좋아요 기록 | user_id, article_id | user, article (각각 N:1) |
[고도화 아이디어]
아이디어 | 내용 | 기대 효과 |
ondelete 설정 | ForeignKey(..., ondelete='CASCADE') 설정 | 부모 데이터 삭제 시 자식 자동 삭제 |
index 최적화 | index=True가 많은데 필요한 컬럼만 유지 | 검색 성능 최적화 및 DB 부하 감소 |
Enum 활용 | baby_gender, role_name 등을 Enum으로 관리 | 가독성과 유지보수성 향상 |
created_at 개선 | server_default=func.now() 외에 updated_at도 함께 관리 | 데이터 변경 시 추적 가능 |
UUID 사용 | 보안과 확장성 고려 시 id를 UUID로 대체 | 추적 불가한 ID 구성 가능 |
Soft Delete | is_deleted 플래그 도입 | 데이터 복구 및 이력 관리 가능 |
모델 간 메서드 추가 | 예: User.full_info() 같은 유틸 함수 정의 | 뷰 렌더링 시 가공된 정보 제공 용이 |
다음 내용
[파이썬] AI 활용 웹 서비스 개발 기록 : 6 scheme_files
이전 내용 [파이썬] AI 활용 웹 서비스 개발 기록 : 5 models_dir 설명이전 내용 [파이썬] AI 활용 웹 서비스 개발 기록 : 4 frontend 설명이전 내용 [파이썬] AI 활용 웹 서비스 개발 기록 : 3 emails 설명이전
puppy-foot-it.tistory.com
'[파이썬 Projects] > <파이썬 웹개발>' 카테고리의 다른 글
[파이썬] AI 활용 웹 서비스 개발 기록 : 7 main / ai_server 설명 (0) | 2025.06.27 |
---|---|
[파이썬] AI 활용 웹 서비스 개발 기록 : 6 scheme_files 설명 (1) | 2025.06.27 |
[파이썬] AI 활용 웹 서비스 개발 기록 : 4 frontend 설명 (1) | 2025.06.27 |
[파이썬] AI 활용 웹 서비스 개발 기록 : 3 emails 설명 (0) | 2025.06.27 |
[파이썬] AI 활용 웹 서비스 개발 기록 : 2 controllers 설명 (0) | 2025.06.27 |