현대인의 삶은 바쁩니다.
직장인을 기준으로 이야기해볼까요?
일상의 대부분을 투자하는 직장에 집중해야지
일 끝나면 자기개발해야하지
몸 상하지 말라고 건강관리해야지
재산 불릴려고 재태크하지
미래를 위한 결혼준비도 해야하지
(누군가는 "저는 저기서 몇개는 안하는 데스요?"
하실 수 있겠지만
몇 개 안하더라도 여러가지를 하는 건 팩트)
이렇게 우리의 삶이 바쁜데
프로그램 하나 느릿느릿하면 성질나겠죠?
바쁜 현대인에 맞게 프로그램도 여러가지 일을 수행할 수 있습니다.
프로그램 안에 여러 동작들을 수행하는 프로그래밍,
비동기식 프로그래밍을 소개합니다.
우선 동기식 프로그래밍을 보겠습니다.
우리가 흔히하는 프로그래밍 기법인데요
쉽게 생각하면 '서로 간에 유기적 연결로 동작한다'라고 보시면 됩니다.
A를 동작하면 B를 하고, B를 하면 C를 하고 이런 식이죠.
A->B->C이렇게 순차적으로 실행이 되죠.
반면 비동기식 프로그래밍은 분업과 비슷합니다.
A B C 세가지 일이 동시에 진행이 되는 거죠.
왜 여러가지 일을 동시에 진행할까요?
넥슨의 갓겜! 메이플스토리를 예로 들어보겠습니다.
사냥터에 가면 몹들이 뛰어놀고 리젠이 됩니다.
여러분들이 사냥해서 경험치를 얻고 그 정보가 메이플 DB에 저장됩니다.
그리고 메이플 DB에는 추가로 생성되는 캐릭터도 있습니다.
실시간으로 게임을 하면서 이런 여러가지 동작을 수행할려면
각각의 동작이 따로따로 이뤄져야 할 겁니다.
그렇지 않으면 게임 하다가 성질나서 그만둘 겁니다.
여러분들이 유튜브를 보고 있습니다.
유튜브 중간중간에
내가 구독하는 유튜버가 새 영상을 올렸다거나
누군가 내 댓글에 좋아요를 누르는 등 여러가지 동작이 함께합니다.
하지만 내가 가장 원하고 필요한 동작은
"지금 보고있는 동영상 계속 시청하기"입니다.
비동기식으로 프로그래밍을 했기 때문에
여러분은 편안하게 유튜브 영상 보면서
알림이 온 것을 볼 수 있는 겁니다.
2023.07.21 - [노베이스도 이해하는 공학이야기] - 프로세스 관리는 어떻게 이뤄질까?
이 동작은 쓰레드로 이뤄집니다.
각각의 쓰레드가 독립적으로 한 프로세스 안에서 실행되어
결과적으로 여러 동작이 가능해집니다.
A B 쓰레드가 있다고 가정해보겠습니다.
먼저 A가 동작합니다.
A가 동작 중에, B를 호출하고 동작을 이어나갑니다.
그 후 B는 동작을 계속 합니다.
그리고 작업이 완료가 되면 A에게
"나 작업 끝났어"라는 걸 보내는데
이걸 callback함수라고 합니다.
그림으로보면 잘 이해가 안 올텐데
실제 상황을 예로 들어볼까요?
아까 위에서 본 게임을 예시로 들어보겠습니다.
여러분들이 사냥 중에 랩업을 했습니다.
이제 여러분의 정보가 저장된 DB에 랩업 한 걸로 수정해야합니다.
그럼 사냥 동작에서 'DB업데이트'동작을 호출하고 계속 사냥합니다.
호출된 DB업데이트는 동작을 하다가
작업을 완료하고 신호를 보냅니다.
이 외에도 상황을 추가하자면
"누가 갑자기 나를 신고먹이는 경우"
"누가 와서 내 인기도를 낮추고 가는 경우"
"갑자기 누가 친구추가를 보내는 경우"
이런 케이스들을 생각해보면
왜 비동기로 프로그래밍하는게 필요한지 좀 더 감이 오실 겁니다.
꼭 그렇지 않습니다.
알아서 센스있게 잘 쓰면 됩니다.
상황에 따라 동기식으로 짤지
비동기식으로 짤지를 본인이 생각하시면 됩니다.
게임을 하는 도중에
스킬간의 연계기를 쓰는 경우라면
A->B->C 이렇게 동기식으로 구성해야할 상황도 올 것입니다.
반대로 위의 DB를 업데이트하는 것처럼
비동기로 구성하는 게 프로그램 최적화에 좋은 예시도 있을 겁니다.
이런 부분들은 동작들이 어떻게 연결되고 동작하는지 판단한 후에
동기냐 비동기냐로 나눠도 좋을 것 같습니다.
파일시스템은 왜 쓰는 걸까? 파일시스템과 DB의 관계는?? (0) | 2023.08.02 |
---|---|
git은 왜 쓰는 걸까?? (0) | 2023.07.29 |
프로세스 관리는 어떻게 이뤄질까? (0) | 2023.07.21 |
SW테스트에 대해서 알아보자 (0) | 2023.07.19 |
함수형 프로그래밍은 왜 필요할까? (0) | 2023.07.18 |
댓글 영역