클라이언트와 서버의 개념을 이해하고자 혼자 만들어본 짤이다. 이용자는 Client 애플리케이션을 통해서 웹앱(사이트)을 이용하게 되는데, 애플리케이션에서 필요한 리소스를 인터넷을 통해 Server측에 요청하면 해당 응답을 가지고 웹 앱에 리소스를 적용시킨다. 가지고 오는건 데이터가 될 수도 있고, 애니메이션이 될 수도 있고 전체 페이지를 가지고 와서 새로 뿌리게 만들수도 있다. 원래 웹페이지는 고정된 문서기 때문에 뭔가를 보여주기 위해서는 새로운 리소스를 끌어와서 rendering을 해줘야하기 때문이다.
위 이미지를 보면 client는 손님에 비유가 되고, server는 종업원에 비유가 된다. 리소스(커피)가 필요하면, client는 server측에 요청하고, 거기에 대한 응답 리소스(커피)를 받게 되는 식이다. 즉 쉽게 말하면 client는 통상적으로 우리가 사용하는 웹 어플리케이션(Airbnb, 야놀자, 네이버...)라고 생각하면되고, server은 그 어플리케이션 뒤에 숨겨져있는 창고라고 생각 하면 된다.(창고지만, 웹에서 연산하지 못하는 복잡한 것들도 처리하고 있을 것이다.) 결국 client는 손님, server는 종업원이다.
맞다. 그 클라이언트가 클라이언트가 맞다. 온라인 게임 클라이언트 역시, 서버에서 게임 진행상태를 처리하고 클라이언트에서 정보를 받아 갱신시킨다. 예를 들어 내가 클라이언트로 실행시킨 게임에서 몬스터를 때리면, 때렸다는 정보가 서버로 누적되고 처리된 내용이 돌아와서 데미지를 얼마나 입혔는지 죽었는지 살았는지를 갱신시킨다. 고의적으로 악의적 버그 프로그램을 사용하면 서버에 남은 로그를 이용해 이용자를 차단시킬수도 있다.
맨 처음에 만들었던 짤과 동일한 이미지라고 생각하면 된다. 여기에는 두 영역으로 나눠서 클라이언트-서버(2 tier, 2계층) 관계로 구축된 애플리케이션 아키텍처다. tier는 계층을 뜻하는 단어인데, 물리적으로 분리되어있다는 의미를 뜻한다.(layer은 논리적 분리) 클라이언트-서버 2 tier로 웹 서비스를 구축하기 위해서는 client라는 별개의 컴퓨터, server라는 별개의 컴퓨터가 두 개 필요하다.(컴퓨터는 진짜 컴퓨터여도 상관없고, 플랫폼 사업자에서 빌려온 클라우드 컴퓨터여도 상관없다.) 클라이언트의 경우에는 유저의 컴퓨터(혹은 크롬)을 의미하고, 서버의 경우에는 애플리케이션 제공자의 컴퓨터를 의미한다.
정말 쉽게 말하면, 하나의 영역에서 모든 것을 처리하기가 어렵기 때문이다. 유저의 컴퓨터는 유저가 쓰고 있는데 내가 그 영역에 데이터를 억지로 밀어넣는 식으로 운영하는 것은 말이 안된다. 그렇기 때문에 서버를 두고, 데이터나 리소스들을 저장해놓거나 필요에 따라서 추가해가면서 클라이언트 측에 전달한다. 이 방식을 이용하면, 클라이언트에서 실행되어있는 웹 애플리케이션의 정보를 최신화시키는 것도 용이하고 클라이언트의 정보들을 서버에 누적시켜서 다양한 용도로 이용할 수도 있다.
3-tier 아키텍처에서는 서버 이외에 데이터베이스를 하나 더 두는 방식이다. 이 경우에는 데이터만을 관리하는 컴퓨터를 따로 두고 서버는 리소스를 제공하는 용도로만 사용하게 된다. 계층이 2단계가 되므로 데이터 보안성 측면에서도 훨씬 유리해진다. 중간에서 일부 데이터만을 조회해서 가져온 리소스를 선택적으로 제공하므로, 원본 데이터의 안정성을 확보할 수 있다.
프론트 엔드의 경우, 클라이언트의 전반적인 작동과 UI를 담당한다. UI클릭이나 터치, 혹은 마우스 휠같은 다양한 동작조건에 따라서 상호작용하는 앱을 만드는 직군이다. 백엔드의 경우, 이용자가 직접 사용하는 클라이언트보다, 웹 서비스의 후방에서 데이터를 관리하고 리소스를 전송하거나 사용자관리 등의 전반적인 업무를 맡는 직군이다. 서버 뿐 아니라, 데이터를 저장하고 관리해두는 DB까지 직접 시스템 설계를 맡는 업무까지도 백엔드의 범주로 본다.
웹 어플리케이션에서, 클라이언트는 웹 브라우저 혹은 스마트폰/태블릿의 브라우저 애플리케이션, 혹은 데스크탑 애플리케이션 등이 있다. 크롬, 파이어폭스, 빙 등의 브라우저 역시 클라이언트 프로그램이고, 그외에도 Notion이나 Discord같은 애플리케이션 역시 사용자입장에서 사용하는 프로그램이기때문에 클라이언트의 범주에 들어간다.
서버의 경우에는 웹 서버나 파일 전송이나 저장을 해두는 파일 서버, 메일을 관리하는 메일 서버, 데이터베이스(회원정보, 개인정보, 이용자정보, 상품정보...)서버 등이 있다. 애플리케이션 성격에 따라 사용하는 서버는 여러 개 일수도 있고, 서비스의 규모에 따라서 데이터베이스 서버 자체가 센터규모로 큰 경우도 있다.