ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 자바 네트워크 프로그래밍, 동기와 비동기
    프로그래밍/자바 2020. 2. 21. 22:01

    이기종 시스템 간의 연동, 통신을 위해서는 네트워크 프로그래밍이 꼭 필요하다.
    자바나 기타 언어로 네트워크 연동 프로그램을 만들고자 한다면 어떻게 접근해야 할까?
    네트워크 프로그래밍에서 말하는 동기와 비동기에 대해 이야기해 보고자 한다.

     

    먼저 생각해 볼 문제는 시스템(or 노드)간 통신을 할 때 동기방식으로 할 것인가? 비동기 방식으로 할 것인가? 정하는 문제다.
    쉬운 이해를 위해 동기 방식과 비동기 방식의 예를 들어보겠다.

    동기방식은 A노드와 B노드 사이의 작업 처리 단위(transaction)를 동시에 맞추겠다는 뜻이다.
    ‘얄순이에게 예를 보자.

     

    1) 말 춘계좌는 오천원을 뺄 생각을 하고 있다.

    2) 말춘계좌는 얄 순계좌에게 오천 원을 전송한다.

    3) 얄 순계좌는 오천 원이 수신되었단 걸 인지하고 말 춘계좌에게 ‘받았음’을 전송한다.

    4) 이로써 말 춘계좌는 -5000원을 하고 얄 순계좌는 +5000원을 한다.

     

    이 예제에서 눈여겨볼 부분은 마지막이다. 말 춘계좌와 얄 순계좌는 서로의 요청과 응답을 확인한 후 같은 일을 동시에 진행했다.
    ‘계좌이체’라는 작업 단위는 위의 그림처럼 동기화를 해야 한다. 그래야지 한쪽이 보냈는데 못 받았거나, 안 보냈는데 받은 상황이 없을 것이다.

    비동기 방식은 이와 반대로 노드 사이의 작업 처리 단위를 동시에 맞추지 않아도 된다는 것이다.
    ‘말 춘 학생의 예를 보자.

     

     

    1) 말 춘 학생은 시험지를 열심히 푼다.

    2) 시험지에 답안 작성을 완료한 말춘학생은 시험지를 얄순선생에게 전송한다.

    3) 얄순선생은 말 춘 학생의 시험지를 채점한다.

    4) 채점이 다 된 말춘학생의 시험지를 다시 전송한다.

    5) 말 춘 학생은 얄순선생이 채점한 시험지를 받아 본다.

     

    말 춘 학생과 얄순선생은 시험지라는 연결고리가 있지만 시험지에 행하는 행위(목적?)는 서로 다르다. 한 사람은 시험지를 푸는 역할을 또 한 사람은 그 시험지를 채점하는 역할을 한 것이다. 그래서 둘의 작업 처리 시각을 따지자면 일치하지 않는다. 일치하지 않아도 된다.

    여기서 블록과 논 블록의 차이를 간략히 설명해 보겠다. 말춘학생이 시험지를 얄순선생에게 건낸 후 얄순선생의 얼굴만 바라보며 채점 된 시험지를 받기 기다린다면 말춘학생은 블록 상태인 것이다. 하지만 말춘학생이 시험지를 건낸 후 채점이 완료 됐다는 이벤트를 받기 전까지 춤을 춘다거나 클래시오브클랜을 한다던가 다른 일을 하게 된다면 말춘학생의 상태는 논블록 상태인 것이다.
    동기와 비동기, 블록과 논 블록은 헷갈리기 쉬운 개념이다.

     

    자바 네트워크 프로그래밍 블록과 논 블록 *

     

    마지막으로 정리를 하자면 동기와 비동기는 어떤 작업 혹은 그와 연관된 작업을 처리하고자 하는 시각의 차이이다. 동기는 추구하는 같은 행위(목적)가 동시에 이루어지며, 비동기는 추구하는 행위(목적)가 다를 수도, 동시에 이루어지지도 않는다.

     

     

     

    댓글 0

Designed by Tistory.