brunch

You can make anything
by writing

C.S.Lewis

by 고코더 Dec 22. 2021

약속에 늦은 친구! 기다릴까? 먼저 갈까?

동기화 비동기화를 말하다.

* 책으로 출간되었습니다.

해당 브런치에 남김 글은 초고입니다. 완성된 작품은 해당 "오늘부터 IT를 시작합니다."로 출간하였습니다!!

구매하여서 완성된 글을 종이책의 정감과 편안함으로 읽어보시길 바랍니다^^ 

감사합니다.!!

http://www.yes24.com/Product/Goods/111417594


약속에 늦은 친구

 오랜만에 친구와 함께 영화를 보기로 한 날입니다. 약속시간보다 10분 일찍 극장에 도착하였습니다. 이때 주머니 속에 스마트폰이 진동이 느껴집니다. 불안한 마음으로 메시지를 확인해보니 역시나 30분 정도 늦는다는 친구의 알림입니다. 이제부터 고민이 시작됩니다. 20분 후면 영화는 시작됩니다. 만약 친구를 기다린다면 10분 정도 영화를 놓치게 됩니다. 만약 지금 혼자 영화관에 들어가면 미리 좌석에 앉아서 여유롭게 친구를 기다릴 수 있지만, 친구와 함께 하기로 한 시간은 그만큼 줄어들고, 어쩌면 친구가 섭섭해 할 수도 있을 것입니다. 선택을 해야 하는 이 순간 이때


당신의 어떤 선택을 하실 건가요??



지각대장 존

 지각 왕들은 말합니다. '우물쭈물하다가 내 이럴 줄 알았지' 보통의 지각은 게으름으로 일어난 참사입니다. 하지만 정말로 지각한 이유가 있다면? 존 버닝햄,『지각대장 존』의 주인공 '존 페트릭 노먼 맥 헤너시'는 학교 가는 길에 악어, 사자, 커다란 파도 등을 만나면서 지각을 하게 됩니다. 선생님은 존이 말하는 지각의 이유에 대해 믿지 않고 벌을 줍니다. 그러던 어느 날 반대로 선생님은 고릴라에게 붙들려 교실 천장에 매달리게 됩니다. 아무 일도 없이 등교한 존에게 구해달라고 하지만 지각대장 존은 고릴라 따위는 살지 않는다고 하며, 복수를 하게 하게 됩니다. 


 정직한 '지각대장 존'처럼 어쩔 수 없는 이유로 지각을 할 때는 어떻게 해야 할까요? 이해해주고 용서해야 할까요? 아니면 그래도 규칙을 어겼으니 혼을 내야 할까요? 선생님의 판단이 다 옳은 건 아니지만 존을 지도하는 담임 선생님의 선택에 맡겨질 것입니다. 


지각을 하면 누군가는 그에 따른 선택을 해야 합니다.
그것이 바로 지각을 대처하는 방법입니다. 




동기(synchronous), 비동기(Asynchronous)


동기화라는 단어를 이해하기 위해서는 클라이언트와 서버라는 개념을 먼저 이해해야 합니다. 클라이언트는 바로 우리입니다. 사용자가 웹 브라우저를 통해서 서버 측에 데이터를 요청하는 것이 클라이언트가 하는 행동입니다. 예를 들면 구글에 접속하여서 검색어를 입력하고 엔터를 누른 행위 자체가 바로 클라이언트의 요청입니다. 이때 서버가 응답하는 형식을 두 가지로 나눕니다. 바로 동기식, 비동기식입니다. 



동기화

 동기방식은 요청을 보낸 후에 응답을 받은 후 다음 동작을 시작하는 방식을 말합니다. 일을 처리할 때 다른 프로그램들은 바통을 이어받기 전까지 지켜보게 됩니다. 그래서 프로세스적 절차가 중요한 관리자 페이지와 금융 사이트와 같은 곳에서는 동기식으로 개발하는 경우가 많습니다. 많은 개발자분들이 해왔던 익숙한 프로그래밍 방식입니다.


한 번에 하나씩 처리하면서 내려간다

순차적으로 처리하기에 비동기에 비해 느리게 결과 값이 나타난다.

디버깅이 쉽다



비동기(Asynchronous)





 비동기 방식은 요청을 보낸 후에 결과를 기다리지 않고 다음 단계를 실행하는 방식입니다. 다양한 작업이 동시에 일어납니다. 응답을 처리하면 콜백 함수로 이를 전달하게 됩니다. SNS나 포털사이트 같이 기능이 많고 사용자가 많은 사이트에서 유리합니다.


