본문 바로가기
Network

상태 저장 vs 상태 비저장 / 동기 vs 비동기 / 블로킹 vs 논블로킹

by BTC_김쿼카 2022. 4. 27.

ABTCEFG♪  안녕하세요, 여러분!

 

 

다시 돌아온 btc_김쿼카 입니다 :) 

IaC로 가는 지름길! 인프라 지식에 대해 더 쉽게, 차근차근, ABCD를 처음부터 배워나가는 것처럼 같이 풀어가보아요.

출발 - !

 


 

1. Stateful vs Stateless


 Stateful과 Statelesss는 AWS 서비스를 사용하시는 분들이라면 꼭 알아야 할 중요한 개념 중 하나죠! AWS의 Security Group은 Stateful 방식으로 동작하고, Network ACL은 Stateless 방식으로 동작하기 때문입니다. Stateful과 Stateless가 과연 무엇인지 간단하게 설명해드리겠습니다.

 

1) Stateful 상태저장

 Stateful은 서버 측이 클라이언트와 서버의 동작 및 상태 정보를 저장하는 형태를 의미합니다. 즉, 세션 상태에 기반하여 서버의 응답이 달라진다는 것이죠. 과거에 부여했던 정보를 저장해서 계속 활용할 수 있기 때문에 복잡한 처리가 가능하다는 장점이 있습니다.

 상태 저장의 대표적인 예시는 SSH 프로토콜TCP의 3 way-handshaking이 있습니다.


2) Stateless 상태비저장

 Stateless는 클라이언트와 서버의 동작 및 상태 정보를 저장하지 않는 형태를 말합니다. 서버는 클라이언트의 요청이 들어오면 응답만 해주는 형태이며, 서버가 클라이언트 정보를 저장하거나 관리하지 않아 Scaling이 자유롭다는 장점이 있습니다. 또한, 서버의 확장성이 높아 대량의 트래픽 발생 시에도 대처를 수월하게 할 수 있습니다.

 상태 비저장의 대표적인 예시는 여러분들도 잘 알고 계시는 HTTP 프로토콜과 UDP가 있습니다.


 따라서 간단하게 정리해보면
Stateless는 세션 정보를 서버에 저장하지 않고 세션 상태와는 관계없이 응답을 하는 것 , 
Stateful은 세션 정보를 서버에 저장하고 세션 상태에 따른 응답을 하는 것이라고 할 수 있습니다.

 


 

2. 동기 vs 비동기

 

1) 동기/비동기

  • 주로 어플리케이션에서 다뤄지는 개념
  • 프로세스 수행 순서
  • 다음 작업이 요청되는 시간과 관련


 
동기 비동기

일을 시키면 그 일이 끝날 때까지 기다리는 것

해당 일이 끝날 때까지 다른 일을 할 수 없음

끝났는지 여부를 확실하게 확인할 수 있음

일을 시키고 다른 일을 같이 처리하는 것

병렬로 다른 일을 할 수 있음

일이 끝났는지 여부를 확인하기 어려움

 


 

3. 블로킹 vs 논블로킹

 

1) 블로킹 / 논블로킹

  • 주로 I/O, 멀티스레딩에서 사용되는 개념
  • 프로세스 유휴 상태
  • 함수의 리턴 시점과 제어권에 따라 차이가 있음


(1) 블로킹

 블로킹이란 자신의 작업을 하다가 멈추고 다른 작업 주체가 하는 작업의 시작부터 끝까지 기다린 후 다시 자신의 작업을 시작하는 것을 의미합니다. 제어권이 호출된 함수에 넘어가서 호출된 함수 내에서 작업이 완료되어야 새로운 작업을 수행할 수 있습니다.

 


(2) 논블로킹

 논블로킹이란 다른 주체와 상관없이 자신의 작업을 계속하는 것을 의미합니다. 제어권이 계속 호출된 함수에 있기 때문에 작업의 완료 여부와 상관없이 새로운 작업을 수행할 수 있습니다.

 


 

4. 조합 - 동기 / 비동기 & 블로킹 / 논블로킹 조합

 

1) 동기, 블로킹 조합

동기 조건 : '두 개 이상의 작업의 시작시간, 종료시간이 같거나 시작과 동시에 종료할 것'
블로킹 조건 : '다른 작업을 하는 동안 자신의 작업을 일시정지할 것'


 JDBC를 이용해 DB에 쿼리 질의를 날리는 것, 메서드에서 다른 메서드를 호출하여 결과값을 즉시 받아오는 경우 등이 동기 블로킹 조합에 해당합니다.

 

 2) 비동기, 블로킹 조합

비동기 조건 : '다른 작업과 시작, 종료 시간을 맞추지 말 것'
블로킹 조건 : '다른 작업의 주체가 작업하는동안 기다릴 것'

 
 다른 작업이 끝날 때까지 기다려야 하기 때문에 좋지 못한 효율을 냅니다. 개발자가 유도해서 이러한 상황을 만들기보단 비동기, 논블로킹 작업을 호출하고 자신의 작업을 하던 중 호출한 작업의 결과 값을 조회하려고 했을 때 위와 같은 결과가 나오게 됩니다. (블로킹 메서드 실행)



  1. 동기, 논블로킹 조합 (Polling)

동기 조건 : '두 개 이상의 작업의 시작시간, 종료시간이 같거나 시작과 동시에 종료할 것'
논블로킹 조건 : '다른 작업의 주체가 작업하는동안 기다리지 말 것'


 
논블로킹으로 자신의 작업을 계속하고 있지만 다른 작업과의 동기를 위해 계속해서 다른 작업이 끝났는지 조회해야 하기 때문에 작업 효율이 좋지 않은 편입니다.



  1. 비동기, 논블로킹 조합 (가장 많이 쓰이는 조합)

비동기 조건 : '다른 작업과 시작, 종료 시간을 맞추지 말 것', '다른 작업의 주체가 작업하는동안 기다리지 말 것'
논블로킹 조건 : '다른 작업의 주체가 작업하는동안 기다리지 말 것'


 
비동기 논블로킹 조합은 자신의 작업을 멈추지 않은 상태에서 다른 주체가 하는 작업의 결과가 나왔을 때 콜백을 설정하기도 합니다. 해야 할 작업이 대규모이고, 동기가 필요하지 않을 때 효과적인 조합입니다. 대규모 사용자에게 푸시 메시지를 전송하거나 다양한 외부 API를 한번에 호출하는 것이 비동기 논블로킹 조합의 대표적인 예입니다.

 

'Network' 카테고리의 다른 글

[Network] Protocol  (0) 2022.05.06
[NetworkTCP & UDP  (0) 2022.04.29
[Network]IP address와 MAC address  (0) 2022.04.22
웹 브라우저에서 요청 흐름  (0) 2022.04.18
[Network] OSI 7계층이란  (0) 2022.04.15

댓글