데이터 시딩을 위한 SQLAlchemy 비동기 접근 방식
카테고리
프로그래밍/소프트웨어 개발
서브카테고리
DevOps
대상자
FastAPI 및 비동기 SQLAlchemy를 사용하는 백엔드 개발자, 특히 초기 데이터 시딩을 필요로 하는 프로젝트 담당자
핵심 요약
JSON
파일 기반의 시드 데이터 관리를 통해 중복 방지 및 확장성 강화sessionmanager
를 통해 비동기 세션 초기화/종료를 중앙 집중화하여 안정성 확보Typer
CLI를 활용한 명령어 기반 데이터 시딩 실행 가능 (python3 cli.py roles
)select(Role).where(Role.role == role_name)
등의 쿼리로 기존 데이터 존재 여부 확인
섹션별 세부 요약
1. 조직화된 시드 데이터 생성
roles.json
파일에서 데이터를 불러와Role
모델과 매칭- 기존 데이터 존재 여부 확인 후 중복 방지 로직 적용
- 예제 코드:
```python
existing_role_query = await session.execute(select(Role).where(Role.role == role_name))
```
session.add(new_role)
및await session.commit()
을 통해 데이터 생성/업데이트
2. 비동기 세션 관리
sessionmanager
를 통해 세션 초기화(init
) 및 종료(close
) 로직 통합- 비동기 컨텍스트 관리자(
async with
) 사용으로 세션 자원 누수 방지 - 예제 CLI 구조:
```python
@cli.command()
def roles():
asyncio.run(run_seed(seed_roles))
```
3. Typer 기반 CLI 도구
Typer
를 사용해 명령어 기반 데이터 시딩 실행 (roles
,categories
,articles
)asyncio.run(run_seed(...))
를 통해 비동기 함수 실행- CLI 명령어 예시:
```bash
python3 cli.py roles
```
결론
- 비동기 데이터 시딩을 위해
JSON
파일,sessionmanager
,Typer
를 결합한 아키텍처 추천 select(Role).where(...)
등 SQLAlchemy 쿼리 사용 시 명확한 조건 검증 필요- CLI 도구를 통해 데이터 시딩 프로세스 자동화 및 관리 효율화 가능