서버와 클라이언트
안녕하세요
퓨처링 입니다.
이번 시간에는 서버와 클라이언트에 대해 알아 보도록 하겠습니다.
서버의 기초개념을 알고 싶으신 분은 하단 링크를 통해 알아보세요!
서버가 무엇인가요?
서버와 짝꿍, 클라이언트(client)
위 글을 읽고 오셨다면, 서버에 대해서 어느정도는 이해하셨을거라고 생각합니다.
오늘 이야기할 서버는 하드웨어(제품)로서의 서버가 아닌, 서비스로서의 서버(Server)와 클라이언트에 대한 내용 입니다.
서버는 보통 고객이나 대상에서 데이터를 가공하여 제공하는 역할을 하는데요, 서버가 만들어지는 이유는 특별한 데이터를 필요로 하는 고객이 있어야 하겠죠. 이를 우리는 클라이언트(Client)라고 해요.
예를 들어, 여러분이 핸드폰으로 네이버 지도에서 광화문에서 청와대를 찾아가야 한다면 핸드폰에서는 서버에게 “야, 광화문 위치랑 청와대 위치를 보낼 테니까 찾아갈 수 있는 정보를 보내줘.”라고 요청하고, 서버는 이리저리 계산해서 핸드폰에게 답장을 줍니다.
여기서 클라이언트는 여러분의 “핸드폰”이 될 것이고, 서버는 네이버가 운영하고 있는 IDC(Internet Data Center) 의 특정 컴퓨터 내에 설치되어 있는 개발 프로그램이 됩니다.
네이버지도 길찾기. 이런 단순한 그림을 표현하는데도 많은 양의 정보를 검색하고 가공해야 한다.
왜 서버랑 클라이언트를 분리해 놓았어?
사실, 모든 정보를 한 곳에 저장해두고 제공하는 서비스들도 있어요.
예를 들어, 구글 번역기 같은 경우는 핸드폰 APP으로 사용하면 한국어를 서버에서 다운로드 할 수 있도록 기능을 제공해요. 다운로드 받으면, 번역을 진행할 때 굳이 먼 곳에 있는 서버를 거치지 않고도 번역기능을 이용할 수 있죠. 다운로드가 되지 않으면? 글자를 입력할 때마다 구글 서버에 정보를 요청하여 번역이 이루어지게 되요.
구글에서 제공하는 구글 번역기 APP. 여행자들을 위해 핸드폰 내에서 번역해주는 언어 다운로드 기능을 제공 한다.
하지만, 계정 인증이 필요하거나 클라이언트만으로는 복잡한 계산을 할 수 없는 경우, 또는 데이터가 너무 커 클라이언트의 장비로는 감당이 어려운 경우라면 정보를 처리하는 서버를 별도로 설치할 수 밖에 없어요.
그럼 회사가 자체적으로 운영하는 서버를 두고, 클라이언트로 접속하는 고객들은 원하는 데이터만 골라서 받는 것이 클라이언트의 부하를 덜어주니 이런 방식이 서로 더 유리한 것이죠.
또한 데이터가 수시로 바뀌어야 하고, 서로 정보가 공유되어야 하는 경우 (ex.커뮤니티) 라면 더욱이 서버와 클라이언트가 분리되어야 합니다. 클라이언트에서 서버역할까지 한다면, 핸드폰을 공유하지 않는 이상 다른 사람이 작성한 글을 여러 명이 같이 볼 수 없을 테니까요.
일반적인 APP의 데이터교환 다이어그램
대부분의 서비스는 인증 및 공유, 또는 많은 데이터를 선별적으로 제공하는 서비스이기 때문에, 이런 서버와 클라이언트를 구분하는 방식을 취할 수 밖에 없어요. 인터넷이 발달하게 되면서 더욱 이런 현상이 두드러졌죠. 결국 우리는 PC든 핸드폰이든 어떤 기기를 써도 고급 정보를 손쉽게 얻을 수 있게 되었어요.
웹서버는 뭐야?
여러분들이 가장 많이 접하고, 가장 익숙한 서버가 아마도 웹 서버 (Web Server)일 거에요.
웹 서버는 인터넷 상에서 클라이언트가 정보를 필요로 할때 DB에서 정보를 꺼내 가공해서 보여주는 서버에요. 즉, 여러분이 이용하는 크롬(Google Chrome) 브라우저나, 엣지(Microsoft Edge) 브라우저는 클라이언트 이고, 정보를 가공해서 보여주는 것은 서버인 거죠.
브라우저에서 퓨처링(https://futuring.co.kr)과 같은 도메인 주소를 입력하고 진입하면, 서버에서는 처음에 보여줄 데이터를 뽑아와서(백엔드) 이쁘게 꾸며달라고(프론트엔드) 브라우저에게 전달하고, 브라우저는 그 정보를 해석해서 그대로 화면에 뿌려주는 역할을 해요. 이것이 바로 서버와 클라이언트가 유기적으로 움직이는 방식이에요. 만약에 새로고침을 했는데 정보가 달라졌다면? 서버에서 새로운 정보를 보내준 것이죠.
사실 한번 왔다갔다 하는 것만으로도 꽤 많은 계산과 정보가 왔다갔다 해요. 예를 들어, 암호화된 비밀번호같은 경우는 로그인을 할 때 보안 절차를 거치면서 수만줄의 개발코드들을 거치며 점검하고 해독해서 정상일 경우에 로그인 OK 사인을 보내주죠.
한 사람이라면 괜찮겠지만, 똑같은 과정을 수만명 이상이 한꺼번에 하고 있다면? 서버 전체에 부하가 걸리고 전체 웹서비스가 다운 될거에요.
웹서버 중에 현재 가장 유명한 프로그램으로는 Apache HTTP Server와 NGINX가 있어요. (현재 NginX가 점유율 1위라고 합니다.)
웹서버 프로그램의 양대산맥. APACHE HTTP Server 와 NGINX.
미들웨어(Middleware)와 CDN
정보교환의 효율성을 높이기 위해 서버를 여러 레이어(층)으로 나누기도 하는데, 그 중에 미들웨어와 CDN이 있어요.미들웨어는 말 그대로 중간에 있는 서버로, 웹서버와 DB(Database)서버 사이에 자리잡고 있어요. 미들웨어는 중개자 역할로, DB의 정보를 가져와 계산하고, 가공하고, 결과값을 도출하는 등의 작업을 거쳐 웹서버로 전달하거나, 반대로 웹서버(또는 프론트엔드)에서 얻은 정보를 가공해서 DB서버에게 전달하기도 해요. 미들웨어 계층에는 우리가 한번 쯤은 들어봤을 만한 WAS(Web Application Service) 라는 것이 있고, WAS 솔루션 중에서는 JEUS와 톰캣 등이 유명 해요.
보통 대규모 웹서비스는 이런 구조를 가지고 있다.
CDN은 Content Delivery Network의 약자로, 엣지 컴퓨팅의 핵심이라고 할 수 있어요.
서버에 있는 정보를 미리 빼내서 전세계 각 지역 또는 클라이언트의 컴퓨터에 저장해두고, 클라이언트가 동일한 정보를 요구할때 최신 정보인지만 체크해서 바로 뿌려주는 역할을 하죠. 캐시의 기능과 비슷해요. 이미 저장되어 있는 정보라면 서버에서 정보를 가공해 오는 것보다 훨씬 빠르겠죠? 이 기능은 프록시서버(Proxy Server)라고 불리는 서버의 기능과 원리가 유사해요.
다음시간에는..
웹서버 외에도 이런 여러가지 서버들이 존재해요. DB서버, 메일서버, 파일서버 등등..
다음시간에는 웹 서버 이외에 다른 서버들의 종류에 대해 알아보는 시간을 가져 보도록 할게요.
그럼 다음 시간에 만나요!
김에디터
B2B IT 제품 커머스 플랫폼 - 퓨처링