요청과 응답으로 이해하는 클라이언트-서버 구조

1. 모든 인터넷 통신의 기본 패턴

웹 브라우저로 사이트에 접속하든, 스마트폰 앱으로 데이터를 불러오든, 인터넷을 통한 모든 통신의 기저에는 하나의 패턴이 있습니다. 바로 **요청(Request)과 응답(Response)**입니다.

누군가가 무언가를 요청하고(클라이언트), 다른 누군가가 그에 응답합니다(서버). 이 단순한 원칙이 전 세계 수십억 명이 동시에 사용하는 인터넷의 기반입니다.

2. 클라이언트란 무엇인가?

**클라이언트(Client)**는 서버에게 서비스나 데이터를 요청하는 쪽입니다. 사용자가 직접 보고 조작하는 인터페이스를 가지고 있습니다.

일상에서 접하는 클라이언트의 예를 들면 다음과 같습니다. Chrome, Safari, Edge 같은 웹 브라우저, 카카오톡, 인스타그램, 배달앱 같은 스마트폰 앱, 넷플릭스나 유튜브 같은 스트리밍 앱, 온라인 게임 클라이언트 프로그램이 모두 클라이언트입니다.

클라이언트의 핵심 역할은 딱 두 가지입니다. 사용자의 행동을 서버에 전달하고, 서버의 응답을 사용자에게 보기 좋게 표시하는 것입니다.

3. 서버란 무엇인가? (역할 중심으로)

**서버(Server)**는 클라이언트의 요청을 받아 처리하고 결과를 돌려주는 쪽입니다.

클라이언트와 서버의 가장 큰 차이는 주도권에 있습니다. 클라이언트는 항상 먼저 요청을 보내고, 서버는 요청이 올 때까지 기다립니다. 클라이언트가 말을 걸어야 서버가 응답합니다.

서버의 또 다른 특성은 동시 처리 능력입니다. 카카오 서버는 지금 이 순간 수천만 명의 요청을 동시에 처리하고 있습니다. 이를 가능하게 하는 것이 고성능 서버 하드웨어와 최적화된 소프트웨어입니다.

4. 요청(Request)과 응답(Response)의 구조

클라이언트와 서버는 **HTTP(HyperText Transfer Protocol)**라는 규칙에 따라 통신합니다. HTTP 통신에서 요청과 응답은 각각 정해진 구조를 갖습니다.

요청(Request)의 구성 요소

메서드는 무엇을 하려는지 나타냅니다. GET은 가져오기, POST는 생성하기, PUT은 수정하기, DELETE는 삭제하기를 의미합니다.

URL은 어디에 요청하는지를 나타냅니다. 예를 들어 /products/123 같은 형태입니다.

헤더(Header)는 요청에 대한 부가 정보를 담습니다. 어떤 형식의 데이터를 원하는지, 인증 토큰은 무엇인지 등의 정보가 들어갑니다.

바디(Body)는 POST나 PUT처럼 데이터를 전송할 때 실제 내용이 들어가는 부분입니다.

응답(Response)의 구성 요소

상태 코드는 요청 처리 결과를 숫자로 나타냅니다. 200은 성공, 404는 찾을 수 없음, 500은 서버 오류입니다.

헤더는 응답에 대한 부가 정보를 담습니다. 응답 데이터의 형식, 캐시 유효 기간 등이 포함됩니다.

바디는 실제 응답 데이터가 담기는 부분입니다. HTML 파일, JSON 데이터, 이미지 파일 등이 여기에 해당됩니다.

5. HTTP 메서드 – 요청의 종류

REST API에서 사용되는 HTTP 메서드는 각각 명확한 의미를 가집니다.

GET: 서버에서 데이터를 가져오는 요청입니다. 상품 목록 조회, 게시글 읽기 등에 사용합니다. 데이터를 변경하지 않습니다.

POST: 서버에 새 데이터를 생성하는 요청입니다. 회원가입, 게시글 작성, 주문 생성 등에 사용합니다.

PUT / PATCH: 기존 데이터를 수정하는 요청입니다. PUT은 전체 교체, PATCH는 일부만 수정합니다.

DELETE: 서버의 데이터를 삭제하는 요청입니다. 게시글 삭제, 계정 탈퇴 등에 사용합니다.

6. HTTP 상태 코드 – 응답의 결과

서버는 요청을 처리한 후 결과를 상태 코드로 알려줍니다. 상태 코드는 세 자리 숫자이며, 첫 번째 자리로 결과의 성격을 파악할 수 있습니다.

2xx – 성공: 200(OK, 정상 처리), 201(Created, 새 데이터 생성 성공)

3xx – 리다이렉션: 301(Moved Permanently, 주소가 영구 이동), 302(Found, 임시 이동)

4xx – 클라이언트 오류: 400(Bad Request, 잘못된 요청), 401(Unauthorized, 인증 필요), 403(Forbidden, 접근 권한 없음), 404(Not Found, 요청한 리소스 없음)

5xx – 서버 오류: 500(Internal Server Error, 서버 내부 오류), 503(Service Unavailable, 서비스 일시 불가)

웹 서핑 중 “404 오류”를 본 경험이 있으시죠? 그것이 바로 HTTP 상태 코드입니다. 요청한 페이지가 서버에 존재하지 않는다는 의미입니다.

7. 실제 서비스로 보는 클라이언트-서버 동작

배달앱에서 음식을 주문하는 과정을 클라이언트-서버 구조로 살펴보겠습니다.

사용자가 앱(클라이언트)에서 가게 목록을 요청합니다. GET 방식으로 /restaurants?location=강남구 같은 요청을 서버로 전송합니다.

서버가 요청을 받아 해당 지역의 가게 목록을 데이터베이스에서 조회합니다. 조회 결과를 JSON 형태로 만들어 상태 코드 200과 함께 응답합니다.

앱이 받은 JSON 데이터를 예쁘게 화면에 표시합니다.

사용자가 음식을 고르고 주문 버튼을 누르면 POST 방식으로 주문 데이터를 서버에 전송합니다.

서버가 주문을 처리하고 상태 코드 201(주문 생성 성공)과 주문 번호를 응답합니다.

8. 정리 및 다음 단계

오늘 배운 핵심을 정리합니다.

  • 클라이언트는 요청하는 쪽이고, 서버는 응답하는 쪽입니다.
  • 클라이언트와 서버는 HTTP 프로토콜의 요청-응답 패턴으로 통신합니다.
  • 요청에는 메서드(GET/POST/PUT/DELETE), URL, 헤더, 바디가 포함됩니다.
  • 응답에는 상태 코드, 헤더, 바디가 포함됩니다.
  • 상태 코드 2xx는 성공, 4xx는 클라이언트 오류, 5xx는 서버 오류를 나타냅니다.

다음 글에서는 SSH가 무엇인지, 어떻게 서버에 안전하게 접속하는지 알아보겠습니다.

댓글 남기기

광고 차단 알림

광고 클릭 제한을 초과하여 광고가 차단되었습니다.

단시간에 반복적인 광고 클릭은 시스템에 의해 감지되며, IP가 수집되어 사이트 관리자가 확인 가능합니다.