Async & Await
비동기 처리
- 비동기 처리란 특정 코드의 연산이 끝날 때까지 코드의 실행을 멈추지 않고 다음 코드를 먼저 실행하는 특성을 의미
- 특정 로직의 실행이 끝날 때까지 기다려주지 않고 나머지 코드를 먼저 실행하는 것이 비동기 처리
- 비동기 처리가 필요한 이유를 생각해보면, 화면에서 서버로 데이터를 요청했을 때 서버가 언제 그 요청에 대한 응답을 줄지도 모르는데 마냥 다른 코드를 실행 안 하고 기다릴 순 없기 때문
콜백 함수
- 콜백 (Callback) 함수를 사용하면 특정 로직이 끝났을 때 원하는 동작을 실행 가능
- 콜백 함수의 동작 방식은 일종의 식당 자리 예약과 같음
- 일반적으로 맛집을 가면 사람이 많아 자리가 없어서 대기자 명단에 이름을 쓴 다음에 자리가 날 때까지 대기
- 만약 식당에서 자리가 생기면 전화로 자리가 났다고 연락
- 그 전화를 받는 시점이 여기서의 콜백 함수가 호출되는 시점과 같음
- 손님 입장에서는 자리가 날 때까지 식당에서 기다리지 않고 근처 가게에서 잠깐 쇼핑을 할 수도 있고 아니면 다른 식당 자리를 알아볼 수도 있음
- 자리가 났을 때만 연락이 오기 때문에 미리 가서 기다릴 필요도 없고, 직접 식당 안에 들어가서 자리가 비어 있는지 확인할 필요도 없음
- 자리가 준비된 시점, 즉 데이터가 준비된 시점에서만 원하는 동작 (자리에 앉는다, 특정 값을 출력한다 등) 을 수행할 수 있음
Async & Await 란?
- 파이썬은 비동기 코드 코루틴 (coroutines) 를
async
와 await
으로 지원하고 있음
- 비동기식 코드는 언어가 프로그램에게 코드의 특정 지점에서 다른 작업이 다른 곳에서 끝날 때까지 기다려야 함을 선언하는 방법을 가지고 있음을 의미
- 코루틴은
async def
함수로 반환 된 것을 용어로 표현한 것으로, 파이썬은 함수 같이 코루틴이 시작될 수 있고 어느 시점에 끝날 지 알고, await
가 있을 때마다 내부적으로 일시 중지 될 수 있다는 것도 알고 있음
- 다른 작업을 기다린다는 의미를 다음과 같은 표현으로 나열할 수 있음
- 클라이언트가 네트워크를 통해 보낼 데이터
- 시스템이 읽고 프로그램에 제공할 디스크의 내용
- 프로그램이 디스크에 쓰기 위해 시스템에 제공한 내용
- 원격 API 작업
- 완료할 DB 작업
- 결과를 반환하는 DB 쿼리
- 기본적으로 FastAPI는
async def
를 꼭 쓸 필요는 없음
def
만으로도 비동기 처리 되도록 FastAPI 프레임 워크로 구현
Tip! 추가 자료
FastAPI 에서 non-async 함수 비동기로 처리하기