본문 바로가기
CS/Network

동기 방식과 비동기 방식

by k-mozzi 2023. 6. 3.
반응형
Preface

 

최근 공부한 대부분의 언어에서 동기 방식과 비동기 방식에 관한 이해를 요구하는 것 같아 두 방식의 개념과 장단점, 차이점에 대해 간단히 정리해둔다.

 

본문 내용은 그동안 공부했던 책들과 생활코딩 강의, 그리고 Chat-GPT의 대답 내용을 참고해서 작성했다.


 

1. 동기 방식(Synchronous)

 

 

- 동기 방식: 작업을 순차적으로 진행하고, 각 작업이 완료될 때까지 다음 작업을 기다리는 방식

→ 작업의 진행과 응답을 기다리는 방식으로 동작한다.

 

 

- 작동 방법

1) 작업을 요청하면 해당 작업이 시작된다.

2) 시작한 작업이 완료될 때까지 다음 작업을 기다린다. (블로킹)

3) 작업이 완료되면 결과를 반환하고 다음 작업을 수행한다.

 

 

- 장점

1) 결과의 완전성과 일관성을 유지할 수 있다.

2) 코드 구현이 간단하다.

→ 작업 순서를 관리하기 용이하며, 오류 발생 시 즉시 처리할 수 있다.

3) 동기식 API 사용이 용이하다.

 

 

- 단점

1) 한 작업이 완료될 때까지 다른 작업들이 블로킹되어 대기해야 하는 경우가 발생할 수 있다.

2) 작업이 오래 걸리는 경우 다른 작업들이 대기하므로 성능 문제가 발생할 수 있다.

 


 

2. 비동기 방식(Asynchronous)

 

 

- 비동기 방식: 작업을 순차적으로 기다리지 않고, 작업이 완료되지 않은 상태에서 다음 작업을 실행하는 방식

→ 작업의 진행과 응답을 기다리지 않고 다른 작업을 병렬적으로 수행할 수 있다.

 

 

- 작동 방법

1) 작업을 요청하면 해당 작업이 시작된다.

2) 작업이 완료되지 않은 상태에서 다른 작업들을 동시에 실행할 수 있다.

3) 작업이 완료되면 결과를 반환하거나 이벤트를 발생(인터럽트)시켜 완료를 알린다.

 

 

- 장점

1) 블로킹되지 않고 다른 작업을 동시에 수행할 수 있다.

2) 작업의 동시 실행으로 인해 시스템의 성능과 응답성을 향상시킬 수 있다.

 

 

- 단점

1) 작업의 순서가 보장되지 않을 수 있으므로, 결과의 일관성을 유지하기 위해 추가적인 처리가 필요할 수 있다.

2) 오류 처리가 복잡하다.

3) 콜백 함수가 중첩되어 복잡한 코드 구조가 형성될 수 있다. (콜백 지옥)

 


 

3. 동기 방식과 비동기 방식의 주요 차이점

 

 

- 작업의 진행 방식
1) 동기 방식: 작업을 순차적으로 진행하며, 이전 작업이 완료되어야 다음 작업이 실행된다..
2) 비동기 방식: 작업이 완료되지 않은 상태에서 다른 작업을 실행할 수 있으며, 작업의 완료를 기다리지 않고 다른 작업을 동시에 수행한다.

 


- 작업의 응답 방식
1) 동기 방식: 작업이 완료되면 즉시 결과를 반환하고 다음 작업을 진행한다.
2) 비동기 방식: 작업이 완료되면 결과를 반환하거나 이벤트를 발생시켜 완료를 알린다.

 


- 대기 시간의 처리
1) 동기 방식: 한 작업이 완료될 때까지 다른 작업들이 대기하며, 작업이 오래 걸리면 다른 작업들도 블로킹된다.
2) 비동기 방식: 작업이 완료되기를 기다리지 않고 다른 작업을 실행하므로, 대기 시간이 최소화되고 블로킹되지 않는다.

 


- 작업의 조율 방식
1) 동기 방식: 작업의 순서와 응답 시간이 중요하며, 결과의 완전성과 일관성을 유지한다.
2) 비동기 방식: 작업의 순서가 보장되지 않으므로, 결과의 일관성을 유지하기 위해 추가적인 처리가 필요할 수 있다.

 


 

4. 동기 방식과 비동기 방식의 선택

 

 

- 동기 방식: 작업의 순서와 일관성이 중요한 경우에 유용하다.

→ 데이터베이스 트랜잭션 처리나 파일의 순차적인 읽기/쓰기 작업 등에서 사용될 수 있다.

 


- 비동기 방식: 작업의 동시 실행과 응답성을 향상시키고자 할 때 유용하다.

→ 네트워크 요청 처리, 파일 다운로드, 사용자 입력 처리, 이벤트 처리 등에서 사용될 수 있다.

 

728x90
반응형

'CS > Network' 카테고리의 다른 글

외부에서 로컬 서버에 접속하기  (0) 2023.07.02
GET 방식과 POST 방식  (0) 2023.06.04
HTTPS, SSL 인증서  (0) 2022.11.20
HTTP  (0) 2022.11.20
DNS  (0) 2022.11.18

댓글