Windows 코딩

프로그램에서 비동기 방식(Asynchronous)

windows4silver 2024. 12. 2. 07:04

비동기 방식(Asynchronous)

비동기 방식(Asynchronous)은 프로그램에서 작업을 동시에 처리할 수 있도록 하는 방식입니다. 즉, 하나의 작업이 완료되기를 기다리지 않고 다른 작업을 동시에 진행할 수 있도록 하는 방식입니다. 이를 통해 프로그램은 대기 시간을 최소화하고 효율성을 높일 수 있습니다.

비동기 방식의 특징

  1. 작업이 동시에 실행됨: 비동기 방식에서는 여러 작업을 동시에 처리할 수 있습니다. 예를 들어, 네트워크 요청을 보낸 후, 그 응답을 기다리지 않고 다른 작업을 할 수 있습니다.
  2. 대기 시간 최소화: 네트워크 요청, 파일 입출력(I/O), 데이터베이스 쿼리 등 시간이 오래 걸리는 작업을 비동기적으로 처리하면, 다른 작업을 진행할 수 있어 전체 작업 처리 시간이 단축됩니다.
  3. 콜백 함수와 이벤트: 비동기 작업은 작업이 끝났을 때 호출될 콜백 함수이벤트를 등록합니다. 예를 들어, 네트워크 요청이 끝나면 콜백 함수가 호출되어 그 결과를 처리합니다. 이렇게 하면 작업이 완료될 때까지 기다리지 않고 다른 작업을 처리할 수 있습니다.
  4. Non-blocking: 비동기 방식은 블로킹(Blocking)을 방지합니다. 예를 들어, 네트워크 요청을 보냈을 때, 요청이 완료될 때까지 프로그램이 멈추는 것이 아니라, 그 사이에 다른 작업을 계속 처리할 수 있습니다.

동기(Synchronous) vs 비동기(Asynchronous)

  • 동기(Synchronous): 하나의 작업을 끝낸 후, 그다음 작업을 진행합니다. 즉, 작업이 순차적으로 처리되며, 이전 작업이 끝나기 전에 다음 작업을 시작할 수 없습니다.
    • 예: 네트워크 요청을 보내고, 응답이 올 때까지 기다린 후 다른 작업을 시작함.
  • 비동기(Asynchronous): 작업을 보내고, 그 작업이 끝나기를 기다리지 않고 다른 작업을 실행합니다. 결과는 콜백이나 이벤트로 전달받습니다.
    • 예: 네트워크 요청을 보내고, 응답이 올 때까지 기다리지 않고, 다른 작업을 진행하다가 응답이 오면 그 결과를 처리합니다.

예시: 비동기 방식의 동작

  • 비동기 방식의 데이터 요청:
    1. 서버에 데이터 요청을 보냅니다.
    2. 요청을 보내고 난 후, 서버의 응답을 기다리지 않고 다른 작업(예: 사용자 인터페이스 업데이트, 다른 데이터 요청 등)을 진행합니다.
    3. 서버로부터 응답이 오면, 그 응답을 처리하는 콜백 함수나 이벤트가 실행됩니다.
  • 장점:
    • 사용자 경험 개선: 사용자가 대기하는 동안 프로그램이 멈추지 않고 다른 작업을 처리할 수 있습니다.
    • 리소스 효율성: 긴 시간 동안 기다릴 필요 없이 여러 작업을 동시에 처리함으로써 시스템 리소스를 효율적으로 사용할 수 있습니다.
  • 단점:
    • 복잡한 코드 구조: 비동기 코드는 동기 코드보다 이해하기 어려울 수 있으며, 콜백 지옥(callback hell) 등의 문제를 야기할 수 있습니다. 이를 해결하기 위해 프라미스(Promise)async/await 같은 방법이 사용됩니다.

OpenAPI에서 비동기 방식

OpenAPI가 비동기 방식으로 데이터를 요청하고 수신한다는 것은, API 요청을 보내고 그 결과를 기다리지 않고 다른 작업을 진행할 수 있다는 의미입니다. 예를 들어, 주식 거래나 데이터 분석 요청을 보낸 후, 결과가 올 때까지 프로그램은 멈추지 않고 다른 작업을 계속 수행할 수 있습니다. 응답이 오면 그때서야 데이터를 받아와서 처리하는 방식입니다.

키움 OpenAPI의 비동기방식 안내

 

시세조회나 주문 등 함수호출을 통해 서버로 요청하면 서버의 처리 결과를 그에 맞는 이벤트 발생으로 전달합니다. 이벤트는 일반함수와 구별하기 위해 "On~" 으로 시작되는 이름을 갖습니다.

OnEventConnect (로그인처리완료), OnReceiveTRData (조회요청응답), OnReceiveRealData (실시간시세수신) 등의 이름의 함수는 비동기방식이 적용되는 함수입니다.