Backend/FastAPI 12

[FastAPI] HTTPException과 Exception 예외처리의 목적과 사용방법

FastAPI에서 주로 발생시키는 에러는 HTTPException, Exception이 있다. 프로젝트를 진행함에 따라서 예외 핸들링을 하게 되는데, 이 두 가지 간에 혼용하여 사용할 경우가 있어 이를 바르게 사용하고자 정리해보겠다. 1. HTTPExceptionHTTPException은 FastAPI에서 HTTP 요청 처리 중에 발생할 수 있는 특정 예외를 처리하기 위해 사용됩니다. 특히나, 주로 클라이언트에게 HTTP 상태 코드와 함께 명확한 오류 메시지를 반환하고자 할 때 사용된다. 주로, 잘못된 요청, 인증 실패, 리소스 없음 등과 같은 HTTP 관련 오류를 명시적으로 나타내기 위해 사용된다. ✔️ HTTPException의 특징HTTP 상태 코드status_code를 인자로 받아 반환할 HTTP..

Backend/FastAPI 2024.06.07

FastAPI PostgreSQL DB 트랜잭션 동기/비동기 처리

🕊️ FastAPI 데이터베이스 처리이번 게시물에서는 FastAPI에서 데이터베이스 처리를 위해 사용하는 두 개의 라이브러리에 대해서 다루어보겠다. 지난 게시물에 이어서 이번에는 ASGI인 FastAPI에서 비동기적으로 수행할 수 있는 Asyncpg에 대해서 설명하고자 하는데, 이를 위해서 동기식으로 동작하는 psycopg2에 대해 다루어볼 것이다. 아래서 내가 제시하는 get_db(), get_db_session()함수 두개는 각자 두개의 라이브러리를 활용하여 작업할 때 필요한 데이터베이스 접근 방식이다. 각자 동기/비동기적으로 접근한다. ✨ psycopg2해당 라이브러리는 "동기식"으로 작동한다.따라서, 요청을 처리하는 동안 다른 작업들은 수행하지 못하고 대기 상태에 있게 된다.  그러나, Djan..

Backend/FastAPI 2024.05.11

CGI, WSGI, ASGI 에 대하여

