네트워크 & 통신
서버와 클라이언트
생각없는 개발자
2024. 11. 21. 17:03
1. 서버(Server)란?
서버는 클라이언트의 요청을 처리하고, 그 요청에 따라 데이터를 제공하거나 특정 작업을 수행하는 역할을 담당하는 컴퓨터 시스템이나 프로그램입니다.
서버의 주요 역할:
- 클라이언트로부터 요청을 받고 이를 처리.
- 처리된 결과나 데이터를 클라이언트에 응답.
- 데이터와 리소스를 중앙에서 관리.
서버의 종류:
- 웹 서버: HTTP를 통해 웹 브라우저(클라이언트)에 웹 페이지를 제공.
- 예: Apache, Nginx, Microsoft IIS
- 애플리케이션 서버: 클라이언트에게 특정 애플리케이션 로직을 제공.
- 예: Spring Boot, Django, Express.js
- 데이터베이스 서버: 데이터베이스에 저장된 데이터를 제공하거나 저장.
- 예: MySQL, PostgreSQL, MongoDB
- 파일 서버: 파일을 저장하고 공유.
- 예: FTP 서버, Samba
- 게임 서버: 게임 데이터를 관리하고 멀티플레이어 환경을 지원.
서버의 특성:
- 항상 실행 상태: 클라이언트 요청을 기다림.
- 다중 처리: 여러 클라이언트의 요청을 동시에 처리 가능.
- 강력한 하드웨어: 대량의 데이터를 처리하고 많은 연결을 지원할 수 있도록 설계.
2. 클라이언트(Client)란?
클라이언트는 사용자가 직접 사용하는 장치나 애플리케이션으로, 서버에 요청을 보내고 결과를 받는 역할을 합니다.
클라이언트의 주요 역할:
- 사용자와 상호작용(입력, 출력).
- 서버에 요청을 전송.
- 서버에서 받은 데이터를 사용자에게 표시.
클라이언트의 종류:
- 웹 브라우저: 사용자가 웹 페이지를 요청.
- 예: Chrome, Firefox, Edge
- 모바일 앱: 서버와 통신하여 데이터를 가져오고 화면에 표시.
- 예: 카카오톡, 유튜브 앱
- 데스크톱 애플리케이션: 설치된 프로그램이 서버와 통신.
- 예: 게임 클라이언트, 메일 클라이언트
- IoT 장치: 데이터를 서버로 보내거나 서버로부터 명령을 수신.
- 예: 스마트 스피커, 스마트 냉장고
클라이언트의 특성:
- 요청 중심: 서버에 요청을 보내고 응답을 받음.
- 사용자 친화적: 주로 사용자 인터페이스(UI)를 제공.
- 경량성: 서버만큼의 처리 능력이나 저장 공간은 필요하지 않음.
3. 서버-클라이언트 관계와 동작 원리
서버와 클라이언트는 요청-응답(Request-Response) 모델을 기반으로 동작합니다.
- 클라이언트가 요청: 사용자가 브라우저를 통해 URL을 입력하거나 애플리케이션에서 데이터를 요청.
- 서버가 요청을 처리: 서버는 요청 내용을 해석하고, 필요한 데이터를 검색하거나 작업을 수행.
- 서버가 응답: 처리된 데이터를 클라이언트에게 전달.
- 클라이언트가 결과를 표시: 받은 데이터를 화면에 출력하거나 사용자가 볼 수 있는 형태로 가공.
동작 예시 (웹 브라우저와 웹 서버):
- 사용자가 http://example.com에 접속:
- 클라이언트(웹 브라우저): example.com의 HTML 페이지를 요청.
- 서버(웹 서버): 해당 요청을 처리하고 HTML 데이터를 응답.
- 클라이언트: HTML을 해석해 화면에 웹 페이지를 렌더링.
4. 서버와 클라이언트 간 통신 방식
통신 프로토콜
서버와 클라이언트는 **프로토콜(Protocol)**을 사용해 데이터를 주고받습니다.
- HTTP/HTTPS: 웹 브라우저와 웹 서버 간 통신.
- FTP: 파일 전송.
- SMTP/IMAP/POP3: 이메일 전송 및 수신.
- WebSocket: 실시간 양방향 통신.
통신 방법
- 동기식 통신: 클라이언트가 요청 후 서버 응답을 기다림.
- 비동기식 통신: 요청을 보내고 응답을 기다리지 않음. 서버 응답이 준비되면 별도로 수신.