클라이언트 (Client)

A piece of computer hardware or software that accesses a service made available by a server.

— 국제 인터넷 네트워크 통신 규약 권고안에서 정의하는, 요청을 시작하고 결과를 소비하는 종단 노드(End Node)의 전산학적 정체성

눈앞에서 화려하게 번쩍이는 이쁜 UI 단추와 이미지 화면으로 전 세계 일반 사용자들의 지갑을 열게 현혹하는 디지털 쇼윈도의 본체. 하지만 물밑에서는 백엔드 서버로부터 콤팩트한 JSON 텍스트 하나만 겨우 빌려와, 온갖 자바스크립트 가상 DOM 연산 노가다로 생명력을 뿜어내는 가난한 광대(...)

1. 개요

네트워크 아키텍처 구조 내에서 서비스를 필요로 하는 주체이자 요청을 최초로 개시하는 단말 시스템. 사용자가 마주하는 스마트폰 앱 화면, 웹 브라우저(browser) 소프트웨어, PC 데스크톱 프로그램 등을 통칭하며, 서버가 던져준 차가운 가공 데이터들을 맛깔나고 눈이 정화되는 이쁜 시각 레이아웃으로 조립해 주는 프론트엔드(Frontend) 제국의 본진이다.

2. 요청의 씨앗을 뿌리는 끝단 일꾼

클라이언트는 네트워크 세상에서 절대 먼저 움직이지 않는 차가운 서버의 마음을 움직이게 만들기 위해, 먼저 정중히 머리를 조아려 통신 규격 프로토콜 양식에 맞게 '요청(request-and-response)'의 씨앗 패킷을 전송하는 임무를 전담한다. 서버가 이 신호를 받아 공장에서 땀 흘려 가공해 뱉어준 날것의 텍스트 원본(HTML, CSS, JSON 등)을 전송받으면, 브라우저의 렌더링 물리 엔진을 가동해 픽셀 단위로 그림을 그리고 스타일을 입혀 인간이 감상할 수 있는 우아한 화면으로 가공해 낸다.

3. 관련 밈 및 드립

3.1. 클라이언트 개발자의 한숨, 그거 새로고침하면 잘 됨

사용자나 기획자가 '앱 화면 특정 구석이 깨져 나오거나 데이터 연동이 원활하지 않다'며 화면 버그 제보를 해왔을 때, 전 세계 모든 클라이언트/프런트엔드 개발자들이 즉각 가동하는 일일 만병통치약 탈출 대사이다. 이들은 '네트워크 통신 일시적 충돌이나 브라우저 로컬 캐시가 꼬인 사소한 촌극이니, 일단 폰 앱을 껐다 켜거나 브라우저 강제 새로고침(F5) 주술 단추를 갈기면 기적처럼 100% 정상 수리된다'며 가볍게 뭉개곤 한다.(...)

4. 여담

  • 뚱뚱한 클라이언트 (Fat Client) vs 날씬한 클라이언트 (Thin Client): 역사적 아키텍처 줄다리기이다. 브라우저 성능이 후달려 서버가 완성된 HTML을 다 구워서 던져주던 옛날 방식이 Thin Client라면, 현대 초고성능 스마트폰과 V8 엔진의 축복으로 클라이언트 단말기 내부에서 직접 거대한 자바스크립트 싱글 페이지 어플리케이션(spa) 가상 DOM 연산을 통째로 처리해 들이밀며 스스로 비즈니스 연산을 상당량 소화해 내는 고성능 모던 클라이언트 구도를 Fat Client / Rich Client라고 부른다.
  • 클라이언트 가짜 데이터 조작 위협: 클라이언트는 일반 사용자의 기기 제어권 하에 있기 때문에, 해커들이나 똑똑한 유저들은 브라우저 개발자 도구 F12 창을 열고 자바스크립트 변수 값이나 HTML 폼 내부 값을 마음대로 수정해 서버로 쏠 수 있다. 이 때문에 노련한 백엔드 엔지니어들은 '클라이언트가 보내온 모든 입력값 데이터는 위조 오염된 쓰레기'라는 보안 대전제를 기본 헌법으로 삼아, 백엔드 서버 심장부에서 2중 3중 정밀 검증 수리를 가동한다.
  • 다양한 변장, User-Agent: 클라이언트가 서버로 요청 패킷을 보낼 때, 헤더 장부에 '나는 애플 사파리 브라우저다', '나는 구글 깡통 크롤링 로봇봇이다'라고 자아의 본질을 밝히는 명찰을 붙인다. 이 명찰이 바로 User-Agent이며, 해커들은 이 명찰을 수시로 변장하여 사내 보안망을 우회 공략하곤 한다.

5. 관련 문서