클라이언트-서버 구조 (Client-Server Architecture)

컴퓨터과학·AI
한 줄 정의: 서비스를 요청하는 컴퓨터(클라이언트)와 그 요청을 처리해 응답하는 컴퓨터(서버)로 역할을 나누어 시스템을 구성하는 방식입니다.

쉽게 풀면

식당에 비유하면 손님은 클라이언트, 주방은 서버입니다. 손님이 "이 메뉴 주세요"라고 주문(요청)하면, 주방은 음식을 만들어 내어주고(응답), 손님은 그 결과만 받아서 먹으면 됩니다. 손님은 주방 안에서 요리가 어떻게 조리되는지 몰라도 되고, 주방은 여러 손님의 주문을 동시에 받아 처리할 수 있습니다. 웹 브라우저(클라이언트)가 웹사이트 주소를 입력하면 어딘가의 컴퓨터(서버)가 웹페이지 데이터를 만들어 돌려주는 것도 똑같은 원리입니다.

왜 중요한가

클라이언트-서버 구조는 웹, 모바일 앱, 클라우드 서비스 등 오늘날 대부분의 정보시스템이 기반으로 삼는 기본 설계 방식이기 때문에, 컴퓨터과학 논문에서 시스템 아키텍처를 설명할 때 가장 먼저 언급되는 개념 중 하나입니다. 역할을 클라이언트와 서버로 나누는 방식에 따라 시스템의 확장성, 보안, 유지보수 난이도가 크게 달라지므로, 분산시스템, 네트워크 보안, 클라우드 컴퓨팅 등 여러 상위 연구주제와 직접 연결됩니다. 또한 최근에는 엣지 컴퓨팅이나 서버리스 아키텍처처럼 클라이언트-서버 구조를 변형·확장한 모델들이 활발히 연구되면서, 이 개념을 기준점으로 삼아 새로운 구조의 장단점을 비교하는 경우도 많습니다.

논문에서는 이렇게 쓰입니다

"제안한 시스템은 클라이언트-서버 구조로 설계되어, 사용자 단말(클라이언트)이 요청을 보내면 중앙 서버가 데이터 처리를 전담한다."

이 문장은 "사용자가 쓰는 기기는 요청만 보내고, 실제 무거운 계산이나 데이터 저장은 중앙의 서버 컴퓨터가 도맡아 처리하도록 역할을 나눠 설계했다"는 뜻입니다.

"본 연구에서는 IoT 센서 노드를 클라이언트로, 게이트웨이를 서버로 하는 클라이언트-서버 구조를 채택하여 센서 데이터의 수집과 전처리를 분리하였다."

이 문장은 "센서 장치들은 데이터를 수집해서 보내기만 하고, 그 데이터를 정리하고 걸러내는 작업은 게이트웨이 역할을 하는 컴퓨터가 맡도록 나누어 설계했다"는 뜻입니다.

"게임 서버는 클라이언트-서버 구조를 기반으로 각 플레이어의 입력을 서버에서 검증한 뒤 결과를 모든 클라이언트에 동기화하는 방식으로 동작한다."

이 문장은 "플레이어의 조작 정보는 각자의 기기에서 바로 반영되지 않고, 서버가 한번 확인한 뒤에야 모든 참가자의 화면에 똑같이 반영되도록 만들었다"는 뜻입니다.

조금 더 깊게 보면

클라이언트-서버 구조를 다루는 논문에서는 서버가 여러 요청을 동시에 처리하는 방식(동시성 처리, 스레드 풀 등)이나, 클라이언트와 서버 사이의 통신 규약(HTTP, WebSocket 등)이 함께 언급되는 경우가 많습니다. 서버를 한 대가 아니라 여러 대로 구성하는 경우에는 앞서 언급한 로드밸런싱뿐 아니라, 서버 간 상태를 동기화하는 방법이나 장애가 발생했을 때 다른 서버가 대신 처리하도록 하는 이중화(failover) 개념도 함께 등장합니다. 또한 클라이언트-서버 구조와 대비되는 개념으로 P2P(peer-to-peer) 구조가 자주 비교 대상으로 언급되므로, 두 구조의 차이(중앙 집중 여부, 확장성, 단일 장애점 존재 여부 등)를 이해해두면 관련 논문을 읽을 때 도움이 됩니다.

주의할 점

클라이언트-서버 구조는 하나의 서버가 모든 요청을 처리하다 보면 병목이 생길 수 있는데, 이를 완화하기 위해 여러 서버로 요청을 분산시키는 로드밸런싱이 함께 쓰이는 경우가 많습니다. 또한 "서버"는 하나의 물리적 컴퓨터일 수도 있지만, 실제로는 여러 대의 컴퓨터가 협력하는 경우가 대부분이라는 점도 혼동하기 쉬운 부분입니다.

관련 용어