부트캠프

컴퓨터 세계 에서 의 서버와 클라이언트

한우종 2024. 8. 25. 21:53
  • 서버 란?
서버는 클라이언트의 요청을 처리하고 , 데이터를 제공하는 컴퓨터 또는 프로그램이다.
서버는 데이터 저장,웹페이지 호스팅, 이메일 서비스,파일 공유등 다양한 서비스를 제공한다.
서버는 항상 켜져 있어야 하며 여러 클라이언트의 요청을 동시에 처리할 수 있다.

 

  • 클라이언트의 요청 동시처리
서버가 클라이언트의 요청을 동시에 처리할 수 있다는 것은 여러 클라이언트가 동시에 서버에 요청을 보내 오더라도 서버가 이를 효율적으로 처리할 수 있는 능력을 의미한다.
이를 가능하게 하는 여러가지 기술을 알아보자

①.멀티 스레딩
서버는 여러 스레드를 생성하여 각 클라이언트의 요청을 별도의 스레드에서 처리한다.
그에 따라 서버의 응답속도가 향상된다.

②.비동기 처리
비동기 방식은 요청을 처리하는 동안 다른 작업을 수행할 수 있다. 클라이언트의 요청을 받은 서버는
즉시 응답을 반환(요청을 처리중입니다 등)하고 요청된 작업은 백그라운드에서 진행된다.

③.프로세스 기반 처리
서버는 각 클라이언트의 요청에 대해 별도의 프로세스를 생성하여 요청을 처리할 수 있다.
이 방법은 메모리 사용량이 많지만, 각 프로세스가 독립적으로 실행되기 때문에 안정성이 높다.

④.로드 밸런싱
여러대의 서버를 사용하여 클라이언트의 요청을 분산처리 한다.
들어오는 요청을 여러 서버에 분배하여 각 서버의 부담을 줄이고 전체 시스템의 성능을 향상시킨다.

 


  • 클라이언트 란?
클라이언트는 서버에 요청을 보내고 서버로부터 데이터를 받아 사용하는 컴퓨터 또는 프로그램이다.
클라이언트는 사용자 인터페이스를 제공하며 사용자가 서버에 요청을 보내고 응답을 받아서 정보를 표시한다.
클라이언트는 일반적으로 사용자의 컴퓨터 혹은 모바일기기 에서 실행된다.

대표적으로
①.웹 브라우저(웹페이지를 요청하고 표시)
②.이메일 클라이언트(이메일서버에 접속하여 이메일을 송수신한다) 등이 있다.

 

  • 클라이언트와 서버의 상호작용
클라이언트와 서버는 요청 - 응답 모델로 상호작용한다.
클라이언트가 서버에 요청을 보내면 서버는 해당 요청을 처리하고 결과를 클라이언트로 반환한다.
이 과정은 네트워크를 통해 이루어지며 HTTP,FTP,SMTP 등의 프로토콜을 사용하여 통신한다.
이러한 구조는 인터넷의 기본적인 작동 원리 이며 다양한 애플리케이션과 서비스의 기반이 된다.

 

  • 웹 애플리케이션 서버와 게임서버의 공통점과 차이점
공통점

①.두 서버 모두 클라이언트의 요청을 처리하고 응답을 반환하는 구조이다.(클라이언트-서버 모델)

②.HTTP,Web Socket 등 다양한 프로토콜을 통해 클라이언트와 통신한다.(네트워크 통신)

③.사용자 데이터,세션정보 등을 저장하고 관리하기 위해 데이터베이스와 연동된다.(데이터베이스 연동)

④.사용자의 수가 증가함에 따라 서버의 성능을 확장할 수 있는 구조를 갖추고 있다.(확장성)

 

차이점 웹:웹 애플리케이션 서버 ,겜 : 게임 서버

①.목적
웹 : 주로 웹 페이지를 제공하고, 사용자 요청에 따라 데이터를 처리하여 HTML,JSON등의 형식으로 응답한다.
겜 : 실시간 게임 플레이를 지원하며, 게임 상태를 관리하고 여려 클라이언트 간의 상호작용을 처리한다.

②.상태관리
웹 : 일반적으로 무상태(stateless)로 설계되어, 각 요청이 독립적으로 처리된다.
세션 관리가 필요할 경우 쿠키나 세션 스토리지를 사용한다.
겜 : 상태가 중요한 경우가 많아 게임의 현재상태를 지속적으로 관리해야한다.

③.성능 요구사항
웹 : 일반적으로 요청-응답 주기가 길고 성능최적화가 중요하지만 실시간성이 덜 요구된다.
겜 : 실시간 반응성이 매우 중요하며 지연(latency)을 최소화 해야한다.
따라서 더 높은성능,빠른 응답 시간이 필요하다.

④.데이터 처리 방식
웹 : 주로 CRUD작업을 처리한다.
겜 : 실시간 데이터 동기화, 이벤트 처리, 게임 로직 실행 등 복잡한 데이터 처리가 필요하다.

  • 게임 서버에서 중요하게 다뤄야 하는것
①.클라이언트 간의 실시간 상호작용을 지원하기위해 Web Socket이나 UDP프로토콜을 사용하여
빠른 데이터 전송을 구현해야한다.

②.게임의 현재 상태를 효율적으로 관리하고,클라이언트와 서버간의 상태 동기화를 유지해야한다.

③.해킹,치팅 방지및 사용자 데이터 보호를 위한 보안 메커니즘이 필요하다.

④.사용자 수가 급증할 경우를 대비하여 서버를 수평적으로 확장할 수 있는 구조를 설계해야 한다.

⑤.게임의 규칙과 로직을 서버에서 처리하여 클라이언트의 조작이 일관되게 반영 되도록 해야한다.

⑥.게임의 진행상황,사용자 정보등을 효율적으로 저장하고 조회할 수 있는 데이터 베이스 구조가 필요하다.