Computer Science

[Python] FastAPI 미들웨어로 Sqlalchemy Session 관리하기
🌟 들어가며FastAPI를 사용해 웹 어플리케이션을 구현할 때 Sqlalchemy Session객체의 라이프 사이클을 관리하는 것은 매우 중요합니다. 병행성이 보장되어야하는 환경에서 Session객체는 스레드별로 독립적이지 않기 때문입니다. 따라서 각 스레드별로 독립적으로 Session을 관리해줘야합니다. 이를 위해 미들웨어, ContextVar 그리고 scoped_session을 활용해 병행실행이 필요한 환경해서 Session을 어떻게 관리해야하는지 알아보도록 하겠습니다.📜 이번 포스팅에서 다루지 않는것Sqlalchemy의 Engine, Session의 개념FastAPI Depends미들웨어 개념ContextVar의 개념🔄 Thread local, Thread Safe?Sqlalchemy는 Bas..

[Python] FastAPI와 Dependency Injector
🚀 들어가며소프트웨어를 설계하다보면 DI 패턴을 적용해야하는 경우 있습니다. python 기준으로 객체의 의존성 주입은 다양한 방식으로 구현할 수 있지만, Python에서 DI 패턴을 프레임워크 형태로 구현한 Dependency Injector 라이브러리를 통해 의존성 주입과 제어의 역전(IoC)기능을 사용할 수 있습니다.이번 포스팅에서는 FastAPI와 Dependency Injector를 활용해 Layered 아키택처를 구현하는 방법에 대해 알아보겠습니다.🔍 의존성 주입에 대한 간단 설명이번 포스팅에서 의존성 주입에 대한 개념에 대해 설명하지 않지만, 간단히 짚고 넘어가겠습니다. DI, IoC, DIP와 같은 개념은 Spring과 같은 프레임워크를 사용한다거나, 객체 지향 설계에 대해 공부하셨다면..

[Python] 비동기 테스트를 하려면? (a.k.a pytest-asyncio)
들어가며python은 async/await 문법과 single-thread 기반 event loop를 통해 비동기적인 작업을 지원합니다. 하지만, 비동기적으로 만들어진 코드를 테스트하기 위해서는 어떻게 해야 할까요? 이번 포스팅에서는 비동기 테스트를 위한 pytest 익스텐션인 pytest-asyncio에 대해 알아보겠습니다.아래과 같은 개념을 알고 있어야 이 글을 이해하기 수월합니다.Pytest를 사용한 기본적인 테스트 코드 작성 방법pytest scope에 대한 이해Python의 비동기(Async) 개념(async/await, 코루틴, event loop)그리고 이 포스팅을 통해 알 수 있는 내용은 다음과 같습니다.pytest-asyncio의 테스트 스코프(scope)async한 코드의 async한 ..

[Python] UoW(Unit of Work) 패턴을 알아보자
들어가며 UoW 패턴은 저장소 패턴과 더불어 어플리케이션의 DB 접근에 대한 효과적인 추상화 방안을 마련해줍니다. 이번 포스팅에서는 UoW 패턴의 개념과 적용 예시를 정리해보겠습니다. 다음과 같은 개념을 알고 있어야 포스팅을 좀 더 쉽게 이해할 수 있습니다. 계층형(Layered) 아키텍쳐 저장소(Repository) 패턴 Python 컨택스트 매니저(Context manager)의 사용법 UoW(Unit of Work)? UoW는 작업단위로 해석되는 소프트웨어 디자인 패턴입니다. 애플리케이션(ex: API 서버)의 특정 비지니스 로직에서 발생하는 여러번의 변경사항을 한번에 처리합니다. 이를 통해 DB 일관성과 DB 연산의 원자성을 유지할 수 있도록 합니다. 애플리케이션의 비지니스 로직은 복잡해지기 마련..

