공식 문서 : https://fastapi.tiangolo.com/
uvicorn 과 같은 ASGI(Asynchronous Server Gateway Interface)서버 필요
=> ASGI인 uvicorn 때문에 비동기 처리가 가능하다
ASGI
비동기 통신 지원하는 서버
Uvicorn
Python으로 작성된 ASGI 규격을 구현한 비동기 웹 서버
파이썬은 race condition 문제가 발생하는 것을 방지하기 위해 GIL을 이용한다.
따라서 멀티쓰레드 환경을 정상적으로 지원하지 못한다.
비동기적인 특성을 구현하기 위해서는 다수의 쓰레드를 활용해야 하는데 이를 어떻게 구현했을까?
uvicorn은 비동기를 위해 멀티 프로세싱 방식을 이용한다.
async : 비동기 처리 명령어, CPU 코어가 많은 컴퓨터에서 여러가지 일들을 동시에 처리하고 싶을 때 주로 사용
동시 접속자가 많을 때, 즉 동시에 API 요청이 많을 때 좀 더 빠르게 처리할 수 있음
async def create_item():
pass
print("hi")
sleep(4)
create_item()
sleep(4)
print("end")
- async가 없으면 순서대로 동작하는 '동기' 방식
- async가 붙으면 병렬적으로 처리하는 '비동기' 방식
전체적인 구조 : [ASGI Framework] FastAPI - starlette - [ASGI Server] uvicorn - uvloop(cython) - libuv(cpp)
Python의 일반적인 웹서비스 아키텍쳐
gunicorn (WSGI)은 프로세스 매니저로서 Master 프로세스를 띄우고, 단일 Worker 프로세스로 실행하는 uvicorn 프로세스를 여러개 미리 띄워 요청을 처리하는 구조이다.
References
'Backend' 카테고리의 다른 글
카카오 로그인 과정, OAuth 동작 방식 (0) | 2024.06.17 |
---|---|
[Study] 보이저엑스 백엔드 개발자 기술 질문 (1) | 2024.05.29 |