동기(Synchronous: 동시에 일어나는)
동기는 말 그대로 동시에 일어난다는 뜻이다. 요청과 그 결과가 동시에 일어난다. 바로 요청을 하면 시간이 얼마나 걸리던지 요청한 자리에서 결과가 주어져야 한다.
- 요청과 결과가 한 자리에서 동시에 일어남
- A노드와 B노드 사이의 작업 처리 단위(transaction)를 동시에 맞추겠다.
비동기(Asynchronous: 동시에 일어나지 않는)
비동기는 동시에 일어나지 않는다를 뜻한다. 요청과 결과가 동시에 일어나지 않을 거라는 의미이다.
- 요청한 그 자리에서 결과가 주어지지 않음
- 노드 사이의 작업 처리 단위를 동시에 맞추지 않아도 된다.
동기방식의 예(A가 B에게 10,000원을 송금)
- A의 계좌는 10,000원을 뺄 생각을 하고 있다.
- A의 계좌가 B의 계좌에 10,000원을 송금한다.
- B의 계좌는 10,000원을 받았다는 걸 인지하고, A의 계좌에 10,000원을 받았다고 전송한다.
- A, B 계좌 각 각 차감과 증가가 동시에 발생하였다.
순서를 보면 알겠지만 A의 계좌와 B의 계좌는 서로 요청과 응답(1~3) 과정을 확인 후 같은 일을 동시에 진행하였다.(4번 과정) '계좌이체' 같은 작업은 동기방식으로 처리해야 A에서 보냈는데 B는 못 받는 상황이 없을 것이다.
반대로 비동기 방식은 위의 예처럼 노드 사이의 작업 처리 단위를 동시에 맞추지 않아도 된다.
비동기방식의 예(시험날의 학생과 학생)
- 학생은 시험문제를 푼다.
- 시험문제를 모두 푼 학생은 선생님에게 전송한다.
- 선생은 학생의 시험지를 채점한다.
- 채점이 다 된 시험지를 학생에게 전송한다.
- 학생은 선생이 전송한 시험지를 받아 결과를 확인한다.
학생과 선생은 시험지라는 연결고리가 있지만 시험지에 행하는 행위(목적)는 서로 다르다. 학생은 시험지를 푸는 역할이고 선생은 시험지를 채점하는 역할이다. 서로의 행위(목적)가 다르기 때문에 둘의 작업 처리 시간은 일치하지 않고, 일치하지 않아도 된다.
동기와 비동기는 어떤 작업 혹은 그와 연관된 작업을 처리하고자 하는 시각의 차이이다.
동기는 추구하는 같은 행위(목적)가 동시에 이루어지며, 비동기는 추구하는 행위(목적)가 다를 수도 있고, 동시에 이루어지지도 않는다.
비동기적 코드의 실행 결과는 동기적 코드가 전부 실행 되고나서 값을 반환한다.
동기는 디자인이 비동기보다 간단하고 직관적일수 있지만 결과가 주어질 때 가지 아무것도 못하고 대기해야 하는 문제가 있다. 비동기는 동기보다 복잡하지만 결과가 주어지는데 시간이 걸려도 그 시간 동안 다른 작업을 할 수 있어서 보다 효율적일 수 있다.
참고:
https://velog.io/@daybreak/%EB%8F%99%EA%B8%B0-%EB%B9%84%EB%8F%99%EA%B8%B0-%EC%B2%98%EB%A6%AC
'Spring' 카테고리의 다른 글
[Spring] ORM 과 JPA (0) | 2023.01.02 |
---|---|
[Spring] AOP란? (0) | 2022.12.16 |
Ajax (0) | 2022.11.28 |
[Spring] 스프링에서 자주 사용하는 Annotation (0) | 2022.11.24 |
[Spring] MVC 구조 이해 (0) | 2022.11.01 |