Loading...
2021. 11. 9. 10:48

[FastAPI] 13. SQLAlchemy와 Pydantic을 이용한 관계 데이터 매핑

SQLAlchemy를 사용하다보면 원하지 않을 때 API에서 모든 컬럼에 대한 데이터를 받아와 최적화 하기가 어려울 때가 있습니다. 어떤 API에서는 특정 컬럼에 대한 데이터 혹은 관계 데이터가 필요할 때가 있는데, 그렇지 않은 데이터까지 모두 나오게 되어 오히려 API 로딩 속도를 저하시키고 서버 부하에 원인이 되기도 합니다. SQLAlchemy ORM의 relationship SQLAlchemy ORM에서는 관계된 데이터를 가져오기 위해 relationship을 사용할 수 있습니다. 예를 들어 블로그를 하나 만드려는데, 어떤 카테고리의 글인지를 알기 위해서 아래와 같이 데이터를 설계해 볼 수 있습니다. 카테고리는 하위 카테고리를 가질 수 있고, 하나의 컨텐츠는 카테고리 하나를 가질 수 있다라고 했을 ..

2021. 4. 4. 12:52

[FastAPI] 9. Persistence Layer 구간을 비동기 처리 하는 방법

첫 포스트에서 우리는 FastAPI가 ASGI 기반의 uvicorn을 이용하여 uvloop에 기반한 비동기 처리로 API 요청과 응답을 비동기로 처리할 수 있다는 이야기를 하였습니다. 하지만 공교롭게도 Database Connection에서 이러한 기능을 지원해주지 않아 API 요청 단에는 비동기 처리가 가능하여도 DB에 액세스 하는 구간은 비동기 처리가 되지 않기 때문에 Blocking이 발생하고, 다음 요청이 계속 대기 되는 문제점을 가지고 있었습니다. Python DB API 그렇다면 파이썬은 어떤식으로 Database와 연결할 수 있는 것일까요? Java의 경우는 JDBC라는 Database Connector라는 것이 존재하여 애플리케이션과 Database 사이를 연결해주는 게 가능한데요. Pyt..

2021. 3. 14. 16:53

[FastAPI] 8. 비동기 처리에서 SQLAlchemy의 scoped_session이 문제가 되는 이유

아래의 포스트에서 FastAPI가 SQLAlchemy와 연동하였을 때 비동기적으로 처리하는 부분이 미흡하다는 단점에 대해 이야기했었던 적이 있습니다. 2020.12.27 - [Programming/Python] - [FastAPI] 2. SQLAlchemy를 이용한 간단한 CRUD API 만들기 [FastAPI] 2. SQLAlchemy를 이용한 간단한 CRUD API 만들기 이번 글에서는 ORM에 대한 사용 방법에 대해 알아보도록 하겠습니다. ORM은 Object Relation Mapping의 약자로 객체를 이용해서 데이터베이스 Entity에 접근하는 방법입니다. 보통 애플리케이션 레벨에서 blog.neonkid.xyz 이 부분에서 다룬 SQLAlchemy의 scoped_session에 대해 좀 더 ..

2021. 1. 16. 13:55

[FastAPI] 4. SQLAlchemy + Alembic 조합을 이용한 Database Migration 가이드

웹 서비스를 개발하고 배포한 뒤에 반드시 한 번 쯤 따르는 업데이트 사항이 바로 데이터베이스 마이그레이션입니다. 데이터베이스를 마이그레이션하는 경우는 보통 아래의 3가지가 대표적입니다. 인스턴스의 이전 클라우드를 사용한다면 다른 인스턴스, 혹은 다른 리전으로의 이전 특정 Entity에 대한 변경 요청 우리 부서 혹은 우리 서비스에는 이 기능을 넣기 위해 이 칼럼이 더 추가로 필요할 것 같아요. 일부 영속된 데이터를 특정 데이터로 변경 이제는 이 명칭을 이 명칭으로 바꿀거에요. 모든 사항에 적용되었으면 좋겠어요. 간단하게 생각한다면 이러한 작업을 수동으로 처리할 수도 있습니다. 다른 데이터베이스 인스턴스를 하나 테스트용으로 만들고, SQL 쿼리를 짜본 다음 쿼리 테스트하고, 확실한 쿼리가 작성되었다면 이를..

2020. 12. 31. 15:41

[FastAPI] 3. SQLAlchemy + Graphene 조합으로 GraphQL 서버 만들기

이번 포스트에서는 GraphQL에 대한 이야기를 해보도록 하겠습니다. What is GraphQL ? GraphQL에 대한 이야기는 그리 길지 않기 때문에 여기서 간단하게 다뤄보도록 하겠습니다. GraphQL은 Facebook에서 개발한 데이터 표현 언어로 여기서 QL이 Query Language에 해당합니다. 우리는 서버에서 데이터를 가져오기 위해 REST API를 사용하였고, REST API는 메소드와 요청 데이터 혹은 응답 데이터로 구분하여 원하는 데이터를 가져오거나 데이터를 적재하는 등을 수행하였습니다. 그러나 GraphQL은 메소드 없이 오직 Query Language만을 이용하여 원하는 모델을 적재하고, 가져올 수 있습니다. 또한 원하는 항목을 클라이언트가 직접 명시함으로써 서버에서 제공해주는..

2020. 12. 27. 12:14

[FastAPI] 2. SQLAlchemy를 이용한 간단한 CRUD API 만들기

이번 글에서는 ORM에 대한 사용 방법에 대해 알아보도록 하겠습니다. ORM은 Object Relation Mapping의 약자로 객체를 이용해서 데이터베이스 Entity에 접근하는 방법입니다. 보통 애플리케이션 레벨에서 DB에 접근할 때는 데이터베이스 드라이버를 이용하여 SQL Query를 던져 실행하는 방법을 사용하지만 SQL Query는 소프트웨어 엔지니어에게 있어 러닝 커브를 증가 시키고, 소프트웨어 코드 가독성을 저하시키는 원인이 되었습니다. 하지만 ORM을 이용하면 기본적인 CRUD를 포함한 간단한 쿼리에 대해 SQL Query를 프로그래밍 코드에 질의하지 않아도 프로그래밍 코드 안에서 처리할 수 있는 이점을 얻을 수 있습니다. Python 언어에서의 대표적인 ORM 라이브러리로 SQLAlch..