상세 컨텐츠

본문 제목

비동기식 프로그래밍이 필요한 이유

노베이스도 이해하는 공학이야기

by Tabris4547 2023. 7. 25. 23:41

본문

728x90

현대인의 삶은 바쁩니다.

직장인을 기준으로 이야기해볼까요?

일상의 대부분을 투자하는 직장에 집중해야지

일 끝나면 자기개발해야하지

몸 상하지 말라고 건강관리해야지

재산 불릴려고 재태크하지

미래를 위한 결혼준비도 해야하지

(누군가는 "저는 저기서 몇개는 안하는 데스요?"

하실 수 있겠지만

몇 개 안하더라도 여러가지를 하는 건 팩트)

이렇게 우리의 삶이 바쁜데

프로그램 하나 느릿느릿하면 성질나겠죠?

바쁜 현대인에 맞게 프로그램도 여러가지 일을 수행할 수 있습니다.

프로그램 안에 여러 동작들을 수행하는 프로그래밍,

비동기식 프로그래밍을 소개합니다.

 

왜 비동기식 프로그래밍을 해야할까?

우선 동기식 프로그래밍을 보겠습니다.

우리가 흔히하는 프로그래밍 기법인데요

쉽게 생각하면 '서로 간에 유기적 연결로 동작한다'라고 보시면 됩니다.

A를 동작하면 B를 하고, B를 하면 C를 하고 이런 식이죠.

A->B->C이렇게 순차적으로 실행이 되죠.

 

반면 비동기식 프로그래밍은 분업과 비슷합니다.

A B C 세가지 일이 동시에 진행이 되는 거죠.

왜 여러가지 일을 동시에 진행할까요?

넥슨의 갓겜! 메이플스토리를 예로 들어보겠습니다.

사냥터에 가면 몹들이 뛰어놀고 리젠이 됩니다.

여러분들이 사냥해서 경험치를 얻고 그 정보가 메이플 DB에 저장됩니다.

그리고 메이플 DB에는 추가로 생성되는 캐릭터도 있습니다.

실시간으로 게임을 하면서 이런 여러가지 동작을 수행할려면

각각의 동작이 따로따로 이뤄져야 할 겁니다.

그렇지 않으면 게임 하다가 성질나서 그만둘 겁니다.

여러분들이 유튜브를 보고 있습니다.

유튜브 중간중간에

내가 구독하는 유튜버가 새 영상을 올렸다거나

누군가 내 댓글에 좋아요를 누르는 등 여러가지 동작이 함께합니다.

하지만 내가 가장 원하고 필요한 동작은

"지금 보고있는 동영상 계속 시청하기"입니다.

비동기식으로 프로그래밍을 했기 때문에

여러분은 편안하게 유튜브 영상 보면서

알림이 온 것을 볼 수 있는 겁니다.

2023.07.21 - [노베이스도 이해하는 공학이야기] - 프로세스 관리는 어떻게 이뤄질까?

 

프로세스 관리는 어떻게 이뤄질까?

여러분들, 제가 대박사실 하나 알려드릴까요? 평소에 유튜브로 영상보면서 카톡도 하시고 인스타도 하시잖아요? 여러분들은 "동시에"한다고 생각하지만 실은 여러가지 프로세스가 각각 따로따

door-of-tabris.tistory.com

이 동작은 쓰레드로 이뤄집니다.

각각의 쓰레드가 독립적으로 한 프로세스 안에서 실행되어

결과적으로 여러 동작이 가능해집니다.

 

 

어떤 식으로 동작이 되는가??

A B 쓰레드가 있다고 가정해보겠습니다.

먼저 A가 동작합니다.

A가 동작 중에, B를 호출하고 동작을 이어나갑니다.

그 후 B는 동작을 계속 합니다.

그리고 작업이 완료가 되면 A에게

"나 작업 끝났어"라는 걸 보내는데

이걸 callback함수라고 합니다.

그림으로보면 잘 이해가 안 올텐데

실제 상황을 예로 들어볼까요?

아까 위에서 본 게임을 예시로 들어보겠습니다.

여러분들이 사냥 중에 랩업을 했습니다.

이제 여러분의 정보가 저장된 DB에 랩업 한 걸로 수정해야합니다.

그럼 사냥 동작에서 'DB업데이트'동작을 호출하고 계속 사냥합니다.

호출된 DB업데이트는 동작을 하다가

작업을 완료하고 신호를 보냅니다.

이 외에도 상황을 추가하자면

"누가 갑자기 나를 신고먹이는 경우"

"누가 와서 내 인기도를 낮추고 가는 경우"

"갑자기 누가 친구추가를 보내는 경우"

이런 케이스들을 생각해보면

왜 비동기로 프로그래밍하는게 필요한지 좀 더 감이 오실 겁니다.

 

 

모든 걸 다 비동기로 짜야하는가?

 

꼭 그렇지 않습니다.

알아서 센스있게 잘 쓰면 됩니다.

상황에 따라 동기식으로 짤지

비동기식으로 짤지를 본인이 생각하시면 됩니다.

게임을 하는 도중에

스킬간의 연계기를 쓰는 경우라면

A->B->C 이렇게 동기식으로 구성해야할 상황도 올 것입니다.

반대로 위의 DB를 업데이트하는 것처럼

비동기로 구성하는 게 프로그램 최적화에 좋은 예시도 있을 겁니다.

이런 부분들은 동작들이 어떻게 연결되고 동작하는지 판단한 후에

동기냐 비동기냐로 나눠도 좋을 것 같습니다.

728x90

관련글 더보기

댓글 영역