FastAPI/FastAPI
FastAPI에서의 동시성 처리
FastAPI에서의 동시성 처리
2023.11.29스프링 같은 경우는 Tomcat (서블릿 컨테이너) 을 웹 서버로 사용해 동시성을 처리한다. 서버 컴퓨터에다가 자바 기반으로 작성된 Tomcat을 프로세스로 실행시키고 Tomcat 프로세스의 쓰레드로 스프링 애플리케이션을 실행시킨다. Tomcat에 동시에 100명의 사용자가 접속하는 경우 Tomcat은 100개의 쓰레드를 생성하고 (쓰레드 풀의 개수에 따라 달라질 수 있다) 각 쓰레드들은 디스패처 서블릿으로 접근하고 디스패처 서블릿은 요청을 처리하는 메서드로 쓰레드들을 안내해준다. 이런 방식으로 멀티쓰레딩 방식으로 동시성을 처리하고, 각 쓰레드들은 스프링 컨테이너의 빈을 공유하며 메모리를 효과적으로 사용한다. 파이썬은 자바와는 다르게 인터프리터 언어이고, Global Interpreter Lock 이라는..
[FastAPI] SQLAlchemy
[FastAPI] SQLAlchemy
2023.11.06SQLAlchemy는 파이썬의 ORM 기술으로 자바 진영의 JPA와 유사한 부분이 많다. JPA의 영속성 컨텍스트와 1차 캐시 : SQLAlchemy의 Session객체 N+1 문제를 해결하기 위한 JPA의 fetch 속성 : SQLAlchemy의 joinedload(), subqueryload() JPA의 @Entity : SQLAlchemy의 declarative_base() @ManyToOne, @OneToMany : relationship() 이렇듯 같은 ORM 기술이다 보니 비슷한 개념을 공유하고 있어 JPA에 익숙하다면 SQLAlchemy도 어렵지 않게 적응할 수 있다. Core SQLAlchemy의 Core는 데이터베이스별 SQL과 스키마 정의를 위한 시스템으로, SQL 대신 Python코드..
[FastAPI] 요청과 응답
[FastAPI] 요청과 응답
2023.11.02FastAPI는 내부적으로 Pydantic 모델을 사용해 데이터의 유형을 선언하고 데이터를 검증하며 데이터를 전달한다. Pydantic은 Python의 데이터 파싱 라이브러리로, FastAPI에서는 JSON과 Python 객체간 데이터 변환, 데이터 전송 형식 검증에 사용된다. 스프링에서는 @Valid 애너테이션을 사용해서 객체를 검증했는데 FastAPI에서는 Pydantic이 비슷한 역할을 수행한다. class SubjectListResponse(BaseModel): selected_subject: str subjects: list @subject_router.get("/get-list", response_model=schemas.SubjectListResponse) def fetch_subject_l..