SQLAlchemy의 selectload와 joinload 차이는 무엇일까? SQLAlchemy를 사용하다 보면 관계된 데이터를 로드하는 방식에 따라 성능이 크게 달라지는 것을 경험하게 됩니다. 특히 selectload와 joinload는 자주 사용되는 두 가지 로딩 전략인데, 각각의 특징과 적절한 사용 시점을 알아보겠습니다.ORM에서의 데이터 로딩 전략SQLAlchemy에서는 크게 세 가지 로딩 전략을 제공합니다:Lazy Loading (기본값)Eager Loading (joinedload)Select Loading (selectinload)이 중에서 특히 많이 사용되는 Eager Loading과 Select Loading을 자세히 비교해보겠습니다.selectload 상세 분석selectload는 관계..
나는 현재 멘토링을 진행하고 있다. 멘토링을 진행하면서, 어제 받은 멘티의 질문이 과거 나 또한 고민했던 내용이었기에 해당 내용을 정리해둔다면, 다른 사람들에게 도움이 될 수 있는 정보가 될 수 있지 않을까 하는 생각에서 내용을 정리해본다. 질문의 내용을 정리한다면 다음과 같다.주요 질문: AbstractBaseUser를 상속받는 AbstractUser는 따로 사용할 필요가 없는가?(AbstractBaseUser의 사용 시기는 언제인가?)추가 질문: 데이터 설계 시, 필요없는 필드를 포함해도 괜찮은가? 과거 django(이하 장고)를 사용할 때, 나 또한 이러한 고민을 했었다. 장고를 사용하면서 가장 좋았던 점은 필요한 것들은 이미 거의 대부분 모듈로 제공되고 있었고, User 또한 그러하였으며, 추후..
들어가기 전 Pydantic은 Python 영역에서 사용하는 타입 힌트와 데이터 검증을 보다 쉽고 명확하게 해주는 라이브러리이다. 누군가는 이러한 "타입을 강제하는 Pydantic이 Python을 Python스럽지 못하게 사용하는 것"이라 이야기하기도한다. 하지만 타입을 강제하는 것은 Python의 철학와는 별개로 서비스 운영측면에서 중요한 요소이다.타입힌팅은 코드의 명확성을 높여주며, 개발자의 개발 생산성과 밀접한 연관이 있는 IDE의 자동완성 기능와 결합되어 높은 개발 생산성을 이끌어 낼 수 있다.데이터 구조가 명확해짐으로써 다른 서비스팀와의 협업과 유지보수가 더욱 더 편리해진다. Pydantic은 타입을 강제하는 것 뿐만아니라, 커스텀 유효성 검사와 데이터 직렬화(serialization) 및 역직..
테스트 환경개발환경python==3.9async-asgi-testclient==1.4.11pytest==8.1.1pytest-asyncio==0.23.6 디렉토리 구조├── alembic├── frontend├── scripts├── src│ ├── domains│ ├── external_service│ ├── main.py├── tests│ ├── conftest.py│ └── src└── venv상황 FastAPI를 활용한 동기 API 단위 테스트를 작성하던 중 정의한 fixture를 찾을 수 없다는 문제에 직면했다. 나는 conftest.py에 sync_client를 정의한 상태였는데, 해당 fixture를 찾아오지 못했다. 이와 관련하여, 나는 conftest.py의 선언된 ..