클라이언트-서버 구조 (Client-Server Architecture)
쉽게 풀면
식당에 비유하면 손님은 클라이언트, 주방은 서버입니다. 손님이 "이 메뉴 주세요"라고 주문(요청)하면, 주방은 음식을 만들어 내어주고(응답), 손님은 그 결과만 받아서 먹으면 됩니다. 손님은 주방 안에서 요리가 어떻게 조리되는지 몰라도 되고, 주방은 여러 손님의 주문을 동시에 받아 처리할 수 있습니다. 웹 브라우저(클라이언트)가 웹사이트 주소를 입력하면 어딘가의 컴퓨터(서버)가 웹페이지 데이터를 만들어 돌려주는 것도 똑같은 원리입니다.
왜 중요한가
클라이언트-서버 구조는 웹, 모바일 앱, 클라우드 서비스 등 오늘날 대부분의 정보시스템이 기반으로 삼는 기본 설계 방식이기 때문에, 컴퓨터과학 논문에서 시스템 아키텍처를 설명할 때 가장 먼저 언급되는 개념 중 하나입니다. 역할을 클라이언트와 서버로 나누는 방식에 따라 시스템의 확장성, 보안, 유지보수 난이도가 크게 달라지므로, 분산시스템, 네트워크 보안, 클라우드 컴퓨팅 등 여러 상위 연구주제와 직접 연결됩니다. 또한 최근에는 엣지 컴퓨팅이나 서버리스 아키텍처처럼 클라이언트-서버 구조를 변형·확장한 모델들이 활발히 연구되면서, 이 개념을 기준점으로 삼아 새로운 구조의 장단점을 비교하는 경우도 많습니다.
논문에서는 이렇게 쓰입니다
이 문장은 "사용자가 쓰는 기기는 요청만 보내고, 실제 무거운 계산이나 데이터 저장은 중앙의 서버 컴퓨터가 도맡아 처리하도록 역할을 나눠 설계했다"는 뜻입니다.
이 문장은 "센서 장치들은 데이터를 수집해서 보내기만 하고, 그 데이터를 정리하고 걸러내는 작업은 게이트웨이 역할을 하는 컴퓨터가 맡도록 나누어 설계했다"는 뜻입니다.
이 문장은 "플레이어의 조작 정보는 각자의 기기에서 바로 반영되지 않고, 서버가 한번 확인한 뒤에야 모든 참가자의 화면에 똑같이 반영되도록 만들었다"는 뜻입니다.
조금 더 깊게 보면
클라이언트-서버 구조를 다루는 논문에서는 서버가 여러 요청을 동시에 처리하는 방식(동시성 처리, 스레드 풀 등)이나, 클라이언트와 서버 사이의 통신 규약(HTTP, WebSocket 등)이 함께 언급되는 경우가 많습니다. 서버를 한 대가 아니라 여러 대로 구성하는 경우에는 앞서 언급한 로드밸런싱뿐 아니라, 서버 간 상태를 동기화하는 방법이나 장애가 발생했을 때 다른 서버가 대신 처리하도록 하는 이중화(failover) 개념도 함께 등장합니다. 또한 클라이언트-서버 구조와 대비되는 개념으로 P2P(peer-to-peer) 구조가 자주 비교 대상으로 언급되므로, 두 구조의 차이(중앙 집중 여부, 확장성, 단일 장애점 존재 여부 등)를 이해해두면 관련 논문을 읽을 때 도움이 됩니다.
주의할 점
클라이언트-서버 구조는 하나의 서버가 모든 요청을 처리하다 보면 병목이 생길 수 있는데, 이를 완화하기 위해 여러 서버로 요청을 분산시키는 로드밸런싱이 함께 쓰이는 경우가 많습니다. 또한 "서버"는 하나의 물리적 컴퓨터일 수도 있지만, 실제로는 여러 대의 컴퓨터가 협력하는 경우가 대부분이라는 점도 혼동하기 쉬운 부분입니다.