흔히 음식점에서 음식을 제공하는 행위를 서빙한다라고 합니다. 이 때 음식을 제공하는 사람을 서버라고 부르는데요. 컴퓨터 세상에서도 똑같은 의미로 서버를 정의합니다.
컴퓨터 세상에서는 데이터를 주고받을 때 클라이언트-서버 관계를 이용하여 데이터를 주고받습니다. 이 때 클라이언트는 서버에게 데이터를 달라고 하고, 서버는 요청받은 데이터를 클라이언트에게 내줍니다.
이러한 행위를 클라이언트가 서버에게 요청하고, 서버가 클라이언트에게 응답한다라고 합니다.
대부분의 음식점에서는 한 명의 직원이 여러 고객들에게 서빙을 합니다. 이와 같이 서버와 클라이언트는 1:N 관계를 가지게 됩니다. 하나의 서버가 여러 클라이언트의 요청을 받고 각 클라이언트에게 응답을 보낼 수 있는 것이죠.
여기서 홀 직원이 고객에게 주문을 받았는데, 그 요리를 만들 재료를 당장 얻어와야 하는 상황이라고 가정해 봅시다. 그렇다면 홀 직원은 근처 마트에 가서 재료를 사와야할 것입니다. 이 때 홀 직원은 다시 마트 직원에게 서비스를 받게 됩니다. 서버도 마찬가지입니다. 요청을 받은 서버가 클라이언트에게 줄 데이터를 또 다른 서버에게 요청해야 할 경우, 해당 서버 또한 클라이언트의 입장이 되어 다른 서버에게 데이터를 요청합니다. 즉, 서버-클라이언트 관계는 고정적인 관계가 아닙니다. 하나의 요청과 응답에서 요청을 하는 쪽이 클라이언트이고, 요청을 받고 응답을 하는 쪽이 서버입니다.