컴퓨터 세계에서 서버와 클라이언트는 무엇인가?
서버 클라이언트 구조
- 현대 웹 개발의 핵심구조 중 하나.
- 중앙 집중화를 통해 데이터 관리와 보안을 강화할 수 있다.
- 데이터 일관성과 무결성을 유지하기 쉽다.
- 웹의 확장성과 유지보수성을 크게 향상.
N 계층 구조
2계층 구조(2-tier architecture)

- 클라이언트와 서버 등 2개의 노드(node)로 구성된 구조(architecture)를 2계층 구조라고 부름.
- 2계층 구조에서는 서버는 단지 데이터를 저장하는 역할만을 수행하며, 클라이언트가 모든 처리(processing)를 담당함.
2계층 구조의 한계
- 클라이언트의 상대적 성능이 향상되면서 다양한 처리를 클라이언트로 이전할 수 있지만, 데이터의 무결성을 유지하기가 어려움.
- 비즈니스 로직을 클라이언트에 두기 어려운 경우 : 사용자간의 메시지를 주고 받을 때 서버는 데이터를 저장하는 역할만 수행하므로 클라이언트간에 직접 통신을 해야함.
=> 한계를 극복하기 위해 3개 이상의 노드를 네트워크상에서 구성하는 방식을 채용(N계층 구조).
but, FTP, Telnet 서비스 등은 여전히 2계층 구조로 동작.(완전한 대체제는 아님.)
3계층 구조(3-tier architecture)

- 정보, 중간, 클라이언트 등 3개의 계층으로 구성됨.
정보 계층(Information tier)
- 데이터 계층(data tier) 혹은 최하위 계층(bottom tier)이라 부름.
- 어플리케이션을 위한 데이터를 관리.
- 일반적으로 관계형 데이터 베이스(Relational Database)를 이용해 데이터를 저장.
중간 계층(Middle tier)
- 어플리케이션 계층(application tier)으로 부르기도 함.
- 비즈니스 로직(business logic) 및 프리젠테이션 로직(presentation logic)을 구현.
- 어플리케이션 클라이언트와 데이터 간의 상호작용을 제어.
- 정보 계층의 데이터와 어플리케이션 클라이언트 간의 매개자(intermediary)역할을 수행.
클라이언트 계층(Client tier)
- 최상위(top) 계층으로 부르기도함.
- 어플리케이션의 사용자 인터페이스 역할을 수행.
- 중간 계층과 상호작용을 통해 요청을 전달하고 정보 계층에서 데이터를 조회.
웹 어플리케이션 서버와 게임 서버의 공통점과 차이점은 무엇인가?
- 어떤 공통점과 차이점이 있는지? 게임 서버에서 중요하게 다루어야 하는 내용은 무엇인지 조사해주세요.
개념
웹 어플리케이션 서버
- 다양한 서버 내 알고리즘, 비즈니스 로직, DB 조회 등 클라이언트 요청에 따라 동적인 컨텐츠를 제공하는 서버, 프로그램
특징
- HTTP 프로토콜을 기반으로 하여 클라이언트의 요청에 따라 구현된 비즈니스 로직을 통해 동적으로 만들어진 컨텐츠를 반환.
Ex) Tomcat, JBoss, Jeus 등
- 데이터베이스 접속 기능, 여러 개의 트랜잭션 관리 등 수행
게임 서버
- 멀티플레이 비디오 게임을 즐기기 위해 게임 클라이언트에 쓰이는 서버로, 자신의 컴퓨터나 다른 사람의 컴퓨터에서 실행.
특징
- TCP Server, Binary Server, Stateful Server 라고도 불립니다.
- 클라이언트가 패킷을 서버에 전송해도 서버에서 응답을 꼭 보내주지 않아도 됨.
- 서버에서 클라이언트로 패킷을 전송할 수 있습니다.
- 실시간 통신이 중요합니다.
공통점
- 웹 어플리케이션 서버와 게임 서버는 모두 웹 애플리케이션의 구성 요소로, 웹 애플리케이션의 성능과 유지 보수성에 직접적인 영향을 미침.
차이점
- 웹 어플리케이션 서버는 동적 콘텐츠를 처리하는 반면, 게임 서버는 게임을 제공하는 역할을 함.
- 웹 어플리케이션 서버: 클라이언트의 요청에 따라 서블릿을 실행하고, 데이터베이스와 통신하여 동적 콘텐츠를 생성.
- 게임 서버: 게임을 제공하는 역할을 함.
게임서버에서 중요한 요소
프로토콜 최적화
- 데이터 구조와 전송 효율성을 고려하여 프로토콜을 최적화함으로써, 개발자는 네트워크 자원을 효율적으로 사용하고, 게임의 성능을 향상시킬 수 있음.
비동기 처리
- 서버가 요청을 받고 처리하는 동안 다른 요청을 계속 받을 수 있게 함.
- 이는 서버의 처리 능력을 최대한 활용하고, 사용자에게 빠른 응답을 제공할 수 있게 함.
=> 게임 서버는 대량의 요청을 실시간으로 처리해야 하며, 지연 시간을 최소화해야 하기 때문에 비동기 처리가 중요함.