Python asyncio에 대한 탐구
·
탐구 생활/python
Python Web 개발을 FastAPI로 시작하다보니 비동기 상태에서 Python을 다루는게 너무나 당연했습니다. 그동안 막연히 Python을 비동기적으로 쓰려면 asnyc 를 써야지 생각만해왔습니다. 주말을 맞이해서 이번에 그 기반을 닦아보려고 합니다. 오늘은 그래서 asyncio 는 무엇인지 그리고 왜 필요한지, node.js 그리고 Java 와의 차이점은 무엇인지 등을 알아보고 정리하려 합니다.asyncio란 무엇인가?공식 문서에서는 asyncio를 “async/await 문법을 이용하는 동시성(concurrent)처리를 위한 라이브러리" 라고 소개하고 있습니다. 이러한 asyncio 라이브러리를 이용하여 IO bound 되어있는 작업을 효율적으로 처리할 수 있고, 이러한 이유로 고성능 웹 프라임..
Python의 Type System
·
탐구 생활/python
gRPC에 대해서 알아보던중 pyi 파일을 처음 보았고, 이 파일이 Python Type System 중 하나인 stub file 이라는 것을 알게되었습니다. stub file 이 무엇인지 궁금해졌고, 이 궁금증은 Python의  Type System 전체로 확장되었습니다. 전반적인 내용을 정리해보고자 합니다. Python 공식문서중 TypeHint Guide에서 많은 내용을 참고했습니다. 왜 Type System이 필요한가?우선 프로그래밍 언어를 구분할때 다음과 같은 기준이 있습니다.타입 캐스팅이 자유로운지에 따라 강 타입/약 타입컴파일시 타입을 체크하는지에 따라 정적 타입/동적 타입이러한 기준에서 봤을때 Python은 약 타입이자, 동적 타이핑 언어입니다. 즉 명시적인 타입 캐스팅 없이 타입 변환이 ..
python gRPC (2) - 기본 구조와 python 구현
·
탐구 생활/python gRPC
지난글에서 RPC (gRPC) 를 선택한 이유를 알아봤습니다. 이제는 python 에서 어떻게 gRPC 를 사용할 수 있는지 공유하겠습니다..proto 파일RPC는 엄격한 규칙을 따르기 때문에 IDL(Interface Definication Language)이 제공됩니다. 특히 구글에서 만들고 배포하는 gRPC는 관련 문서와 tool이 잘 구비되어 있어서 구현하기 용이합니다. gRPC를 구현하기 위해 가장 먼저 해야할 것은 서버와 메시지 규약을 정하는것입니다. 이러한 규약은 .proto 파일에 정의됩니다.Service 와 MessagegRPC는 Service를 통해서 호출될 함수를 정의하고, Message 를 통해서 호출 파라미터, 응답 값을 정의합니다.아래 예제는 protobuf bestpractice..
python gRPC (1) - 왜 gRPC 를 선택했나
·
탐구 생활/python gRPC
MSA를 구현할때 각 서비스별로 분리된 데이터베이스를 관리합니다. 이 상황에서 화면으로 전달될 데이터가 하나의 서비스에 국한될 가능성은 거의 없을 것입니다. 이때 BFF 와 같이 각 서비스와 통신하여 데이터를 모아주는 역할을 하는 서비스가 존재하게 됩니다.이때 데이터를 동기화하는 다양한 패턴이 있지만, 실시간으로 데이터를 동기화해야하는 경우에는 gRPC 가 적합하다 판단했습니다. 이 글에서는 왜 그렇게 생각했는지 정리했습니다.MSA 에서 데이터 동기화 패턴Chris Richardson의 Microservice Pattern에 따르면 이라는 용어가 적합하지 않을 수 있습니다. 이 글에서 말하는 데이터 동기화 패턴이란 마이크로 서비스 환경에서 사용자의 요구에 따라 일관성있는 데이터를 전달하기 위한 패턴으로..
FastAPI log (4) - 개선하기
·
탐구 생활/FastAPI Log
이 시리즈는 AWS EKS & FastAPI 환경에서 로그를 적용하는 과정을 다루고 있습니다. 전체 시리즈는 다음과 같습니다.- FastAPI log (1) - AWS EKS Fargate 환경에서 log 를 외부시스템에 보내기- FastAPI log (2) -AWS EKS Fargate, 왜 Fluent Bit 인가?- FastAPI log (3) - 설계, 구현- FastAPI log (4) - 개선하기이전 글에서 FsatAPI 의 request, stacktrace를 logging 하는 Middleware 를 만들었습니다. 하지만 이러한 구현 접근에는 결정적인 오류와 개선사항이 있습니다.오류결정적인 오류는 Middleware 에서 Exception 을 catch 하고 있다는 점입니다. FastAPI..
SQLAlchemy read-only session
·
탐구 생활/개발 탐구
SQLAlchemy 도 Spring의 Transaction 처럼 read-only 를 만드는 기능이 있는지 물어보는 질문이 있었습니다. 이 글의 답변에도 작성했지만, 저도 SpringBoot 를 사용할때는 Transaction 격리수준, 전파수준 등을 엄청 신경썼었는데 FastAPI&SQLAlchemy 를 사용하면서 한번도 이런 고민을 안했습니다.이게 개별 비즈니스 로직을 간단하게 유지할 수밖에 없는 프레임워크의 장점아닌 장점이라고 생각하면서 SQLAlchemy 에서 read-only transaction 을 만드는 방법을 알아보았습니다.  Does SQLAlchemy automatically create a transaction for read-only operations?I am currently l..
FastAPI ErrorHandling 과 CORS (3) - 문제 해결
·
탐구 생활/FastAPI CORS
FastAPI 에서 ErrorHandling 하는 과정에서 CORS 문제가 발생하는 이슈와 그 원인을 그리고 그에 따른 사람들의 대응을 알아봤습니다. 그리고 저는 문제의 원인이 Starlette에 있다고 생각했고, 나름대로 연구하여 Starlette codebase 에 코드 3줄을 추가하여 이러한 문제를 해소할 수 있는 방법을 찾았습니다. 당장이라도 Starlette 에 PR 을 올리고 싶었지만, 의외로 다른 사람들의 더 나은 대안을 가지고 있거나 FastAPI 나 Starlette 에서 이미 관련 이슈를 해소할 계획일 있을지도 모르기 때문에 우선 discussion 을 이용하기로 했습니다.FastAPI Discussion[discussion link]이 문제가 FastAPI 에 문서화 될 계획이 있다면..
티스토리 스킨 hELLO 에 기여해보기
·
탐구 생활/개발 탐구
이전에 FatAPI 의 문서 번역에 기여한것에 이어서 FastAPI 의 공식문서에 내용을 변경하는 등 기여를 하고 있는중이다. 오픈소스 초보자의 FastAPI 기여하기회사에서 FastAPI 로 전환을 하기에 FastAPI Document 를 보면서 공부중이었다. 한국어로 번역된 문서도 있는반면 영어 그대로인 문서들도 있었다. 왜일까? 하고 찾아보던중 FastAPI Github 에서 번역활동probehub.tistory.com   FastAPI 에서 기여하는 흐름은 이런식이다.[Fork 를 한다] -> [적절한 이름의 Branch 를 만든다] -> [변경하고자하는 사항을 변경하고 PR을 올린다] -> [리뷰를 받는다] -> [머지 혹은 리젝된다] 하지만 이번에 티스토리 hELLO 에 기여했던 흐름은 전혀 ..