[Python] SqlAlchemy 1.4 -> 2.0 마이그레이션 단계별 가이드
들어가며 SqlAlchemy 버전 업그레이드 진행 과정에 대해 설명한 포스팅 입니다. 이 글을 통해 다음과 같은 내용을 확인할 수 있습니다 SqlAlchemy 1.4/2.0 버전의 차이 마이그레이션을 위한 단계 각 버전 별 쿼리 스타일의 차이 왜 마이그레이션을 해야할까? SQLAlchemy 2.0 버전은 1.4 버전에서 지원하지 않는 기능들을 추가적으로 제공합니다. SQL 표현식 변경 typing 지원 Declarative(선언형) ORM 모델 개선 bulk insert ORM insert update, upsert 등... 비동기 컨텍스트 매니저 지원 이외에도 버전 업그레이드에 따른 쿼리 성능의 개선이 있었기 때문에 마이그레이션을 통해 얻을 수 있는 기능상의 이점이 상당합니다. 자세한 내용은 다음 공식..

2023 컨트리뷰션 아카데미 소개 및 후기 (feat. Openstack)
들어가며 올해 입사한 회사에서 오픈스택을 다루게 되었다. 이왕 시작한 김에 오픈스택에 대한 기술을 좀 더 알고 싶었고 활용하는 것을 넘어 내가 원하는 기능을 추가하고 버그를 수정하고 싶다는 생각이 들었다. 검색을 이어가던 도중 컨트리뷰션 아카데미에서 오픈스택 팀이 참가하고 있었다. 이번 기회에 오픈스택 Upstream에 기여하고 오픈스택이라는 기술을 잘 알게 될 것이라 생각해 지원해 보았다. 컨트리뷰션 아카데미? 컨트리뷰션 아카데미는 오픈소스에 기여할 수 있도록 멘토, 멘티가 힘을 합쳐 오픈소스에 기여하는 경험을 해보는 프로그램이다. 일반적으로 생각하는 코드 기여뿐만 아니라, 문서 번역, 기능 제안, 이슈 리포팅 등 여러 가지 방법으로 오픈소스 문화에 기여할 수 있는 활동이다. 몇 년 전 오픈소스 컨트리..

[Python] Tox로 여러 환경에서 테스트하기
들어가며 python을 사용해 프로그래밍을 하다보면, python 버전 설치된 패키지의 버전에 따라 프로그램이 작동하지 않을 수도 있다. 새로운 패키지를 설치해 프로그램을 업데이트 했을 때 프로그램이 동작하지 않는 경우도 있으며, 개발환경에서는 잘 동작하던 프로그램이 배포환경에서는 잘 작동하지 않는 경우도 종종 있다. 이러한 문제를 해결하기 위해서는 여러가지 버전과 패키지의 테스트를 자동화 시켜주는 도구인 tox를 소개하고자 한다. Tox란 무엇인가? tox aims to automate and standardize testing in Python. It is part of a larger vision of easing the packaging, testing and release process of P..

[OpenStack] Openstack의 기본개념
들어가며 AWS, Azure, GCP 와 같은 클라우드 서비스는 어떻게 만들어질까? 만일, 어떤 기업이 앞서 언급한 퍼블릭 클라우드 3사의 서비스를 사용하지 않고 자신들이 가지고 있는 리소스를 활용해 클라우드 서비스를 만드려고 한다면 어떤 기술을 사용해야할까? Openstack이 이같은 질문에 대답이 될 수 있을 것이다.(퍼블릭 클라우드 3사는 클라우드를 위한 자체적인 기술스택을 가지고 있다.) 오픈스택은 퍼블릭/프라이빗 클라우드를 구축/관리하는 오픈소스 플랫폼이다. 이번 포스팅에서는 오픈스택의 간단한 개념과 아키택처에 대해 이야기해보려고 한다. Openstack의 이해 역사 오픈스택 프로젝트의 시작은 NASA에서 부터 시작된다. 2010년 7월 당시 랙스페이스(Rackspace)라는 웹 호스팅 기업과 ..