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

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

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

[파이썬] 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

728x90
반응형