쉬운·기술사전비유로 이해하는 AI·개발 용어
개발자처럼 생각하기

비동기(Async)

Async

줄 서서 기다리지 않고 실행되는 작업이에요.

비동기(Async) 개념 다이어그램

세탁기 앞에 서서 드럼이 도는 걸 지켜보는 사람은 없죠. 빨래를 돌려놓고 자리를 뜨고, 점심을 챙기고, 문자를 답하다가, 알림음이 울리면 돌아와요. 그 한 시간 동안 세탁기는 알아서 제 할 일을 했던 거예요.

그게 async예요. 비동기(asynchronous)의 줄임말인데, 어려운 단어치고 뜻은 단순해요. 느린 작업을 시작해두고 다른 일을 하다가, 결과가 나오면 그때 처리하는 방식이에요.

반대 개념도 이름이 있어요. 동기(Synchronous). 세탁기 앞에 서서 알림음을 기다린 뒤에야 점심을 만드는 방식이에요. 빠른 작업에는 괜찮아요. 뭔가 시간이 걸리는 순간 문제가 생겨요.

컴퓨터가 이 문제를 신경 쓰는 이유.

소프트웨어는 자신이 통제하지 못하는 느린 작업을 끊임없이 기다려요. 느린 건 앱 자체가 아니에요. 앱이 다른 누군가를 기다리는 시간이 문제예요.

이 중 어느 것이든 0.몇 초에서 몇 초가 걸릴 수 있어요. 앱은 그 시간을 마음대로 줄일 수 없고요. 그러면 선택지는 하나예요. 기다리는 동안 멈출 것인가, 계속 움직일 것인가.

경험해봤지만 이름은 몰랐을 거예요.

결제 페이지에서 '결제하기'를 눌렀다고 해봐요.

  1. 나쁜 버전은 화면이 굳어버려요. 버튼이 회색으로 바뀌고, 페이지가 반응을 멈추고, 로딩 스피너만 돌아요. 돈이 빠져나간 건지 아닌지 알 수가 없죠. 이 페이지는 동기식이에요. 결제 요청을 보내고 그 자리에 얼어붙어서, 세탁기 앞에 선 것처럼 답이 올 때까지 아무것도 못 해요.

  2. 좋은 버전은 살아있어요. '처리 중입니다, 잠시만 기다려주세요'라는 메시지가 뜨고, 페이지는 여전히 스크롤되고 정상적으로 작동해요. 이게 async예요. 결제 요청을 보내고 '결과 오면 그때 처리할게'라고 해둔 뒤, 그 사이에도 화면을 정상적으로 유지하는 거예요.

밑에서 하는 작업은 똑같아요. 차이는 앱이 좀비처럼 기다렸느냐, 자리를 뜨고 반응성을 유지했느냐뿐이에요.

실제로 자주 보게 될 단어: await.

느린 작업을 일부러 기다려야 할 때 쓰는 게 await예요. 피자는 오븐 앞에서 기다리되, 세탁은 알아서 돌아가는 상태처럼요. 하나를 의도적으로 멈춰두면서도 집 전체를 얼리지 않는 거예요.

이 단어가 중요한 이유는 세상에서 가장 흔한 async 버그 때문이에요. 데이터가 도착하기도 전에 코드가 먼저 실행되는 거예요. 주문 목록을 가져오는 요청을 보내고, 바로 다음 줄에서 그 주문 목록을 사용하려 하지만, 아직 도착하지 않은 상태예요. 결과는 빈 데이터로 작동하거나 오류가 나요.

직접 겪은 일이에요. 에이전트한테 작은 스크립트를 빌드해달라고 했더니 계속 빈 결과가 나왔어요. 데이터 소스가 망가진 게 틀림없다고 생각했는데, 아니었어요. 스크립트가 데이터를 요청하고, 바로 다음 줄에서 아직 오지도 않은 데이터를 써버린 거였어요. 수정은 한 단어로 끝났어요. fetch 앞에 await를 붙이면 됐거든요.

이걸 직접 작성할 일은 없을 거예요. 하지만 AI가 "페이지가 블로킹되지 않도록 async로 만들게요"라거나 "여기서 응답을 await해야 해요"라고 하면, 이제 무엇을 방지하려는 건지 알 수 있어요. 앱이 세탁기 앞에 서있는 대신, 자기 할 일을 계속 하게 만드는 거예요.

기억해둘 한 문장.

동기는 기다려요. 비동기는 자리를 뜨고 나중에 알림음을 받아요. 느린 작업이 빨라진 게 아니에요. 앱이 그 앞에 서있기를 그만뒀을 뿐이에요.