API 서버를 prod 환경에서 띄울 때 어떻게 하는 것이 가장 좋을까? 기본적으로 애플리케이션을 실행 시키는 방법은 다음과 같다. ( 아래는 fastapi 앱을 실행시키는 명령어이다. ) gunicorn main:app --workers 4 -k uvicorn.workers.UvicornWorker --bind unix:/tmp/gunicorn.sock 이렇게 하면 애플리케이션을 띄우고 트래픽을 받을 수 있다. 이대로 마쳐도 되지만 앱이 crash등의 이유로 죽는 상황에 대해 한 번 더 생각해 볼 수도 있다. 우리 서비스는 ECS fargate로 띄워서 서버가 죽는다면 ECS 에서 자동으로 오토스케일링되어 새로 띄운다. 하지만 죽은 서버를 띄우는데 상대적으로 시간이 걸려 딜레이가 발생한다. 요 부분을 ..
만들게 된 계기 Django에서 테스트 코드를 작성할 때 테스트용 객체를 생성해 주는 factory_boy 라이브러리를 사용해 좀 더 손쉽게 테스트코드를 작성할 수 있었다. 마찬가지로 FastAPI에서도 사용하기 위해 factory_boy의 SQLAlchemyModelFactory를 사용하고자 했으나 다음과 같은 문제가 있었다. session 동적 할당이 불가능하다. 클래스를 정의하는 시점에 Meta 클래스 내 sqlalchemy_session에 session을 정의해주어야 한다. 이 방식은 테스트코드 런타임에 session을 동적 할당하는 것이 불가능해서 session 기반의 데이터들이 테스트 전반에 영향을 미치는 문제가 있다. 아래는 sqlalchemy_session에 session을 할당하는 예시이..

신규 API 서버에서는 Oauth 방식의 SNS로그인과 JWT를 사용한 토큰 기반의 인증/인가 방식을 구현하였다. 토큰 기반의 인증 방식을 사용한 이유는 다음과 같다. 기존 API 서버에도 동일한 인증 방식을 쉽게 적용할 수 있다. 서버에서 디비 조회 없이도 검증이 가능하다. 개념 설명은 다른 포스팅에서 다루도록 하고 구현에 집중하여 살펴보겠다. 스펙 Python 3.12 FastAPI 0.103.1 구현 Access Token 사용 유저의 인가(Authorization)를 검증할 때 access token이 유효한지로 판단한다. access token에는 서비스에 필요한 유저 정보와 만료일자 등이 포함되며 해당 포스팅에서는 다음과 같은 데이터를 포함한다. { user_id: int, user_devic..
fastapi를 사용하며 공부한 pydantic에 대해 주요 내용들을 간단하게 정리해 보았다. pydantic 이란? pydantic은 데이터 검증 라이브러리로 데이터에 대한 유효성 검사와 직렬화를 제공한다. type annotation 만으로 유효성 검사를 진행하기 때문에 간결하게 구현 가능하다는 장점이 있다. model pydantic에서 스키마를 정의하는 주요 방법 중 하나는 모델을 사용하는 것이다. 모델은 pydantic.BaseModel을 사요삭하고 필드를 주석이 달린 attribute로 정의하는 단순한 클래스이다. python dataclass와 유사하지만 유효성 검사, 직렬화 및 json 스키마 생성과 관련된 특정 워크플로우를 간소화하는 중요한 차이가 있다. 다음과 같이 user model이..
- Total
- Today
- Yesterday
- kubectl
- elk
- sns로그인
- factory_boy
- async
- kibana
- jwt로그인
- Supervisor
- promethus
- grafana
- numble
- JWT
- logstash
- bugfix
- ArgoCD
- NCP
- Pydantic
- gradle
- supervisord
- coroutine
- miniproject
- fastapi
- Project
- DevOps
- OAuth
- pytest
- await
- kubernetes
- GitOps
- elasticsearch
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |