컴퓨터 네트워크란?
컴퓨터 네트워크란, 데스크톱, 노트북, 스마트폰 같은 장치들이 서로 연결되어 정보를 주고받을 수 있는 통신망을 컴퓨터 네트워크라고 합니다.
단순하게 '네트워크'라고 줄여서 부릅니다.
인터넷이란 '네트워크를 연결하는 네트워크'를 의미합니다.
이 인터넷 덕분에 한국에서 미국에 있는 기기와 통신할 수 있습니다.
즉, 인터넷이 네트워크보다 더 넓은 개념으로 볼 수 있습니다.
개발자가 네트워크를 알아야 하는 이유
그렇다면 개발자가 네트워크를 반드시 알아야 하는 이유는 무엇일까요?
소프트웨어를 개발할 때 네트워크 지식을 활용해야 하는 경우가 반드시 존재하며, 유지보수 할 때에도 필요하기 때문입니다.
예를 들어 다음과 같은 기능을 구현하거나 수정할 때 반드시 네트워크 지식이 기반되어야 합니다.
- Spring Integration의 TCP와 UDP 지원 기능 (공식문서)
- 로그인 기능 (세션/쿠키)
- 배포 (DNS, HTTP/HTTPS, 포트 번호 등)
- 암호와 인증서
- 404 Not Found 또는 502 Bad Gateway 같은 상태 코드 응답
네트워크 구조
네트워크는 거시적으로 봤을 때 그래프 형태를 띕니다.
그래프에서 노드는 기기를, 간선은 통신 매체(유/무선. 예: 랜선, Wifi, 블루투스 등)입니다.
즉, 통신 매체로 연결된 기기 간 정보를 주고 받는 구조를 네트워크라고 이해할 수 있겠습니다.
네트워크에서 가장자리에 위치한 노드(기기)를 호스트라고 부릅니다.
호스트는 데이터를 최초로 생성 및 송신하고, 최종적으로 수신합니다.
즉, 서버와 클라이언트의 역할을 수행합니다.
서버는 어떠한 서비스를 제공하는 호스트입니다.
종류로는 파일 서버, 웹 서버, 메일 서버 등이 있습니다.
클라이언트는 서버에게 어떠한 서비스를 요청하고, 그 서버의 응답을 수신하는 호스트입니다.
개인 컴퓨터, 노트북, 스마트폰, 서버 컴퓨터 등이 호스트입니다.
네트워크의 가장자리에는 호스트가 있다면, 중간 지점에는 무엇이 있을까요?
바로 이더넷, 허브, 스위치, 라우터, 공유기와 같은 중간 노드가 있습니다. 이러한 장비들을 네트워크 장비라고 부릅니다.
네트워크 장비는 호스트 간 주고받는 정보가 목표하는 발신지까지 안정적이고 안전하게 전송할 수 있도록 합니다.
범위에 따른 네트워크 분류
그러면 네트워크의 범위는 어떻게 나뉠까요? 어디서부터 어디까지가 하나의 네트워크 단위가 될까요?
호스트 간 데이터를 주고 받는 범위는 일반 가정이 될 수도, 기업이 될 수도, 한 도시나 국가가 될 수 있습니다.
이렇게 다양한 만큼, 네트워크의 범위에 따라 분류하는 기준이 존재합니다.
바로 LAN과 WAN 입니다.
LAN(Local Area Network)은 가까운 지역을 연결한 근거리 통신망을 의미합니다.
예를 들어 가정, 기업, 학교처럼 제한된 공간의 네트워크가 LAN 입니다.
WAN(Wide Area Network)은 먼 지역을 연결한 광역 통신망을 의미합니다.
멀리 떨어진 LAN을 연결하는 네트워크가 WAN 입니다.
네트워크와 네트워크를 연결하는 인터넷이 WAN에 속합니다.
LAN 안에서 호스트 간 통신을 할 때는 WAN이 불필요합니다. 하지만 다른 LAN에 속한 호스트와 통신하려면 WAN을 반드시 거쳐야 합니다.
WAN은 통신 3사와 같은 인터넷 서비스 업체(ISP, Internet Service Provide)가 구축하고 관리합니다.
LAN은 어떤 방식으로 구축될까요?
LAN을 구축하는 방식에는 물리적인 LAN 구축과 클라우드에서의 LAN 구축이 있습니다.
물리적인 LAN 구축은 케이블을 연결하고 스위치를 배치하는 과정이라면, 클라우드에서의 LAN 구축은 소프트웨어 정의 네트워크(SDN) 기술을 이용해 가상의 네트워크 공간(VPC)을 논리적으로 분할하고 설정하는 과정입니다.
CAN과 MAN
LAN과 WAN 말고도 CAN과 MAN이라는 두 기준이 있습니다.
CAN은 Campus Area Network의 약자로, 학교 또는 회사의 여러 건물 단위로 연결되는 규모의 네트워크입니다.
MAN은 Metropolitan Area Network의 약자로, 도시 단위로 연결되는 규모의 네트워크를 의미합니다.범위 규모를 큰 순서대로 나열해보면 WAN > MAN > CAN > LAN 순서가 되겠습니다.
메시지 교환 방식에 따른 네트워크 분류
네트워크 범위에 따른 분류 말고, 메시지 교환 방식에 따른 네트워크 분류도 존재합니다.
크게 회선 교환 네트워크과 패킷 교환 네트워크로 나눌 수 있습니다.
회선 교환 방식
회선 교환 방식은 과거에 널리 쓰인 방식이며, 대표적인 사용 예시는 전통적인 전화망이 있습니다.
두 호스트가 통신할 때, 그 사이에 있는 통신 경로를 통째로 점유하는 방식입니다.
두 호스트 사이에 연결로를 확보한 후에 데이터를 주고 받는다는 특성 덕분에 안정적입니다. 그리고 다른 네트워크 통신에 의해 방해받을 일도 없습니다.
때문에 고품질 음성 통화, 실시간 비디오 스트리밍처럼 끊김이 없어야 하는 서비스에 최적입니다.
하지만 연결은 해놨는데 정작 데이터 통신이 없으면 회선을 낭비하는 꼴이 됩니다.
회선 교환 방식에서는 두 호스트 간의 메시지 전달을 위해 회선 스위치 라는 네트워크 장비(중간 노드)가 존재합니다.
회선 스위치는 호스트 간의 회선을 적절히 설정하는 역할을 수행합니다.
패킷 교환 방식
패킷 교환 방식은 오늘날 대부분의 인터넷에서 사용하는 방식입니다.
회선 교환 방식과 가장 큰 차이점은 회선 경로를 점유하지 않는다는 것입니다. 그리고 전달하려는 메시지를 패킷이라는 단위로 잘게 쪼개어 전달합니다.
이렇게 쪼개어진 패킷은 목적지 호스트에서 재조립하는 과정을 거칩니다.
패킷은 전달하고자 하는 메시지가 있고, 이 메시지를 감싸는 데이터가 있는 구조입니다. 이 데이터는 메시지를 전달하는 송신자 주소와 수신자의 주소 등의 부가 정보입니다.
여기서 전달하려는 메시지를 페이로드, 부가 정보를 헤더라고 부릅니다. 때로는 패킷 뒤에 트레일러라는 정보가 포함되기도 합니다.
트레일러(Trailer)란?
패킷의 끝에 위치하여 여러 패킷의 경계를 뚜렷하게 알리는 역할을 하며 오류 검출 역할을 하기도 합니다.
체크섬(Checksum) 또는 CRC(Cyclic Redundancy Check)와 같은 오류 검출 코드가 트레일러에 포함되어 있으면 전송 중에 데이터 손실과 같은 오류가 발생했는지 판단할 수 있습니다.
패킷 교환 방식은 어떠한 회선도 점유되지 않기에 거시적인 네트워크 관점에서 봤을 때 효율적입니다.
패킷 교환 방식에도 두 호스트 간의 원활한 메시지 전달을 위해 패킷 스위치가 존재하는데요.
대표적인 예로는 라우터와 스위치가 있습니다.
주소와 송수신지 유형에 따른 전송 방식
패킷의 헤더에 담기는 대표적인 정보로는 주소가 있습니다.
주소는 호스트를 특정하는 정보로, IP 주소와 MAC 주소가 있습니다.
이 주소를 이용하면, 다양한 방식으로 메시지를 전달할 수 있습니다.
수신지를 네트워크 내에 속한 다른 모든 호스트에게 전달할 수도 있고, 자신과 동일한 그룹에 속한 호스트로 지정할 수도 있고, 특정 호스트 하나로 지정할 수도 있습니다.
이렇게 송수신지 유형에 따라서 전송 방식을 유니캐스트와 브로드캐스트로 나눌 수 있습니다.
유니캐스트는 가장 일반적인 송수신 방식으로, 하나의 호스트에 메시지를 전송하는 방식입니다.
브로드캐스트는 자신을 제외한 네트워크 상의 다른 모든 호스트에게 메시지를 전송하는 방식입니다.
브로드캐스트가 전송되는 범위를 브로드캐스트 도메인이라고 합니다.
즉, '브로드캐스트의 수신지 == 브로드캐스트 도메인 == 자신을 제외한 네트워크 상 모든 호스트' 입니다.
이 외에도 네트워크 내 동일 그룹에 속한 호스트에게만 전송하는 멀티캐스트, 네트워크 내 동일 그룹에 속한 호스트 중 가장 가까운 호스트에게 전송하는 애니캐스트 등 다양한 방식이 존재합니다.