본문 바로가기
성공지식백과 로고성공지식백과
GLOSSARY

동기·비동기 (Synchronous, Asynchronous)

중급바이브 코딩

이 페이지는 바이브 코딩 문맥에서 자주 쓰이는 동기·비동기 (Synchronous, Asynchronous)의 뜻과 쓰임을 중급 난이도 기준으로 정리한 AI 용어사전 항목입니다. 정의와 맥락, 관련 용어 5개 순서로 묶었으니, 아래 설명을 먼저 읽고 연결된 개념과 글까지 이어서 보면 이해가 빨라집니다.

동기·비동기(Synchronous, Asynchronous)는 작업의 완료를 기다리는 방식에 따라 프로그램의 실행 흐름을 구분하는 개념입니다. 비동기의 병렬 실행 여부와 속도는 작업 구성에 따라 달라집니다. 동기 방식은 호출한 작업이 끝난 뒤 다음 처리를 이어가고, 비동기 방식은 완료를 나중에 전달받도록 구성합니다.

완료를 기다리는 실행 흐름

MDN의 비동기 JavaScript 소개는 오래 걸리는 작업을 시작한 뒤에도 다른 이벤트에 반응할 수 있도록 하는 방식을 설명합니다. 네트워크 응답을 기다리는 동안 화면 입력을 계속 받는 상황이 대표적입니다. 작업을 요청한 시점과 결과를 사용할 수 있는 시점이 다르므로 완료 결과를 이어받는 경로가 필요합니다.

동기 코드는 앞 작업의 결과를 바로 다음 줄에서 사용하는 흐름을 표현하기 쉽습니다. 다만 작업이 오래 걸리고 그동안 같은 실행 흐름이 다른 일을 하지 못하면 응답성이 떨어질 수 있습니다. 비동기 코드는 대기 중 다른 작업을 진행할 여지를 주지만 결과가 오기 전에 그 결과를 사용하지 않도록 순서를 관리해야 합니다. 어떤 작업이 대기하는지와 어느 실행 흐름이 멈추는지를 구분합니다.

동시에 진행 중인 작업이 여럿이라는 뜻과 여러 계산을 실제로 동시에 수행한다는 뜻도 다릅니다. 하나의 실행 흐름이 작업 사이를 오가면서 진행할 수 있고, 여러 실행 자원이 계산을 병렬로 수행할 수도 있습니다. 비동기 함수라고 CPU를 많이 쓰는 계산까지 저절로 나뉘어 실행되지는 않습니다.

Promise와 async·await의 역할

MDN의 async 함수 문서는 async 함수가 Promise를 반환한다고 설명합니다. Promise는 비동기 작업의 결과가 준비되거나 실패한 상태를 이어받는 데 쓰입니다. 함수를 호출한 값 자체를 완성된 데이터처럼 사용하면 아직 결과를 받지 못한 상태에서 후속 처리를 시도할 수 있습니다.

await는 Promise의 완료를 기다린 뒤 해당 함수의 실행을 이어가도록 표현합니다. 코드를 순서대로 읽기 쉽게 만들지만 프로그램 전체를 한꺼번에 멈춘다는 의미는 아닙니다. 기다리는 동안 다른 이벤트가 처리될 수 있으며, 완료 순서는 작업의 실제 소요 시간에 영향을 받습니다. 결과가 서로 의존하는 작업과 독립적인 작업을 구분하면 어디에서 기다릴지 정하기 쉽습니다.

실패 처리도 완료 경로의 일부입니다. 요청이 실패했는데 성공했을 때의 코드만 작성하면 로딩 표시가 계속 남거나 빈 결과를 사용하게 될 수 있습니다. async 함수 안에서는 try와 catch로 실패를 처리할 수 있지만, 어디에서 예외를 받고 어떤 상태로 바꿀지는 코드가 정합니다. 취소와 시간 초과를 어떤 결과로 다룰지도 호출하는 API의 동작과 함께 확인합니다.

비동기 작업의 병목과 순서

Node.js의 이벤트 루프 안내는 이벤트 루프나 작업자 풀이 긴 작업에 막히면 다른 요청의 처리도 영향을 받는다고 설명합니다. 함수 앞에 async를 붙이는 것만으로 그 안의 긴 계산이 별도 작업자에게 옮겨지는 것은 아닙니다. 대기 시간이 긴 작업인지 CPU 계산이 긴 작업인지 나누어야 개선할 지점을 찾을 수 있습니다.

검색창에서 빠르게 여러 요청을 보내면 먼저 보낸 요청이 더 늦게 끝날 수 있습니다. 마지막에 도착한 응답을 무조건 화면에 표시하면 이용자가 방금 입력한 검색어와 다른 결과가 보일 수 있습니다. 요청에 순서를 부여하거나 취소된 요청의 결과를 무시하는 방식으로 현재 상태와 응답을 대응시킵니다. 공유 데이터를 바꾸는 작업도 완료 순서가 결과에 영향을 주는지 확인합니다.

검증에서는 정상 완료뿐 아니라 늦은 응답, 실패, 취소, 일부 작업만 끝난 경우를 확인합니다. 시작 로그만 있다고 작업 완료로 기록하지 않고 실제 완료 결과와 후속 상태를 남깁니다. 여러 작업의 시간을 비교할 때는 개별 소요 시간과 전체 완료 시간을 구분합니다. 요청을 한꺼번에 많이 보내면 외부 서비스의 제한에 걸릴 수 있으므로 동시 실행 수와 재시도 조건도 함께 조절합니다.

RELATED TERMS

관련 용어

동기·비동기 (Synchronous, Asynchronous)와 함께 자주 언급되는 개념들입니다. 비슷한 말처럼 보여도 역할과 쓰임은 다를 수 있습니다.