Python/FastAPI 2

FastAPI + SQLAlchemy 로 N+1 쿼리 해결하기

N+1쿼리란 ORM에서 성능 이슈가 발생하면 가장 흔한 원인으로 `N+1 Problem`이 언급된다. N+1 Problem은 쿼리 1번으로 N건의 데이터를 가져왔는데 원하는 데이터를 얻기 위해 이 N건의 데이터를 데이터 수 만큼 반복해서 2차적으로 쿼리를 수행하는 문제이다. 이러한 문제가 발생하는 이유는 Object Mapper에서 데이터를 가져올 때 찾고자하는 객체에 대한 정보를 먼저 로딩하는데, 이때 해당 객체의 멤버 변수 등으로 연결되어 있는 다른 클래스와 매핑된 테이블 내의 데이터를 JOIN을 통해 가져오지 못하고 나중에 N건의 객체에 대해 각각 다시 쿼리를 보내서 해당하는 데이터를 가져오는 것이다. Java Spring에서는 Join Fetch 등의 방법을 통해서 이러한 N+1 쿼리 문제를 해결..

Python/FastAPI 2023.10.09

FastAPI와 SQLAlchemy로 ORM 사용하기

ORM이란? ORM(Object Relational Model)은 사물을 추상화시켜 이해하려는 OOP적 사고방식과 DataModel을 정형화하여 관리하려는 RDB 사이를 연결할 계층의 역할로 제시된 패러다임으로 RDB의 모델을 OOP에 Entity 형태로 투영시키는 방식을 사용한다. 이는 시스템에 따라, 사용하는 Database 및 DB Connector 에 따라 달라질 수 있는 데이터 매핑 구조를 객체지향형태로 통일시켜, SQL 구조의 Database를 OOP 구조의 형태로 매핑시키려는 패러다임이다. OOP 적 구조와 SQL 구조의 차이는 데이터를 다루는 방법에서 나타난다. OOP 적 구조에서 모든 데이터는 객체이며, 각 객체는 독립된 데이터와 독립된 함수를 지닌다. 반면 SQL 에서 데이터는 테이블단..

Python/FastAPI 2023.10.09