더북(TheBook)

1.1.1 블로킹 코드 문제

각 블록의 코드가 실행되기 전에 이전 블록 실행이 완료되기를 기다리게 하면 동기 실행이 이루어집니다. 일련의 프로세스가 완료될 때까지 기다려야 한다는 짐을 사용자에게 전가하기 때문에 의심할 필요 없이 단연코 가장 쉬운 코드 구현 방법입니다. 현재 ATM 기계, 판매 관리 시스템, 단순 단말기 같은 많은 시스템이 이 방식을 따르고 있습니다. 이 방식으로 코드를 작성하면 코드의 파악과 유지, 그리고 디버깅이 훨씬 더 쉽습니다. 그러나 불행히도 자바스크립트의 단일 스레드 특성 때문에 AJAX 호출이 결과 반환을 기다리거나 데이터베이스 작업이 완료되기를 기다리는 등의 장기 실행 작업은 동기로 실행해서는 안 됩니다. 동기 실행을 하게 되면 사용자들은 끔찍한 경험을 하게 됩니다. 데이터를 불러올 때까지 전체 애플리케이션이 유휴 상태로 기다려야 하고 다른 코드를 실행할 수 있는 소중한 컴퓨터 사이클이 낭비되기 때문입니다. 또한, 이렇게 하면 실행하려는 다른 작업의 추가 진행이 블로킹1되어 결국 그림 1-1과 같이 부하 시간이 인위적으로 길어집니다.

▲ 그림 1-1 프로그램이 두 프로세스를 동기로 호출한다. 이때 프로세스는 함수 호출이나 I/O 프로세스 또는 네트워크 처리처럼 간단할 수 있다. 프로세스 1이 실행되는 동안에는 다른 프로세스의 실행을 블로킹한다.

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.