brunch

Nginx 마스터링-2

웹서버(Nginx)를 관통하는 네트워크 동기/비동기 개념 이해

by Younggi Seo




네트워크에서 동기(Synchronous)와 비동기(Asynchronous) 개념을 분간하기가 여간 어려운 게 아니다. 엊그제 쿠팡 레드팀 오퍼레이터 포지션 1차 면접을 한 외국인 면접관과 봤다. 경력에 대한 인터뷰를 진행하는 가운데 갑자기 TCP와 UDP 포트 개수부터 이 둘의 차이에 대한 질문을 하길래, 네트워크 지식을 다시 거슬러 올라가면서 인출하기까지 인내심을 어느 정도 요구했다.


나의 분야에서 기본기라면 바로 이 네트워크 지식이다. 웹서버인 Nginx를 마이크로서비스 아키텍처에 맞게 배포하는 건 엔지니어가 아니더라도 할 수 있다. 그런데, 이것을 왜 배포하는지부터 서비스의 흐름에서 어떤 위치와 역할을 하는지를 알고 하느냐는 전체 아키텍처의 구성을 이해하고 있느냐 없느냐의 차이이기 때문에 굉장히 중요하다.


그러면 네트워크 통신에서 동기와 비동기는 왜 갑자기 언급할까?


보통의 엔지니어들이 동기를 단순히 Sync(서로 커넥팅), Async(언커넥팅) 정도로 알고 있기 때문에, 이커머스나 대량의 트래픽(접속량)이 오고 가는 웹서비스에서 이들이 동시적(실시간)으로 접속되어 있다고 착각한다. 하지만 실제 서비스가 구현된 상태는 사용자 한 명에 대해서만 실시간으로 커넥팅 되어 있는 게 아니다. 수많은 접속자가 동시 병렬적으로 접속하고 끊고 하는 통신이 불규칙적으로 이루어지기 때문에, 이 웹서버를 관통하는 트래픽이 머릿속에 어떻게 그려지느냐는 비동기 개념을 이해하고 있느냐 없느냐에 달려있다.


서비스 사용자가 온라인쇼핑몰에 접속하고 화면에 웹페이지가 뜨기도 전에 바로 다른 요청을 할 수 있는 까닭이 비동기적으로 통신이 가능하기 때문이다. 만약 동기적으로만 통신이 이루어진다면, 화면에 렌더링(페이지 로딩)이 전부 다 이루어지고 난 다음에야 메뉴를 클릭하면 다음 화면으로 넘어간다. 하지만 비동기는 요청한 테스크(작업)의 완료 여부에 관계없이 동시 병렬적으로 다른 테스크(작업)의 실행이 가능한 통신 속성을 지니고 있기 때문에 일반적으로 온라인 웹사이트는 이 비동기 통신과 동기 통신을 서로 혼용해서 서비스가 이루어질 수 있도록 개발한다.


그래서 비동기(Asynchronous) 개념을 정확하게 꿰고 있어야 통신(접속)을 하는데, 트래픽 이슈에 대해서 정확한 분석이 가능할 뿐만 아니라, 사용자가 서비스를 한 번에 여러 번 요청하는데 문제가 발생할 때 동기/비동기 통신의 문제로 나누어서 트래킹(역추적)이 가능하다. 웹서버를 거치는 통신의 흔적(로그)을 보고 문제 추적이 가능한 엔지니어의 짠 밥은 웹서버를 아키텍처에 단순히 배포하는 수준을 뛰어넘을 수 있다.


그렇다면 한 엔지니어가 긁적인 이 동기/비동기 개념에 대한 추가적인 설명과 또 기획자 한 분이 업무에서 동기/비동기 처리 방식에 대한 개념에 대해 잘 설명한 브런치에 잠깐 들러서 이 둘의 개념을 명확하게 분간할 수 있는지 확인해 보자. 그리고 다시 웹서버 중 가볍고 세팅이 쉬운 Nginx에 대해서 파고들어도 늦지 않다.






keyword
매거진의 이전글Nginx 마스터링-1