C++ 게임 서버를 개발하기 위해서는 소켓 프로그래밍(Socket Programming)에 대한 이해가 필수적입니다. 그리고 소켓 프로그래밍을 제대로 다루기 위해서는, 그 기반이 되는 네트워크(Network)와 운영체제(OS)에 대한 기본적인 지식이 선행되어야 합니다.
첫 번째 목표는 Socket Open & Close의 정확한 이해입니다. 단순히 코드만 나열하는 것이 아니라, 그 안에 내포된 OS와 네트워크 개념을 함께 이해해야 각 코드가 왜 필요한지, 어떤 의미를 가지는지를 명확히 알 수 있습니다.
하지만 OS와 네트워크 이론에 지나치게 매몰되다 보면, 정작 중요한 소켓 프로그래밍을 시작하기도 전에 지치기 쉽습니다. 그렇기에 저의 블로그 방향성은 이론과 실습 사이의 균형을 맞추어, 실질적으로 소켓 프로그래밍에 도움이 되는 수준의 개념만을 선별하여 설명하고자 합니다.
네트워크와 OS는 처음 접하면 용어와 개념이 복잡하게 느껴질 수 있지만, 핵심 개념들을 단계적으로 정리해 나간다면 충분히 이해할 수 있는 분야입니다. 이 글을 통해 소켓 프로그래밍의 출발선에 보다 수월하게 설 수 있기를 바랍니다.
(이 글은 여러 기술 문서와 교재 등 다양한 자료를 참고하였습니다.)
컴퓨터 네트워크는 크게 단말기(Terminal) 와 네트워크 장비로 구성됩니다. 여기서 단말기란? 네트워크의 끝단(end-point)에 위치하여 데이터를 송수신하는 최종 사용자 측 장치를 의미합니다.
단말기에는 데스크톱 컴퓨터, 노트북, 스마트폰뿐만 아니라 네트워크의 끝단에서 통신을 수행하는 서버 컴퓨터도 포함될 수 있습니다.
일부 서적에서는 단말기를 호스트(Host) 라고 표현하기도 합니다. 과거에는 Host와 Terminal이 명확히 구분되었지만, 현대의 PC 환경에서는 하나의 장치가 단말기와 호스트 역할을 동시에 수행하는 경우가 많습니다. 본 글에서는 혼동을 피하기 위해 단말기라는 용어를 사용하겠습니다.
한편 게임에서 방장이나 권한 관리자로 표현되는 Host는 Session Host 또는 Room Host라 불리며,서버나 머신을 의미하는 Host와는 다른 논리적 개념입니다. 서버 관점에서의 Host는 다른 시스템이나 사용자에게 자원이나 서비스를 제공하는 컴퓨터를 의미합니다.
관점에 따라 의미는 다르지만, Host라는 용어는 공통적으로 "자원이나 공간을 제공하고 외부의 접근을 받아들인다" 는 의미로 이해할 수 있습니다.

단말기는 클라이언트와 서버로 구분합니다. 역할에 따라 단말기는 클라이언트와 서버로 구분할 수 있으며, 하나의 단말기가 상황에 따라 두 역할을 모두 수행하기도 합니다. 클라이언트는 사람이 만지는 컴퓨터를 의미하며, 서버는 많은 사람이 만지는 단말기에 서비스를 제공하는 무인 컴퓨터를 지칭합니다
가장 기본적인 컴퓨터 네트워크 구성은 두 단말기를 직접 네트워크 케이블로 연결하는 것입니다. 하지만 이렇게 하면 단말기 2대밖에 작동하지 못합니다. 단말기 3대 이상 간 통신을 하려면 아래와 같은 방법을 사용합니다. 이를 링 위상(ring topology)라고 합니다.
요즘은 이렇게 컴퓨터 네트워크를 구성하는 것을 보기 어렵습니다. 대부분 네트워크 기기를 사용합니다.
단말기 사이에는 네트워크 스위치 라는 기기가 있고, 네트워크 스위치는 단말기들과 네트워크 케이블(흔히 랜선이라고 하는 것)로 연결되어 있습니다. 이렇게 네트워크 스위치 하나를 사이에 두고 별 모양으로 단말기들이 연결되어 있는 것을 흔히 로컬 지역 네트워크, LAN이라고 합니다.
우리 주변에서 볼 수 있는 LAN은 이렇게 네트워크 스위치와 랜선으로 구성됩니다. 그리고 이렇게 별 모양으로 되어 있는 것을 별 위상(star topology) 라고 합니다. 아래 사진이 네트워크 스위치 입니다.

