궁금한게 많은 열아홉
article thumbnail
🚨 본 글은 필자의 친구들, 후배들에게 동기 / 비동기에 대해 쉽게 설명하기 위해 간략히 작성한 글입니다 :)

 

며칠 전 본의 아니게 친구의 대화를 듣게 되었는데 나로썬 약간의 충격이었다.

Javascript의 async/await에 대해 얘기하던 중 동기와 비동기 관련 얘기가 나왔고, 한 친구는 이런 말을 내뱉게 된다.

 

"근데, 동기와 비동기가 뭐야?"

그 친구의 강렬한 한 마디는 아직까지도 내 머릿속에 맴돌고 돌았다.(하지만 엄청 놀랍진 않았다... 니 덕분이야 연진아,)

처음엔 모를 수도 있지... 했는데 점점 모를 수가 있나...? 모르면 안될것 같은데...? 라는 생각이 무한 루프를 탔고, 결국 이 글을 적게 되었다.

 

설명을 위해 쉽게 예시도 들어놨으니 꼭 읽고 이해가 되었으면 좋겠다.

 

우리는 학교에서 정해진 일과대로 수업을 듣는다. 적게는 1교시 부터 6교시 까지 많게는 11교시까지.

각 교시는 정해진 '시간'이 있으며, 우리는 1교시가 끝나야 2교시를 들을 수 있고, 그 다음 수업을 진행 할 수 있다.

즉, 수업이 시작되고 끝이 나야 다음 수업을 시작 할 수 있다는 의미이다.

 

이것이 바로 "동기(Synchronous)"이다. 당신은 방금 일과표 하나로 동기를 다 이해했다.

 

조금더 컴퓨터와 관련해서 설명하자면, 컴퓨터에는 일하는 녀석(=Thread[쓰레드])이 있다.

동기의 경우, 이 녀석은 자신이 처리 해야할 일이 있는데, 하나의 일이 끝나야 다음 일을 진행 할 수 있는 것이다.

이렇게 일을 하게 되면 이 녀석 혼자 처리하기 때문에 '시간'이 오래 걸린다는 단점이 있다.

 

그래서, "비동기(Asynchronous)" 라는 개념이 등장한 것이다.

예를 들어, 내가 오늘 해야 할 일이 몇 가지 있다고 하자.

 

저 일을 순서대로 하나 씩 해도 괜찮지만, 이렇게도 가능하지 않은가?

이를 테면, 음악을 들으면서 운동을 한다던지. 과제가 제출 되는 동안 깃허브 커밋을 한다던지.

즉, 하나의 일이 마무리 되지 않아도 다음 일을 시작 할 수 있다.

 

이것이 바로 "비동기(Asynchronous)" 이고, 당신은 방금 비동기에 대해 단번에 이해했다.

 

컴퓨터와 관련해 설명을 하자면, 컴퓨터 속 Thread는 여러개가 존재한다. 즉, 일하는 녀석이 여러 명이라는 말이다.

Thread1이 만약 일을 하고 있으면, 기다리지 않고 Thread2에게 다음 해야 할 일을 넘겨 진행 할 수 있다.

이렇게 일을 하면 여러 사람이 한 번에 일처리를 하기 때문에 효율적인 작업이 가능하다.


그렇다면, 당신은 이렇게 생각할 수도 있을 것이다.

"비동기가 효율적인 작업이 가능한거면, 동기는 왜 필요한거지?"

 

이에 대한 답변은 "동기가 꼭 필요한 경우가 있기 때문이다." 라고 할 수 있다.

우리가 등교할 때 교복을 입어야 학교를 갈 수 있는 것 처럼. 순서대로 처리해야 할 작업이 있다. 이때 동기를 사용한다.

 

이제 조금 이해 가는가? 프로그래밍을 할 때 어떤게 필요한 지 잘 따져보고 맞게 사용하길 바란다.

+) 본 내용이 간략히 설명되어있기 때문에 조금 더 찾아보길 권장한다.

(브라보~~ 멋지다 연진아 ~~!!)

profile

궁금한게 많은 열아홉

@jjin502

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!