2년전인 1학년 때, 아무것도 모르는 상태에서 FastAPI를 시작했었는데 당시 FastAPI가 Starlette 과 Pydantic을 기반으로 한 웹 프레임워크이며, ASGI방식을 사용한다는 것을 알게되었다. 🤔 그래서 ASGI방식이 뭔데? 선배가 ASGI방식임을 알려주셨는데, 그게 뭔질 알아야 또 그거말고 뭐가 있는지 알아야 이해를 할텐데 너무 답답했다. (물론 선배가 설명을 못하신게 아니라, 내가 뭐가 있는지 모르니 아무리 설명해줘도 "그게뭔데? 머좋은건데?"라는 생각만 나는 상황..)  최근에, FastAPI공부를 하면서, DB에 접근할 때 session개념이 생기던데 Asynchronous하게/Synchronous하게 접근해야할지 고민했는데 (물론 비동기가 맞다고 생각했다!! 이건 다른 글에서..

Backend/FastAPI 2024.05.10

[Python] FastAPI Logging - correlation ID (middleware & uuid)

✨Build Up이번에 회사에서맡은 일을 해결하는 과정에서 Python FastAPI 서버를 구축하게 되었다. Llama3 모델을 활용하기 위해서 Kotlin + Spring 프로젝트에서는 유연하지 못한 것 같아 모델에 관련된 처리를 Python 서버에서 해결하기로 했고, 완전히 새로운 프로젝트를 만드는 상황이라 Logging과 배포에 관련된 문제를 모두 스스로 해결해야했다. 이번에는 그 과정 중에서도 로깅에 관한 문제를 해결해야한다.어플리케이션 밑에 찍히는 로그도 필요하지만 프로덕션에서는 Opensearch를 통해서 더 손쉽게 로그를 탐색할 수 있어야 하고 나중에는 DataDog을 활용하여 트래픽 분석도 할 수 있어야 한다. 그 중에서도 이번에는 Python FastAPI에서의 Logging에 대해서 ..

Backend/FastAPI 2024.05.03

Precommit Test

원래 글: https://velog.io/@stopmin/Precommit-Test 참고 관련 내용은 저번에 이미 정리해뒀다. 참고자료 이전 정리보다 조금 더 알게된 점은, 아래와 같다. 이 그림에서 딱 3단계로 진행되면 된다고 생각한다는 점이다. 수정 내역을 가져오고 내가 수정한 부분을 커밋하는 것이다. 이걸 upstream에서 바로 해도 되지만 origin을 통해서 하는게 나중에 문제가 생겼을 때 해결하기 좋다는 점이다. precommit test 홀리 몰리 뭐야 원래 안됐었는데 됐다!! 저기 근데 unstaged된거 있다고 하긴 하는데 잘못 건들면 안될 것 같아서 말았다. dev branch에 pull했다. 생각해보니깐 git add . 을 안했다. 그래서 다시 커밋했다. pull request d..

Backend/FastAPI 2024.03.18

AID backend project 추가 정리

원래 글: https://velog.io/@stopmin/AID-backend-project 이번 프로젝트를 진행하면서 배웠던 점을 총합해서 정리한 게시물입니다. 이때까지 정리한 글 개발환경 설정 + 패키지 정리 fork한 repo를 origin에 push Lock 파일 & pre-commit FastAPI Pytest & Github action & Docker CloneCoding (CRUD, ToDO-list) DockerCompose & MongoDB Precommit Test CRUD vs AID_Web project SQLAlchemy 1. 개발환경 설정 + 패키지 정리 Pyenv: 다양한 버전의 파이썬을 관리하는데 사용되었다. Pipenv: 가상환경을 사용하기 위해 사용되었다. 이때 pipf..

Backend/FastAPI 2024.03.18

DockerCompose & MongoDB

원래 글: https://velog.io/@stopmin/DockerCompose-MongoDB 🤔 Docker Compose란 docker compose는 여러 개의 docker container를 모아서 관리하기 위한 툴이다. 웹 서비스는 일반적으로 프론트엔드 서버, 벡엔드 서버, 데이터베이스 서버로 구성되기 때문에 각 서버를 docker container로 연결하여 동작시키고 docker compose를 사용하여 해당 컨테이너들을 관리하는 것이다. 사용 방법 각각의 컨테이너의 Dockerfile를 작성한다(기존에 있는 이미지를 사용하는 경우는 불필요). docker-compose.yml를 작성하고, 각각 독립된 컨테이너의 실행 정의를 한다(경우에 따라는 구축 정의도 포함). "docker-compo..

Backend/FastAPI 2024.03.18

SQLAlchemy

원래 글: https://velog.io/@stopmin/SQLAlchemy ✏️ 정리 계기 저번에 CRUD,TODO 클론코딩하고 쓴 게시물에 보면 계속 import sqlalchemy하던데 저게 정확히 무슨 기능을 하는지 궁금했다. 그런데 당장에 정리하기에는 좀 버거움이 있고, 내용이 상당히 많은지라 따로 정리하면 좋을 것 같아서 이렇게 따로 정리하길 다짐했고 더 늦기 전에 지금 해둬야겠다고 생각했다! 🤔 ORM이 무엇인가? 이번 내용이 방대하게 느껴졌던 이유는 먼저 ORM이 무엇인지에 관해 알아야 했기 때문이다. ORM(Object Relational Mapping)이라 함은, 객체-관계 매핑이다. 객체 관계 mapping? 데이터베이스 내의 리소스(테이블)들을 객체화하여, 각 DBMS(MySQL, ..

Backend/FastAPI 2024.03.18

[FastAPI] CloneCoding (CRUD, ToDO-list)

https://velog.io/@stopmin/FastAPI-CloneCoding-updatedelete 목표 이번에 나온 미션은 FastAPI를 활용해서 to-do페이지를 만드는 것이었고, 학습의 용이성을 위해서 클론 코딩을 통해서 학습 방법을 제안해주셔서 제시해준 유튜브 링크를 통해 학습을 하는게 목표였다. 😵 매우 큰 실수를 하였다 보내주신 유튜브 계정에 많은 자료들이 있길래 구경을 하다가보니 헷갈려서 to-do가 아니라 CRUD를 만들어버렸다. 물론 이걸 나중에 알아채고 급하게 to-do도 해보았고.. 결국에 어쩌면 잘못 확인한 일이 되려 이익을 준 것 같기도 하다. 왜냐하면, CRUD페이지는 곧 Create, Read, Update and Delete기능을 구현하는 페이지로 어차피 to-do페이..

Backend/FastAPI 2024.03.18

Pytest & Github action & Docker

원래 글: https://velog.io/@stopmin/Pytest-Github-action Pytest 🤔 PYTEST 현재 어떠한 platform에서 작동하고 있고, 어떤 에러가 발생했는지 그리고 마지막에 요약을 통해 총 몇 개의 테스트가 통과(pass), 실패(fail)했는 지와 함께 총 테스트 시간을 알려준다. "pytest is a mature full-featured Python testing tool that helps you write better programs." Test Driven Development 테스트 주도 개발이라고 한다. 반복 테스트를 이용한 소프트웨어 방법론으로 작은 단위의 테스트 케이스를 작성하고 이를 통과하는 코드를 추가하는 단계를 반복하여 구현한다. 최근 이러한 ..

Backend/FastAPI 2024.03.18