개발자

동기와 비동기에 대해

2022년 10월 27일조회 501

제가 잘 이해한건지 궁금해서 질문합니다 동기는 데이터요청 -> 처리 -> 리턴 -> 해당 리턴값 사용 -> 데이터 요청 ->처리 -> 리턴 -> 해당 리턴값 사용 이러한 형식으로 리턴을 하고 다음 요청을 받아들인다 비동기는 데이터요청 -> 처리 -> 리턴 여기까지만 하고 해당 값이 필요할때 리턴값을 사용한다

이 질문이 도움이 되었나요?
'추천해요' 버튼을 누르면 좋은 질문이 더 많은 사람에게 노출될 수 있어요. '보충이 필요해요' 버튼을 누르면 질문자에게 질문 내용 보충을 요청하는 알림이 가요.
profile picture
익명님의 질문

답변 2

인기 답변

김대현님의 프로필 사진

팀장님이 저한테 와서 일을 지시하는데, "A님, C작업 해주세요."라고 말하고, 뒤에서 다될 때까지 기다리고 있으면 동기식이고요, "A님, C작업 다하시고 나면 저한테 알려주세요"라고 말하고 자리로 가버리면 비동기식입니다. 어떤 함수를 호출하고 결과가 나올 때까지, (코드의 순서상) 다음 명령이나 함수 호출까지 진행되지 않고 차례로 진행하는 보통의 방식이 동기식입니다. 반면, 비동기식은 어떤 함수를 호출하고, 그 결과에 대해서 기다리지 않고, 다음 명령이나 함수 호출로 진행되게 됩니다. 그러면 비동기식은 그 결과를 어떻게 하느냐? "결과가 나오면 결과에 따라 어떤어떤 작업을 해줘"라고 요청을 해두게 되며, 그 요청은 해당 작업이 완료된 시점에 수행되는 경우가 많습니다. 콜백함수를 전달해 두는 형식으로 요청하게 되며, 그 일을 실제로 수행하는 어떤 주체가, 특정 시점에 콜백 함수를 호출해주는 식입니다. I/O 작업처럼 CPU 시간 대비 오래걸리는 작업을 할 때, 메인스레드가 멍청히 기다리기보다 다른 일을 하는데 도움이 되기도 하고요, 자바스크립트 환경처럼 싱글스레드 환경에서는 비동기식으로 많이 작업하게 됩니다. 단일 스레드인 메인스레드가 멍청히 기다리고 있으면, 먹통이 되는 문제가 있으니까요. 팀장님이 내가 업무를 완수할 때까지 뒤에서 가만히 서있으면 곤란한 것과 비슷하죠. ^^ (아 그렇다고, 무조건 비동기식이 좋다는 건 아닙니다. ) 답변이 추상적이었는데요, 다른 분이 추가 답변 달아주시면, 저도 잘 읽어보겠습니다.

류인아님의 프로필 사진

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

지금 가입하면 모든 질문의 답변을 볼 수 있어요!

현직자들의 명쾌한 답변을 얻을 수 있어요.

또는

이미 회원이신가요?

목록으로

실무, 커리어 고민이 있다면

새로운 질문 올리기

지금 가입하면 모든 질문의 답변을 볼 수 있어요!