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) 말 춘 학생은 얄순선생이 채점한 시험지를 받아 본다.

     

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

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

     

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

     

     

    자바 네트워크 프로그램, 블록과 논블록

    멀티스레드 프로그래밍에서 메서드나 객체에 대해 동기화를 할 경우 다른 누군가 그 메서드를 참조하고 있다면 “해당 메서드는 블록 된다”, 라는 표현을 사용한다. ‘가로막다’의 의미로 사

    malchooni.name

     

     

    반응형

    댓글

Designed by Tistory.