클라이언트와 서버 사이에 무슨 일이 일어나는걸까.
생각보다 열일하고 있던 웹, 뭐가 그렇게 바쁠까.
우리가 레스토랑에서 스테이크를 주문한다고 가정했을 때, 우리는 스테이크가 연금술처럼 튀어나오는 것이 아니라 일련의 과정을 거쳐 테이블 앞으로 나타난다는 사실을 알고 있습니다.
웹 또한 마찬가지입니다. 주소창에 URL을 입력하고 엔터키를 땅 누르면 페이지가 몇 초 사이에 등장하지만, 그 짧은 순간에 육안으로는 보이지 않는 여러 과정이 거쳐가죠.
오늘은 그 과정, 웹의 동작 방식에 대해 알아보겠습니다.
여기 레스토랑에 들어온 손님이 있습니다. 손님은 종업원에게 스테이크를 주문하고 종업원은 요리사에게 주문서를 전달하지요. 그러면 요리사는 스테이크의 레시피에 맞게 조리를 합니다. 요리가 끝나면 요리사는 종업원에게 완성된 스테이크를 전달하고 종업원은 손님에게 맛있는 스테이크를 대접합니다.
이 때 손님의 스테이크 주문을 확인한 종업원을 웹 클라이언트, 종업원의 요청을 받아 맛있게 요리를 만든 요리사가 바로 웹 서버로 볼 수 있습니다.
서로 헷갈리지 않게 주문을 잘 주고받으며, 손님에게 좋은 서비스를 제공하는 것이 이 두 프로그램의 목적이죠!
그렇다면 이제 예시를 넘어 실제 클라이언트와 서버의 정체를 알아볼까요?
웹 클라이언트는 사용자가 웹에 접근하는 프로그램을 말합니다.
그런데 우리가 육안으로 보는 대부분의 웹은 웹 브라우저에서 실행되기 때문에 일반적으로 Internet Explorer, Chrome 등 우리가 알고 있는 웹 브라우저들을 대부분 웹 클라이언트라고 말합니다.
그래서 우리가 브라우저 주소창에서 http://brunch.co.kr 라고 입력하고 엔터키를 누르면, 클라이언트는 사용자로부터 받은 URL에 대한 정보를 찾아 HTTP 메시지 형태로 서버에게 요청(Request)하는거죠.
웹 서버는 웹 페이지, 사이트 또는 앱을 저장하는 프로그램을 말합니다.
서버는 클라이언트에서 요청한 HTTP 메시지를 확인한 후, 이에 맞는 데이터를 처리한 뒤에 다시 클라이언트에게 응답(Response)합니다. 만약 클라이언트에서 "http://brunch.co.kr 주소의 메인 페이지를 보내줘!" 라고 요청을 보낸다면, 서버에서는 이 요청을 확인하고 페이지를 만드는 데 필요한 HTML, CSS, JS, Image 등을 가져와 클라이언트에게 보내주는 거죠.
대표적인 웹 서버의 종류는 아파치 웹 서버(Apache Web Server), GWS, IIS 등이 있습니다.
이제 웹 클라이언트와 웹 서버에 대해서는 이해를 했는데 그렇다면 아까부터 그림에서 보이던 WAS는 무엇일까요?
다시 레스토랑으로 돌아와서, 만약 레스토랑이 손님 1명만 상대할 수 있는 작은 규모라면 요리사 또한 1명만 있어도 충분합니다. 하지만 레스토랑이 손님 100명, 1000명을 상대해야 하는 대규모 프랜차이즈라면 어떻게 될까요? 손님들을 오래 기다리게 하지 않으려면 요리사 또한 여러 명이 있어야 할겁니다.
이 때 조리실 안으로 들어오는 주문을 확인하고 역할을 분배하는 메인 셰프가 웹 서버, 그 아래에서 실제로 요리를 하는 요리사들이 WAS라고 볼 수 있습니다.
앞서 설명했듯이 서버 혼자서 모든 로직을 수행하고 데이터를 관리한다면 간단하겠지만, 서버에서 모든 일을 처리하게 되면 과부하가 일어날 가능성이 큽니다. 따라서 서버의 일을 돕는 조력자가 생겼는데 그것이 WAS입니다.
WAS는 웹 어플리케이션 서버라는 이름에서 알 수 있듯이 사용자 컴퓨터나 장치에 웹 어플리케이션을 수행해주는 미들웨어를 말합니다. 종류로는 아파치 톰캣(Apache Tomcat), 레진(Resin), 제이런(JRun) 등이 있습니다.
클라이언트에게 메시지를 받으면 서버는 요청에 필요한 페이지의 로직이나 데이터베이스의 연동을 위해서 WAS에 이들의 처리를 요청합니다. 그러면 WAS는 이 요청을 받아와 동적인 페이지 처리를 담당하고 DB에서 데이터 정보를 받아오죠. 이렇게 WAS는 DB와 연동하여 데이터를 처리한 뒤, 생성한 파일을 다시 서버에게 반환하게 됩니다.
WAS의 등장으로 웹 서버의 할 일을 분배하여 서버의 부담을 줄일 수 있고, 빠르게 동적 컨텐츠를 처리할 수 있게 되었습니다.
마지막으로 DB는 셰프들이 요리를 하기 위해 사용하는 냉장고와 창고 같은 보관소라고 볼 수 있습니다. 보관소는 요리를 만들 때 필요한 재료를 제공하기도 하고, 아니면 손님의 요청으로 다 만들어 둔 음식을 보관해야할 때도 사용하지요.
이런 다양한 상황에서 자원들을 잘 정리하여 보관하는 것이 보관소, 즉 DB의 역할입니다.
데이터베이스는 데이터의 정보를 저장하는 곳이며 WAS에서 데이터를 요청하면 필요한 데이터를 응답합니다.
WAS에서 로직을 수행하다가 DB접근이 필요하면 SQL질의를 통해 데이터를 요청하고, DB는 요청사항에 맞는 응답을 보냅니다. 만약 사용자가 블로그에 새로 포스팅을 올려서 그 내용을 서버에 저장해두어야한다고 하면, WAS에서 DB에게 해당 내용을 저장하게끔 요청하고, DB는 그 내용을 정리하여 저장하는 거죠.
오늘은 클라이언트부터 DB까지, 웹이 동작하는 과정에 대해 알아보았습니다. 육안으로는 미처 인식하지 못했던 컴퓨터의 열일(?)이 이제 조금 눈에 보이시나요?
2부에서는 여기에서 조금 더 들어가 클라이언트와 서버가 주고받는 메시지, HTTP에 대해서 알아보겠습니다.
그럼, 다음 포스팅에서 뵙겠습니다.
참고 문서