안녕하세요~ 동기, 비동기 컨셉을 좀 더 설명드리는 것이 좋을 것 같아 답변 남깁니다. 동기와 비동기 개념은 어디에서 나오게 되었을까요? 코딩에서 자연스러운 방식은 둘 중에 어떤 것일까요? 보통
안녕하세요~ 동기, 비동기 컨셉을 좀 더 설명드리는 것이 좋을 것 같아 답변 남깁니다. 동기와 비동기 개념은 어디에서 나오게 되었을까요? 코딩에서 자연스러운 방식은 둘 중에 어떤 것일까요? 보통 일반적인 프로그래밍 언어들은 위에서 아래로 line by line, 한 줄씩 작동합니다. 코드 중간에 다른 함수를 호출한다면, 해당 함수 실행부로 옮겨가 그 함수가 끝나야만 다시 원래 (caller) 실행부분으로 돌아옵니다. 이러한 자연스러운 프로그래밍 작동 방식은 '동기' 입니다. 작성한 코드 순서대로 작동합니다. 즉 순서가 보장됩니다. 그러나 만약, 우리가 호출한 함수에서 실행시간이 너무 오래 걸려 아래줄들이 다 오래 밀려있게 된다면 어떨까요? 우리가 호출한 함수(예를 들어 api 호출)는 아랫줄들에서는 필요가 없는데(independent), 그리고 아랫줄들이 오래 막히지 않고 빨리 먼저 실행됐으면 좋겠는데, 윗줄에서 막혀있다면 일을 효율적으로 하기 어렵지 않을까요? 이럴 때 등장하는 개념이 비동기입니다. 오랜 시간이 걸릴 것 같은, independent한 호출은 비동기로 우선 제쳐두고, 응답이 돌아올 동안 다른 일을 하고 있어~ 라고 생각할 수 있죠. 그리고 응답이 돌아오면 이런일을 해, 에서 나오는 개념이 이벤트 핸들링과 callback입니다. 관련해서 blocking, non-blocking 키워드들도 있지만 우선 개념만 쉽게 설명하다보니 완벽한 개념은 아닐 수 있지만 처음에는 요정도로만 이해해도 괜찮을 것 같습니다. 이 실행부분이 완료되어야만 다른 일을 할 수 있다면 '동기'로 처리해야하고, 이 실행부분은 일단 호출해두고 다른일을 하다가 나중에 시간이 될 때 완료되었다는 신호를 보고 결과물을 가지고 처리해도 된다면 '비동기'로 처리하는 것이 효율적입니다.