근거리 통신망(LAN)이란? 가까운 지역을 묶어 대표적인 컴퓨터 네트워크입니다. LAN은 한정된 지역에서 컴퓨터를 기본으로 하는 여러 가지 전자 기기간에 자유롭게 정보 교환을 가능하게 합니다. LAN은 사용자가 직접 구축해서 운영하기 어렵지 않습니다. 심지어 제조사가 서로 달라도, 기기 간의 통신 규격이 서로 달라도 가능합니다. OSI 모델 표준만 지켜주면 됩니다. 아래는 쿠팡 제품의 LAN 사진입니다.

OSI 모델이란? 컴퓨터 네트워크 통신에 대한 국제표준입니다. 이 표준만 잘 지키면 어떤 기기든, 심지어 어떤 형태의 통신 선로를 사용하든 컴퓨터 간 통신을 할 수 있습니다. LAN의 기본적인 프레임 기반 통신은 OSI 모델의 계층 2를 기반으로 동작합니다.
OSI 모델 7계층과 TCP/IP 4계층들은 네트워크 지식에 있어서 필수이기에 이후 글에서 자세히 다루겠습니다. 본 글에서는 소켓 프로그래밍에서 중요한 OSI Model's Layer 2, 3을 간단히 다루겠습니다.

게임 프로그램을 만드는 것도 결국 5~7 계층 중 어딘가를 정의하는 셈입니다.
OSI 모델의 계층 2를 간단하게 설명하자면 다음과 같습니다.
우리가 흔히 게임하다가 "프레임 끊겼다"의 프레임(frame)은 시간 단위로 표시되는 화면 이미지 한 장을 뜻하며 그래픽/영상/렌더링 단위를 입니다.
OSI 모델의 계층 2를 우편에 주로 비유 합니다. 단말기들은 작은 마을과 같습니다. 일단 각 단말기는 서로 다른 주소를 가져야 합니다. 그리고 보내는 데이터는 편지에 해당합니다. 편지지 내용에 해당하는 것은 단말기가 보내고자 하는 데이터합니다. 이를 페이로드(payload)라고 합니다.
편지지가 들어 있는 봉투에는 수진자를 적습니다. 물론 송신자도 적어야 하겠죠. 이 봉투를 우리는 헤더(hear) 라고 합니다. 봉투에 편지지가 들어 있으면, 즉 헤더와 페이로드를 합친 결과물을 프레임(frame)이라고 합니다.

