인프런 영문 브랜드 로고
인프런 영문 브랜드 로고

Inflearn Community Q&A

bluebamus's profile image
bluebamus

asked

FastAPI Complete Guide

Download lecture materials

autoflush=false에 대해 질문 드립니다.

Written on

·

21

0

학습을 하다보니 FastAPI 문서에서 autoflush=False을 권장한다는 것을 알게 되었습니다.

헌데 이번 프로젝트에서는 해당 설정을 사용하지 않은 것으로 알고 있습니다.

기본 설정이 autocommit=false, autoflush=true로 알고 있는데, 해당 옵션을 그대로 이번 강의 프로젝트에서 사용된 것으로 알고 있습니다.

혹시 autoflush=False를 적용해야 하는 경우가 있는 것인지, 다른 이유가 있는 것인지를 알고 싶어 질문을 드리게 되었습니다.

pythonsqlsqlalchemyFastAPI

Answer 2

0

권 철민님의 프로필 이미지
권 철민
Instructor

안녕하십니까,

autoflush는 SQLAlchemy에서 ORM을 적용할 때 사용합니다. ORM의 Session 생성 시 적용됩니다.

하지만 본 강의는 ORM(또는 Session)을 사용하지 않기 때문에 autoflush와 아무 상관이 없습니다.

그리고 ORM을 사용하신다면 autoflush를 True로 하면 flush()를 매번 호출할 필요가 없어서 좋은데, 명확하게 객체와 DB 동기화가 헷갈리는 경우가 있을 수 있어서 False로 설정하는 경우도 있습니다.

감사합니다.

bluebamus님의 프로필 이미지
bluebamus
Questioner

감사합니다 ORM 적용시에만 사용하는 것인줄 이제 알았습니다 ^^

0

안녕하세요, 인프런 AI 인턴입니다.

autoflush 옵션에 대한 질문을 주셨군요. autoflush는 SQLAlchemy ORM의 Session 객체와 관련된 옵션입니다. 이 옵션은 세션에서 쿼리가 실행될 때마다 변경된 객체들이 자동으로 데이터베이스 상태와 동기화되도록 조정하는 기능을 가지고 있습니다.

기본 설정으로 autoflush=True로 되어 있으며, 이는 변경된 데이터가 즉시 데이터베이스에 반영되도록 합니다. 하지만 때로는 autoflush가 필요하지 않은 경우가 있을 수 있습니다. 예를 들어:

  1. 트랜잭션 단위 작업: 데이터베이스와의 상호작용이 복잡하고 큰 트랜잭션 단위로 수행되는 경우, 수동으로 flush를 관리하는 것이 더 명확할 수 있습니다. 이럴 때 autoflush=False를 설정할 수 있습니다.

  2. 성능 최적화: 데이터베이스 액세스를 줄이고 싶을 때, 필요하지 않은 순간의 자동 flush를 막음으로써 성능을 어느 정도 조절할 수 있습니다.

  3. 동작 제어: SQLAlchemy에서 객체가 데이터베이스에 동기화되는 정확한 시점을 더 명확히 제어하고자 할 경우, autoflush=False를 설정하고 필요할 때 수동으로 flush를 시킬 수 있습니다.

FastAPI나 본 강의의 기본 프로젝트에서 기본값을 사용하는 경우가 많으며, 특별한 이유가 없다면 기본 설정을 그대로 사용해도 무방합니다. 다만, 앞서 언급한 이유로 인해 특정 상황에서는 autoflush=False로 설정해 더 명확한 제어를 수행할 수 있습니다.

유사한 내용의 기존 게시글을 참조하여 더 깊이 있는 내용을 확인하고자 하신다면, FastAPI와 SQLAlchemy with autoflush 관련 게시글들의 링크를 첨부해 드립니다:

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.

현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

bluebamus's profile image
bluebamus

asked

Ask a question