지난 몇 년 동안, websockets은 모든 현대적인 웹 애플리케이션에서 거의 표준 구성 요소가 되었습니다. 하지만 왜 그렇게 되었으며, 어떻게 여기까지 오게 되었을까요? 더 중요한 것은, websockets가 클라우드 인프라를 더 효과적으로 모니터링하는 데 어떻게 도움이 될 수 있을까요?
이 주제의 기술적인 특성상 세부 사항을 아주 깊이 파고들 수도 있습니다. 하지만 저는 비교적 높은 수준에서 내용을 유지하고, 클라우드 인프라 사용자들을 위한 이점에 초점을 맞추고자 합니다.
기존의 방식
웹의 초기 시절에는 모든 것이 정적이었습니다. (정적 페이지를 렌더링하는 것 이상으로) 서버와 상호작용해야 했다면, 일종의 CGI 스크립트를 실행해야 했습니다. 대표적인 예로 메일링 리스트 가입 같은 것이 있었습니다. 이메일 주소를 입력하고 ‘제출’을 누르면, 데이터를 처리하는 별도의 페이지가 나타납니다. 이는 결과적으로 입력을 받아 서버에서 처리하는 스크립트였습니다.

90년대에 이르러 서버 사이드 스크립팅은 크게 발전했습니다. 기술은 단순한 작업을 실행하는 것에서 완전히 동적인 페이지를 구축하는 것으로 진화했습니다. 다음과 같은 프로그래밍 언어인 PHP 및 다음과 같은 더 발전된 서버 사이드 기술인 mod_perl 등은 훨씬 더 정교한 웹 프로그래밍을 가능하게 했습니다. 이러한 기술들은 중요했지만, 여전히 로드 시 페이지 생성이라는 개념을 중심으로 발전했습니다. 일단 로드되면 콘텐츠를 새로 고치기 위해 전체 페이지를 다시 로드해야 했습니다.
웹이 진화하면서 우리는 AJAX/Web 2.0 시대인 ’00년대에 접어들었고, 웹 페이지는 훨씬 더 동적이고 반응이 빨라졌습니다. 더 이상 화면의 콘텐츠를 업데이트하기 위해 페이지를 다시 로드할 필요가 없었습니다. 단지 몇 가지 JavaScript 액션을 실행하기만 하면 되었습니다. 많은 AJAX 페이지가 여전히 PHP로 구동되었지만, 클라이언트 사이드 JavaScript의 도입으로 더욱 동적으로 만들어질 수 있었습니다.
AJAX의 도입
AJAX의 도입으로 서버와 클라이언트 간의 지속적인 통신이 점점 더 중요해졌습니다. 특정 페이지의 개별 사용자로부터 갑자기 상당한 양의 API 호출이 발생할 수 있게 되었습니다. 우리는 이를 ‘풀(pull)’ 방식으로 처리했는데, 이는 클라이언트가 특정 간격으로(또는 특정 작업에 따라) 서버에 업데이트를 요청함을 의미합니다.
’10년대에 접어들면서 웹 페이지가 프론트엔드(HTML/JavaScript/CSS)와 백엔드(Ruby on Rails, Django 등)로 완전히 분리되는 것이 일반적이었으며, 이들은 종종 서로 다른 서버에 호스팅되었습니다. 프론트엔드가 백엔드와 통신하는 방식은 API를 통해서였습니다. 프론트엔드는 거의 정적이었습니다. 이러한 트렌드 속에서 서버에 API 호출을 하는 것은 상당한 병목 현상이 되었습니다. 서버에서 열 가지 서로 다른 정보를 가져와야 한다면, 이는 종종 열 번의 서로 다른 API 호출을 해야 함을 의미했으며, 각 호출은 상당한 오버헤드와 지연 시간을 수반했습니다.
현대의 방식
이러한 지연 시간과 오버헤드 문제를 해결하기 위해 HTML5의 일부로 websockets가 도입되었으며 모든 현대적인 브라우저에 구현되었습니다. 기존의 ‘풀(pull)’ 방식(즉, 클라이언트가 서버에 변경 사항을 요청하는 방식)과 달리, websocket은 이름 그대로 서버가 클라이언트에 변경 사항을 ‘푸시(push)’할 수 있는 소켓입니다. 따라서 변경 사항이 없으면 통신할 필요가 없습니다. 또한 클라이언트가 연결을 열고 닫는 추가 오버헤드 없이 서버와 직접 통신할 수 있으므로 애플리케이션의 반응 속도가 훨씬 빨라집니다.
이것이 바로 당사의 웹 애플리케이션이 구축된 방식입니다. 실제 애플리케이션은 API에 대한 websocket 연결을 여는 정적 페이지입니다. 이 소켓이 열리면 웹 애플리케이션은 서버로부터 변경 사항이 포함된 알림을 받을 수 있습니다. 우리는 여전히 RESTful API로 명령을 보내지만, websocket을 사용하여 서버에서 클라이언트로 알림을 푸시합니다.
웹 페이지만을 위한 것이 아닙니다
websocket을 사용하여 업데이트를 수신하는 가장 명백한 사례는 브라우저를 통한 것이지만, 다른 사례도 있습니다. 어쩌면 귀하는 아키텍처의 변경 사항을 모니터링하고 이를 기반으로 작업을 실행하는 도구를 작성하고 있을지도 모릅니다. 이 경우, 당사의 websocket을 활용하여 애플리케이션 속도를 크게 향상시킬 수 있습니다.
당사의 Python 라이브러리인 pycloudsigma에는 websockets 지원이 내장되어 있습니다. 심지어 간단한 예제도 있어, 단 몇 줄의 코드만으로 websocket 활동을 모니터링하는 데 이를 어떻게 활용할 수 있는지 보여줍니다. 다음은 monitor_websocket_activity.py가 웹 앱에서 사용자 입력에 의해 트리거되는 작업을 모니터링하는 모습을 보여주는 빠른 데모입니다.
당사 서비스에 대한 자세한 정보는 당사의 기능을 확인해 보세요..
댓글
아직 댓글이 없습니다. 첫 번째로 작성해 보세요.