이렇게 구성한 LAN은 크기가 제각각입니다. 일반적으로 빌딩 한 층 정도를 다룰 수 있습니다. 이보다 많은 컴퓨터를 연결하려면 어떻게 해야할까요? 일단 몇 가지 문제가 있습니다.
이 문제의 해결책 중 하나는 서로 다른 네트워크 기기 간에 연결하는 것입니다. 다시 말해서 LAN과 LAN을 연결하는 것입니다. 이렇게 서로 다른 LAN이 맞물려 연결된 것을 광역 통신망 혹은 WAN이라고 합니다. WAN에서는 데이터를 목적지까지 한 번에 전달하지 않고, 여러 네트워크 장비를 거치며 단계적으로 전달합니다.
LAN 안에 있는 단말기들의 주소는 각 LAN 안에서는 고유합니다. 하지만 서로 다른 LAN 안에 있는 각 단말기들의 주소를 모두 고유하게 만들기란 어렵습니다. 그래서 서로 다른 LAN이 모두 연결된 WAN에서는 또 다른 규격이 필요합니다 이를 설명하는 것이 OSI 모델 계층 3입니다.
WAN은 직접 데이터를 건네는 것이 아닌, 계층적으로 데이터를 건너주는 방식으로 작동합니다. 어떤 데이터가 단말기에서 스위치로 갔는데 그 데이터를 스위치가 직접 건네줄 수 없는 곳에 있으면 이를 취급할 수 있는 곳으로 데이터를 보내야 합니다. 이러한 일을 담당하는 네트워크 기기를 라우터(router) 라고 합니다.
라우터는 통신망 공급 업체에 있는 대형 장비인 경우도 많지만, 여러분 가정에서 사용하는 인터넷 공유기이기도 일종의 라우터입니다.
간단히 말해서 라우터는 서로 다른 LAN 사이에 컴퓨터 통신을 할 수 있게 하는 네트워크 기기입니다. OSI 모델의 계층 3에서 흔히 접하는 것은 인터넷 프로로톨(internet protocol : IP) 이라고 하는 것입니다.
프로토콜(protocol)은 "서로 다른 주체가 어떻게 정보를 주고 받을지 미리 정해둔 약속입니다." 일상에서 전화을 받을 때 "여보세요" 또한 사람 간 프로토콜이라 할 수 있습니다.
인터넷 프로토콜은 IPv4와 IPv6으로 구분되며 이후 설명은 추후 글에서 다루겠습니다.
단말기 A에서 데이터를 다른 단말기 B로 보내려고 하면, 데이터는 OSI 모델 계층 3의 IP에 의해 IP 패킷(paket) 형태로 포장됩니다. 단말기 B와 단말기 A와 같은 LAN이면, 데이터는 스위치를 거쳐 바로 단말기 A로 갑니다. 하지만 단말기B가 다른 LAN에 있을 때, 데이터는 LAN에 연결된 라우터를 통해 LAN 바깥으로 나가 다른 LAN에 들어갑니다. 이 과정을 반복하여 결국 데이터는 단말기 B로 전달됩니다.
패킷(pakcet)이란? 데이터를 전송하기 위해 잘라놓은 논리적 단위입니다. Network는 한 번에 큰 데이터를 보내지 못하기에 이를 잘라서 각각 보낸 뒤 다시 조립합니다.
OSI 모델 계층 3의 인터넷 프로토콜 즉, IP 규약을 지키면 기기 종류와 상관없이 서로 통신할 수 있습니다. 통신 회선의 형태가 랜선이든, 광섬유, 무선, 전화선 등 어떤 것이든 상관없습니다. 이렇게 서로 다른 종류의 많은 스위치와 라우터가 연결되어 지구를 뒤덮고 있습니다. 그리고 우리는 이것을 인터넷이라고 합니다.
이번 글에서는 C++ 게임 서버 개발을 위한 기초 단계로서, 컴퓨터 네트워크의 기본 구성 요소인 단말기와 네트워크 장비, 그리고 이를 체계적으로 설명하는 OSI 모델의 개념과 역할을 간단하게 살펴보았습니다.
특히 아래와 같은 개념을 중심으로 실제 네트워크가 어떻게 확장되고 연결되는지를 큰 흐름에서 이해하는 데 초점을 맞추었습니다.
게임 서버를 포함한 대부분의 네트워크 프로그램은 결국 OSI 모델의 상위 계층(5~7계층)에서 동작하지만, 그 기반에는 반드시 계층 2와 계층 3의 통신 규칙이 존재합니다.
이 기초 개념을 이해하고 있으면, 이후 소켓 프로그래밍이나 서버 구조를 학습할 때 “왜 이런 설계가 필요한지”를 훨씬 자연스럽게 받아들일 수 있습니다.
[Yes24]
https://www.yes24.com/product/goods/71768958
https://www.yes24.com/product/goods/11032903
https://www.yes24.com/product/goods/124806989