여러 가지 로직이 동시에 처리된다.

매우 빠르게 결과가 도출된다.

결과 값을 콜백으로 받아야 한다.




푸드코트는 비동기식


 백화점에 있는 대형 푸드코트가 운영되는 방식을 한번 생각해봅시다. 손님들은 다양한 입주 음식점에 메뉴를 확인하고 원하는 음식을 선택합니다. 이때 각 식당에서 주문하지 않고 계산을 담당하는 카운터에 가서 직원에게 결제를 합니다. 여기서 카운터 직원은 순서대로 주문받은 음식을 각 식당에 조리를 요청합니다. 식당은 주문을 확인하고 자기가 맡은 요리를 시작합니다. 한식, 양식, 중식을 순서대로 주문했지만 조리가 가장 빠른 중식이 가장 먼저 나옵니다. 조리시간이 오래 걸리는 음식 때문에 지체되지 않고 각 분야에 요리사가 자신이 해야 할 일을 끝내고 이를 반환해주기 때문에 많은 요청이 와도 손님 회전율을 더 빠르게 유지할 수 있습니다. 또 한 하나의 카운터에서 모든 주문을 받기 때문에 식당들은 직원 한 명의 인건비를 아낄 수 있습니다. 그리고 손님들은 주문하려고 여기저기 흩어지지 않고 한 곳에 모여 질서 정연하게 주문이 가능합니다. 


이렇게 여러 개의 이벤트를 동시에 처리하여 결과 값을 반환해주는 방식이 바로 비동기 방식입니다.



개발자의 선택 



동기화가 필요한 물건 배송 

동기화가 필요한 경우는 이렇습니다. 고코더 사장은 작은 쇼핑몰을 운영하고 있습니다. 고객이 상품을 구매하면, 상품을 발송해야 합니다. 일에 순서가 있습니다. 그리고 주문을 취소하거나, 변경할 수도 있습니다. 이때 주문 -> 취소, 변경 -> 발송 은 차례대로 일어나야 합니다. 주문 후에 발송을 먼저 하면, 고객이 취소할 시에 순서대로 일이 진행되지 않아서 골치가 아픕니다. 그렇게 되면 재고관리가 되지 않아 금방 문을 닫고 말 것입니다. 



비동기화가 필요한 소셜 네트워크 

점점 고성능으로 치닫는 현재의 소프트웨어들은 비동기화를 많이 선택하고 있습니다. 필수가 되는 경우가 많습니다. 예를 들면 비동기화는 소셜 네트워크를 좀 더 빠르게 사용이 가능하도록 만들었습니다. 친구의 사진첩을 보면 한 화면에 몇십 장의 사진이 썸네일로 보입니다. 그런데 사진은 차례대로 불러오지 않고 동시에 불러옵니다. 첫 번째 사진보다 두 번째 사진이 먼저 뜨기도 합니다. 이는 모두 비동기식으로 처리하기 때문입니다. 만약에 비동기화라는 개념이 없었더라면 그리고 서버의 성능이 낮았다면 어땠을까요? 아마도 인스타그램에 접속하면 한 화면에 가득 담긴 사진을 보고 싶다면 차례대로 한 장, 한 장 사진이 차례대로 로딩되는 것을 보다가 성질 급한 우리는 바로 어플을 꺼버릴지도 모릅니다. 하지만 다행히 비동기 프로그래밍은 유동적으로 한 번에 모든 걸 처리합니다. 덕분에 우린 쾌적하게 SNS를 할 수 있게 되었습니다.



지각한 데이터 기다릴까? 먼저 갈까?



사실 알고 보면 컴퓨터도 지각을 합니다. 뚱딴지같은 소리일지 모르지만, 사람과 다르게 하염없이 게으름을 피우다가 사용자가 요청한 응답을 처리하던 중 어쩔 수 없는 상황을 마주하기도 합니다. '지각대장 존' 처럼 악어와 사자 그리고 커다란 파도도 만날 수 있습니다. 버그가 발생할 수도 있고, 네트워크기 지연될 수도 있고, 서버에 문제가 생길 수 도 있습니다. 하지만 그런 문제가 생겼을 때 개발자는 선택을 해야 합니다. 


지각으로 늦은 데이터를 기다려 줘야 할까? 먼저 가야 할까? 
시스템에 맞는 선택을 해야 합니다.





매거진의 이전글 구글 검색이 사용하는 전기의 양?
브런치는 최신 브라우저에 최적화 되어있습니다. IE chrome safari