Async & Await는 무엇인가?

Ohyuchan·2023년 7월 12일
0

FastAPI

목록 보기
5/5
post-thumbnail

🤔 FastAPI와 async

Path parameter과 Query Parameter의 실습을 하기 전에 FastAPI에 대해서 공부하다보니
FastAPI의 async def에 관해 작성된 페이지인 Concurreny and async/await를 보았다.

우선 기본적으로 FastAPI는 async def 를 꼭 사용할 필요는 없다고 한다.
def 만으로도 비동기 처리 되도록 FastAPI 프레임 워크로 구현하고 있다고 한다.

🧐 그럼 어느때 사용하는 것인가?


다음과 같이 await로 호출하도록 가이드를 하는 서드 파티 라이브러리를 사용하는 경우

results = await some_library()

다음과 같이 선언해서 사용하라고 한다.

@app.get('/')
async def read_results():
	results = await some_library()
	return results

❓그래서 언제 사용하는 것인가?


이러한 키워드는 주로 I/O 작업과ㅏ 같은 블로킹 작업을 처리하기 위해 사용된다.

FastAPI에서 async와 await를 사용하는 것은 클라이언트 요청을 동시에 처리하고,
I/O 작업을 효율적으로 처리하여 애플리케이션의 성능을 향상시킬 수 있는 장점이 있습니다.

비동기 처리

  • 비동기 처리란 특정 코드의 연산이 끝날 때까지 코드의 실행을 멈추지 않고 다음 코드를 먼저 실행하는 특성을 의미
    • 비동기 처리가 필요한 이유를 생각해보며느 화면에서 서버로 데이터를 요청했을 때 서버가 언제 그 요청에 대한 응답을 줄지도 모르는데 마냥 다른 코드를 실행 안 하고 기다릴 순 없기 때문
    • 특정 로직의 실행이 끝날 때까지 기다려주지 않고 나머지 코드를 먼저 실행하는 것이 비동기 처리

콜백 함수

  • 콜백(Callback) 함수를 사용하면 특정 로직이 끝났을 때 원하는 동작을 실행 가능
  • 콜백 함수의 동작 방식은 일종의 식장 자리 예약과 같음
    • 만약 식당에서 자리가 생기면 전화로 자리가 났다고 연락
    • 일반적으로 맛집을 가면 사람이 많아 자리가 없어서 대기자 명단에 이름을 쓴 다음에 자리가 날 때까지 대기
    • 전화를 받는 시점이 여기서의 콜백 함수가 호출되는 시점과 같음
      • 손님 입장에서는 자리가 날 때까지 식당에서 기다리지 않고 근처 가게에서 잠깐 쇼핑을 할 수도 있고 아니면 다른 식장 자리를 알아볼 수도 있음
        • 자리가 났을 때만 연락이 오기 때문에 미리 가서 기다릴 필요도 없고, 직접 식장 안에 들어가서 자리가 비어 있는지 확인할 필요도 없음
          - 자리가 준비된 시점, 즉 데이터가 준비된 시점에서만 원하는 동작(자리에 앉는다, 특정 값을 출력한다 등)을 수행할 수 있음

Async & Await란?

  • 파이썬은 비동기 코드 코루틴 (coroutines) 를 async 와 await 으로 지원하고 있음
    - 비동기식 코드는 언어가 프로그램에게 코드의 특정 지점에서 다른 작업이 다른 곳에서 끝날 때까지 기다려야 함을 선언하는 방법을 가지고 있음을 의미

  • 코루틴은 async def 함수로 반환 된 것을 용어로 표현한 것으로, 파이썬은 함수 같이 코루틴이 시작될 수 있고 어느 시점에 끝날 지 알고, await 가 있을 때마다 내부적으로 일시 중지 될 수 있다는 것도 알고 있음

  • 다른 작업을 기다린다는 의미를 다음과 같은 표현으로 나열할 수 있음
    - 클라이언트가 네트워크를 통해 보낼 데이터
    - 시스템이 읽고 프로그램에 제공할 디스크의 내용
    - 프로그램이 디스크에 쓰기 위해 시스템에 제공한 내용
    - 원격 API 작업
    - 완료할 DB 작업
    - 결과를 반환하는 DB 쿼리

  • 기본적으로 FastAPI는 async def 를 꼭 쓸 필요는 없음
    - def 만으로도 비동기 처리 되도록 FastAPI 프레임 워크로 구현

profile
안녕하세요

0개의 댓글