728x90
Ajax와 kafka 등 비동기 통신(처리)한다는 용어가 헷갈려 이 기회에 정리해보려고 합니다.
1. 동기 vs 비동기
처음에는 사실 그림을 봐도 크게 와닿지는 않았습니다.
1) 동기(synchronous) 방식
- 요청과 결과가 동시에 일어나는 방식으로 요청을 보낸 후 응답을 받아야 다음 동작이 진행 됨
- 요청과 결과가 한 자리에 동시에 나타나는 것으로 사용자가 서버로 요청을 보냈을 경우 요청에 대한 응답을 리턴받기 전까지는 다른 것을 하지 못하고 기다려야 함
- 장점 : 설계가 간단하고, 직관적
- 단점 : 요청에 대한 결과가 반환되기 전까지 대기해야 함
2) 비동기(Asynchronous) 방식
- 요청과 결과가 동시에 일어나지 않는 방식으로 요청과 결과가 동시에 일어나지 않음
- 동시에 여러 요청을 보낼 수 있음(응답까지 기다리지 않아도 됨)
- 장점 : 요청에 대한 결과가 반환되기 전에 다른 작업을 수행할 수 있어서 자원을 효율적으로 사용할 수 있음
- 단점 : 동기 방식보다 설계가 복잡하고, 논증적
2. Kafka의 비동기 통신
- Pub/Sub 모델은 비동기 메시징 전송 방식으로, 발신자의 메시지에는 수신자가 정해져 있지 않는 상태로 publish 함
→ Subscribe을 한 수신자만 정해진 메시지(topic)를 받을 수 있음
→ 수신자는 발신자 정보가 없어도 원하는 메시지만 수신할 수 있으며, 이러한 구조 덕분에 높은 확장성을 확보할 수 있음 - Pub/Sub 모델은 여러개의 Pub에서 동시다발적으로 메세지 큐에 데이터를 보내게 되고, Sub또한 동시다발적으로 메세지 큐로부터 데이터를 가져올 수 있는 구조
- 프로듀서가 카프카 토픽에 메시지를 발행할 때, 이 작업은 비동기적으로 수행되며 브로커로부터 응답을 기다리지 않음
- 카프카 토픽에서 메시지를 소비하는 소비자는 메시지가 도착할 때까지 대기하지 않고 메시지를 자신의 속도로 처리할 수 있음
Kafka 비동기 처리의 이점
고처리량, 낮은 대기 시간 및 오류 내구성과 같은 이점을 제공
3. Ajax의 비동기 통신
- 화면에 표시할 이미지나 데이터를 서버에서 불러와 표시할 때, ajax 라는 네트워크 통신 기술로 클라이언트가 요청한 데이터를 서버로부터 가져옴
// https://domain.com 에 HTTP GET 요청으로 1번 상품(product) 정보를 요청하는 코드
function getData() {
var tableData;
$.get('https://domain.com/products/1', function(response) {// 3번 째 줄의 $.get()이 바로 ajax 통신을 하는 부분
tableData = response; // tableData = response; 로 받아온 데이터를 tableData라는 변수에 저장
});
return tableData;
}
console.log(getData());
==================================================================
결과 : undefined // $.get()로 데이터를 요청하고, 받아올 때까지 기다려주지 않고 다음 코드인 return tableData;를 실행했기 때문
* 3번 째 줄의 $.get()이 바로 ajax 통신을 하는 부분
- 특정 로직의 실행이 끝날 때까지 기다려주지 않고 나머지 코드를 먼저 실행하는 것
Ajax 사용하는 이유
- 단순하게 WEB화면에서 무언가 부르거나 데이터를 조회하고 싶을 경우, 페이지 전체를 새로고침하지 않기 위해 사용한다고 볼 수 있음
- 기본적으로 HTTP 프로토콜은 클라이언트쪽에서 Request를 보내고 서버쪽에서 Response를 받으면 이어졌던 연결이 끊기게 되어있고 그렇기 때문에 화면의 내용을 갱신하기 위해서는 다시 request를 하고 response를 하며 페이지 전체를 갱신하게 됨 → 엄청난 자원낭비와 시간낭비를 초래
- AJAX는 HTML 페이지 전체가 아닌 일부분만 갱신할 수 있도록 XMLHttpRequest객체를 통해 서버에 request
→ JSON이나 XML형태로 필요한 데이터만 받아 갱신하기 때문에 그만큼의 자원과 시간을 아낄 수 있음
참조:
728x90
'Network & Server' 카테고리의 다른 글
[Network] Nslookup & ping 정리 (0) | 2023.11.10 |
---|---|
[Network] DNS, A레코드와 CNAME 정리 (0) | 2023.11.06 |
[Network] nslookup (DNS-domain name service 조회) 정리 (0) | 2023.09.30 |
[Network] SSH tunneling vs SSH port forwarding (0) | 2023.01.19 |
[Network] SSL(Secure Sockets layer) 란? 사용되는 곳, 작동 원리, 인증과 인증서 유형 (0) | 2022.11.06 |
댓글