클라이언트와 서버

클라이언트, 서버란?

식당에서 주문을 할 때를 생각해봅시다. 여러분은 메뉴판을 보면서 주문을 하려고 합니다. 이때, 여러분이 메뉴를 주문하면 종업원이 주문을 받아서 주방에 전달하고, 요리사는 주문에 따라 요리를 만들어냅니다.

이것을 IT 용어로 비유하자면, 여러분이 손님이 되고 종업원이 클라이언트, 주방이 서버가 되겠죠. 클라이언트(여러분)는 주문(요청)을 하면, 서버(주방)는 그 요청에 맞게 요리(응답)를 만들어서 제공합니다.

이때 여러분이 말한 주문은 클라이언트의 요청이라고 볼 수 있습니다. 주방에서 요리를 만들어서 가져오는 것이 서버의 응답이 됩니다. 이런 상황을 IT에서는 클라이언트와 서버 간의 상호작용으로 생각할 수 있습니다.

클라이언트와 서버의 상호작용은 마치 우리가 휴대폰으로 앱을 이용하는 것과 비슷합니다. 예를 들어, 여러분이 휴대폰에 있는 어플리케이션을 실행하면, 그 어플리케이션은 서버와 소통하여 여러 가지 정보를 주고받습니다.

휴대폰 어플리케이션을 사용할 때, 여러분이 화면을 터치하거나 특정 기능을 요청하면 이는 클라이언트에서 서버로의 요청입니다. 이때 클라이언트인 여러분은 서버에게 어떤 작업을 수행해 달라고 요청하는 것이죠.

예를 들어, 여러분이 친구에게 메시지를 보내거나 인스타그램에서 사진을 업로드하면, 이는 클라이언트가 서버에게 메시지를 전송하거나 이미지를 업로드해 다른 사용자들에게 보여주라고 요청하는 것입니다. 서버는 이런 요청을 받아들여 작업을 처리하고, 결과로써 여러분이 보낸 메시지가 전송되거나 이미지가 업로드되어 다른 사용자들에게 보여집니다.

이런 상호작용에서는 클라이언트가 요청을 보내면, 서버가 그 요청을 이해하고 적절한 작업을 수행하여 응답을 반환합니다. 이러한 원리가 웹 서비스, 앱, 소셜 미디어 등 여러분이 일상에서 사용하는 다양한 디지털 서비스에 적용되고 있습니다. 이런 개념들을 통해 여러분은 클라이언트와 서버 간의 소통이 어떻게 이뤄지는지 감을 잡을 수 있을 것입니다. 

클라이언트, 서버, API

한강을 걸어가고 있는 상황을 상상해보세요. 스마트폰을 꺼내 앱을 다운로드할 수 있는 마켓에 들어가서, 카카오톡을 설치하는 경험을 즐겨보세요. 이 모든 과정은 우리 일상의 일부이며, 다양한 IT 서비스가 동작하는 방식을 이해하는 데에 기여합니다.

먼저 앱스토어에 들어가서 카카오톡을 찾아 다운로드 버튼을 누르면, 가까운 기지국으로 ‘카카오톡 설치 파일을 전송해줘!’라는 신호가 전송됩니다. 이 신호는 Wide Area Network (WAN)을 통해 이동하며, 최종 목적지는 정해진 컴퓨터 주소, 마치 우편물이 특정 주소로 전달되는 것과 유사합니다.

이때 목적지는 앱스토어이기 때문에 해당 신호는 애플이 소유한 컴퓨터로 전송됩니다. 애플은 이미 카카오톡 파일을 보유하고 있어서 이를 다운로드할 수 있게 해줍니다.

다운로드가 진행되면 카카오톡은 실행되어 운영체제 상에서 동작하게 됩니다. 실행 파일은 컴퓨터의 보조기억장치에 저장되고, 클릭 시 메모리로 로딩되며, CPU가 이 데이터를 처리하여 카카오톡이 동작합니다.

이제 설치된 카카오톡을 실행하고 친구들이 보낸 이미지나 동영상을 다운로드하는 과정을 생각해봅시다. 이때의 과정은 앱스토어에서 다운로드한 과정과 유사합니다. 사용자는 클라이언트 컴퓨터로서 서버 컴퓨터에게 요청을 보내고, 서버는 해당 요청에 따라 데이터를 전송합니다.

여러분의 스마트폰은 클라이언트 컴퓨터로써, 클라이언트와 서버 간의 통신에서는 API가 사용됩니다. 이 API는 요청과 응답을 주고받을 수 있도록 체계를 제공합니다. 예를 들어, ‘메시지를 주세요’라는 요청은 서버의 주소/A로 전송되고, 서버는 해당 주소에서 ‘로그인 기능’을 수행하고 응답합니다.

이때 API에서 사용되는 메소드는 크게 다섯 가지입니다. Create(생성)는 POST, Read(불러오기)는 GET, Update(수정)은 PUT 또는 PATCH, Delete(삭제)는 DELETE입니다. 이 메소드들은 클라이언트와 서버 간의 통신에서 사용되며, 요청의 성공 여부는 HTTP 상태 코드를 통해 전달됩니다. 200번대는 ‘잘 됐어’를 나타내고, 400번대는 클라이언트 오류, 500번대는 서버 오류를 나타냅니다.

이처럼 API는 소프트웨어 간의 효율적인 통신을 가능케 하며, RESTful API는 이러한 통신을 보다 체계적으로 관리하기 위한 규칙을 제공합니다. 이를 통해 개발자들은 효과적으로 소프트웨어의 기능을 활용하고, 사용자는 더 편리하게 서비스를 이용할 수 있게 됩니다.