본 콘텐츠의 이미지 및 내용은 AI로 생성되었습니다.
본 콘텐츠의 이미지 및 내용을 무단으로 복제, 배포, 수정하여 사용할 경우 저작권법에 의해 법적 제재를 받을 수 있습니다.
이미지 로딩 중...
AI Generated
2025. 12. 5. · 15 Views
네트워크 기본 구조와 분류 완벽 가이드
네트워크의 기본 구성요소부터 LAN과 WAN의 차이까지, 초급 개발자가 반드시 알아야 할 네트워크 기초 지식을 실무 사례와 함께 쉽게 설명합니다. 마치 우체국 시스템을 이해하듯 네트워크의 세계로 안내합니다.
목차
1. 네트워크의 기본 구성요소 이해
입사 첫 주, 김개발 씨는 회사 네트워크에 접속하려다 문득 궁금해졌습니다. "이 케이블 하나로 어떻게 전 세계와 연결되는 거지?" 옆자리 박시니어 씨가 미소를 지으며 말했습니다.
"네트워크를 제대로 이해하려면 먼저 기본 구성요소부터 알아야 해요."
네트워크는 크게 네 가지 핵심 요소로 구성됩니다. 호스트, 네트워크 장비, 통신 매체, 그리고 메시지입니다.
마치 우체국 시스템에서 발신자, 배달부, 도로, 편지가 각자의 역할을 하듯이, 네트워크도 이 네 요소가 조화롭게 작동하여 데이터를 주고받습니다.
다음 코드를 살펴봅시다.
# 네트워크 구성요소를 클래스로 표현한 예제
class NetworkComponent:
def __init__(self):
# 네트워크의 4대 구성요소 정의
self.components = {
"host": "데이터를 주고받는 주체 (컴퓨터, 스마트폰)",
"network_device": "데이터 전달을 돕는 장비 (라우터, 스위치)",
"transmission_media": "데이터가 이동하는 통로 (케이블, 무선)",
"message": "실제 전송되는 데이터 (패킷)"
}
def describe(self, component):
# 각 구성요소의 역할 반환
return self.components.get(component, "알 수 없는 구성요소")
# 네트워크 구성요소 확인
network = NetworkComponent()
print(network.describe("host"))
김개발 씨는 입사 첫 주를 맞이한 신입 개발자입니다. 회사에서 지급받은 노트북을 켜고 네트워크에 연결하려는 순간, 문득 이런 생각이 들었습니다.
"이 조그만 케이블 하나로 어떻게 지구 반대편에 있는 서버와 통신할 수 있는 거지?" 옆자리에 앉은 박시니어 씨가 김개발 씨의 혼잣말을 들었습니다. "네트워크가 궁금해요?
사실 그 원리는 우체국 시스템과 비슷해요." 박시니어 씨의 설명이 이어졌습니다. 우체국 시스템을 떠올려보세요.
편지를 보내려면 무엇이 필요할까요? 우선 편지를 보내는 발신자와 받는 수신자가 있어야 합니다.
그리고 편지를 배달해주는 집배원이 필요하고, 집배원이 이동할 도로도 있어야 합니다. 마지막으로 전달할 편지 자체가 있어야겠죠.
네트워크도 마찬가지입니다. 호스트는 발신자와 수신자 역할을 합니다.
여러분의 컴퓨터, 스마트폰, 서버가 모두 호스트입니다. 네트워크 장비는 집배원처럼 데이터를 목적지까지 전달하는 역할을 합니다.
라우터, 스위치 같은 장비가 여기에 해당합니다. 통신 매체는 도로와 같습니다.
데이터가 이동하는 물리적인 통로죠. 우리가 흔히 보는 랜선이나 광케이블, 또는 눈에 보이지 않는 무선 전파가 통신 매체입니다.
마지막으로 메시지는 편지 그 자체입니다. 우리가 주고받는 데이터, 즉 웹페이지 정보나 이메일 내용이 메시지에 해당합니다.
이 네 가지 요소 중 하나라도 빠지면 어떻게 될까요? 발신자 없이는 편지를 보낼 수 없고, 집배원 없이는 편지가 전달되지 않습니다.
도로가 없으면 집배원이 움직일 수 없고, 편지가 없으면 보낼 것 자체가 없습니다. 실제 네트워크에서도 마찬가지입니다.
컴퓨터가 없으면 데이터를 생성할 수 없고, 라우터가 없으면 데이터가 목적지를 찾아갈 수 없습니다. 케이블이 끊어지면 데이터가 이동할 수 없고, 패킷이 없으면 전송할 정보 자체가 없습니다.
위의 코드 예제를 살펴보겠습니다. NetworkComponent 클래스는 네트워크의 네 가지 구성요소를 딕셔너리로 정의하고 있습니다.
describe 메서드를 통해 각 구성요소의 역할을 확인할 수 있습니다. 이처럼 네트워크 구성요소를 명확히 이해하면 네트워크 문제가 발생했을 때 어느 부분에서 문제가 생겼는지 빠르게 파악할 수 있습니다.
김개발 씨가 고개를 끄덕였습니다. "아, 그래서 네트워크 연결이 안 될 때 케이블도 확인하고, 라우터도 확인하고, 컴퓨터 설정도 확인하는 거군요?" 박시니어 씨가 미소를 지었습니다.
"정확해요. 각 구성요소가 제 역할을 하는지 하나씩 점검하는 거예요." 네트워크의 기본 구성요소를 이해하면 복잡해 보이는 네트워크 세계가 훨씬 명확해집니다.
앞으로 배울 모든 네트워크 개념은 이 네 가지 요소를 중심으로 전개됩니다.
실전 팁
💡 - 네트워크 문제 발생 시 네 가지 구성요소를 순서대로 점검하세요
- 호스트 문제인지, 장비 문제인지, 매체 문제인지 구분하면 해결이 빨라집니다
2. 호스트란 무엇인가
김개발 씨가 서버 모니터링 화면을 보다가 질문했습니다. "선배님, 여기 host라는 단어가 계속 나오는데, 정확히 뭘 말하는 건가요?" 박시니어 씨가 답했습니다.
"호스트는 네트워크에서 가장 중요한 주체예요. 쉽게 말해 데이터를 주고받는 모든 장치를 말해요."
**호스트(Host)**는 네트워크에 연결되어 데이터를 주고받을 수 있는 모든 장치를 의미합니다. 마치 전화 통화에서 발신자와 수신자가 있듯이, 네트워크에서는 호스트가 통신의 양 끝단을 담당합니다.
호스트는 다시 클라이언트와 서버로 구분되며, 요청을 보내느냐 응답을 보내느냐에 따라 역할이 나뉩니다.
다음 코드를 살펴봅시다.
# 호스트의 역할을 표현한 예제
class Host:
def __init__(self, name, ip_address, role):
self.name = name
self.ip_address = ip_address # 호스트의 고유 주소
self.role = role # client 또는 server
def send_request(self, message, target_host):
# 클라이언트가 서버에 요청 전송
print(f"[{self.name}] -> [{target_host.name}]: {message}")
return target_host.receive_request(message)
def receive_request(self, message):
# 서버가 요청을 받고 응답 반환
print(f"[{self.name}] 요청 수신: {message}")
return f"응답: {message} 처리 완료"
# 클라이언트와 서버 호스트 생성
client = Host("내 컴퓨터", "192.168.1.10", "client")
server = Host("웹 서버", "203.0.113.50", "server")
response = client.send_request("웹페이지 요청", server)
김개발 씨가 회사 시스템을 모니터링하다 보니 "host"라는 단어가 여기저기서 눈에 띄었습니다. 호스트 상태 체크, 호스트 연결 실패, 호스트 IP 주소...
도대체 호스트가 뭐길래 이렇게 자주 등장하는 걸까요? 박시니어 씨가 설명을 시작했습니다.
"호스트라는 단어를 들으면 뭐가 떠올라요?" 김개발 씨가 잠시 생각했습니다. "음...
TV 프로그램 진행자? 아니면 파티 주최자?" 박시니어 씨가 고개를 끄덕였습니다.
"맞아요. 영어로 host는 손님을 맞이하는 주인이라는 뜻이에요." 네트워크에서 호스트도 비슷한 의미입니다.
네트워크라는 파티에 참여해서 다른 참가자들과 대화를 나누는 모든 장치가 호스트입니다. 여러분의 컴퓨터, 스마트폰, 태블릿, 심지어 요즘은 냉장고와 세탁기도 호스트가 될 수 있습니다.
중요한 점은 호스트가 두 가지 역할로 나뉜다는 것입니다. 클라이언트와 서버입니다.
이 개념은 식당에 비유하면 이해하기 쉽습니다. 손님이 음식을 주문하면 주방에서 요리를 해서 내놓죠?
여기서 손님이 클라이언트이고, 주방이 서버입니다. 클라이언트는 서비스를 요청하는 호스트입니다.
웹 브라우저를 열고 네이버에 접속하면, 여러분의 컴퓨터가 클라이언트 역할을 합니다. "네이버 첫 페이지를 보여줘"라고 요청하는 거죠.
서버는 이 요청을 받아서 처리하고 결과를 돌려주는 호스트입니다. 네이버의 서버가 첫 페이지 데이터를 여러분에게 보내주는 것입니다.
하지만 한 장치가 항상 클라이언트이거나 항상 서버인 것은 아닙니다. 상황에 따라 역할이 바뀔 수 있습니다.
예를 들어, 여러분의 컴퓨터에서 파일 공유를 설정하면 다른 컴퓨터의 요청을 받아 파일을 제공하는 서버 역할을 할 수도 있습니다. 위의 코드를 살펴보겠습니다.
Host 클래스는 이름, IP 주소, 역할 세 가지 속성을 가지고 있습니다. IP 주소는 네트워크에서 호스트를 식별하는 고유한 주소입니다.
마치 집 주소처럼 각 호스트를 찾아갈 수 있게 해줍니다. send_request 메서드는 클라이언트가 서버에 요청을 보내는 동작을 표현합니다.
receive_request 메서드는 서버가 요청을 받아 처리하는 동작입니다. 실제 네트워크 통신도 이와 같은 요청-응답 패턴으로 이루어집니다.
김개발 씨가 이해가 된다는 표정을 지었습니다. "그러니까 제 컴퓨터도 호스트고, 회사 서버도 호스트고, 제 스마트폰도 호스트인 거네요?" 박시니어 씨가 답했습니다.
"맞아요. 네트워크에 연결되어 통신할 수 있으면 다 호스트예요." 호스트 개념을 제대로 이해하면 네트워크 문제를 진단할 때 큰 도움이 됩니다.
"호스트에 연결할 수 없습니다"라는 오류 메시지가 나오면, 상대방 장치에 문제가 있거나 네트워크 경로에 문제가 있다는 것을 알 수 있습니다.
실전 팁
💡 - 호스트 = 네트워크에 연결된 모든 장치라고 기억하세요
- 클라이언트와 서버는 고정된 역할이 아니라 상황에 따라 바뀔 수 있습니다
3. 네트워크 장비의 종류와 역할
김개발 씨가 서버실에 들어갔다가 깜짝 놀랐습니다. 깜빡이는 불빛을 뿜어내는 수많은 장비들이 랙에 빼곡히 들어차 있었습니다.
"저게 다 뭐예요?" 박시니어 씨가 하나씩 가리키며 설명을 시작했습니다. "네트워크 장비들이에요.
각자 맡은 역할이 다르답니다."
네트워크 장비는 호스트 간의 데이터 전송을 돕는 중간 장치들입니다. 대표적으로 라우터, 스위치, 허브가 있습니다.
마치 물류 시스템에서 물류센터, 배송 허브, 분류 시설이 각자의 역할을 하듯이, 네트워크 장비들도 데이터가 목적지에 정확히 도달하도록 안내하고 전달하는 역할을 합니다.
다음 코드를 살펴봅시다.
# 네트워크 장비의 역할을 시뮬레이션
class NetworkDevice:
def __init__(self, device_type, name):
self.device_type = device_type
self.name = name
def process_data(self, data, destination):
if self.device_type == "router":
# 라우터: 다른 네트워크로 데이터 전달 (길 안내)
return f"[라우터 {self.name}] {destination} 경로 탐색 후 전송"
elif self.device_type == "switch":
# 스위치: 같은 네트워크 내 정확한 장치로 전달
return f"[스위치 {self.name}] MAC 주소 기반 {destination}로 전송"
elif self.device_type == "hub":
# 허브: 연결된 모든 장치에 전송 (비효율적)
return f"[허브 {self.name}] 모든 포트로 브로드캐스트"
# 네트워크 장비 생성 및 동작 확인
router = NetworkDevice("router", "메인라우터")
switch = NetworkDevice("switch", "1층스위치")
print(router.process_data("웹 요청", "203.0.113.1"))
print(switch.process_data("파일 전송", "PC-07"))
김개발 씨가 서버실 문을 열었을 때, 마치 SF 영화 세트장에 들어온 것 같았습니다. 수십 개의 장비에서 초록색, 주황색 불빛이 쉴 새 없이 깜빡이고, 어딘가에서는 팬이 윙윙거리는 소리가 들렸습니다.
박시니어 씨가 하나씩 설명을 시작했습니다. "저 장비들은 크게 세 종류로 나눌 수 있어요.
라우터, 스위치, 허브. 각각 하는 일이 다르답니다." 먼저 라우터를 이해하려면 내비게이션을 떠올려보세요.
서울에서 부산까지 가려면 어떤 경로로 가야 하는지 알려주죠? 라우터도 마찬가지입니다.
데이터가 목적지까지 가려면 어떤 경로로 가야 하는지 결정합니다. 특히 라우터는 서로 다른 네트워크를 연결하는 역할을 합니다.
가정집에서 인터넷을 사용할 때 공유기를 사용하죠? 그 공유기가 바로 라우터입니다.
집 안의 네트워크와 인터넷 서비스 제공업체(ISP)의 네트워크를 연결해주는 것입니다. 라우터가 없으면 집에서 구글 서버에 접속할 수 없습니다.
왜냐하면 집 네트워크와 구글 네트워크는 완전히 다른 네트워크이기 때문입니다. 다음으로 스위치입니다.
스위치는 같은 네트워크 안에서 데이터를 정확한 목적지로 전달합니다. 회사 사무실을 생각해보세요.
10대의 컴퓨터가 스위치에 연결되어 있습니다. A 컴퓨터가 B 컴퓨터에 파일을 보내려고 할 때, 스위치는 데이터를 B 컴퓨터에만 정확히 전달합니다.
스위치가 어떻게 목적지를 알 수 있을까요? 바로 MAC 주소를 사용합니다.
MAC 주소는 네트워크 장치마다 부여된 고유한 물리적 주소입니다. 마치 주민등록번호처럼 세상에 하나뿐인 식별자입니다.
스위치는 연결된 장치들의 MAC 주소를 학습하고 기억해서, 데이터가 오면 정확한 포트로 전달합니다. 마지막으로 허브입니다.
허브는 스위치보다 단순하고 오래된 장비입니다. 스위치와 달리 허브는 데이터가 들어오면 연결된 모든 장치에 무조건 전송합니다.
마치 확성기로 모든 사람에게 소리를 지르는 것과 같습니다. 목적지가 아닌 장치들도 데이터를 받기 때문에 비효율적이고, 요즘은 거의 사용하지 않습니다.
위 코드에서 NetworkDevice 클래스는 세 가지 장비 유형에 따라 다르게 동작합니다. 라우터는 경로를 탐색하고, 스위치는 MAC 주소를 기반으로 정확한 목적지에 전송하며, 허브는 모든 포트로 브로드캐스트합니다.
김개발 씨가 질문했습니다. "그러면 회사에서 인터넷을 사용할 때 데이터가 어떻게 흘러가나요?" 박시니어 씨가 답했습니다.
"좋은 질문이에요. 예를 들어 구글에 접속한다고 해봐요.
먼저 요청이 스위치를 통해 라우터로 갑니다. 라우터는 인터넷으로 데이터를 내보내고, 여러 라우터를 거쳐 구글 서버에 도달해요.
응답도 같은 경로를 역순으로 돌아오죠." 네트워크 장비의 역할을 이해하면 네트워크 문제가 발생했을 때 어디를 확인해야 하는지 알 수 있습니다. 같은 사무실 컴퓨터끼리 통신이 안 되면 스위치를, 인터넷 연결이 안 되면 라우터를 확인하면 됩니다.
실전 팁
💡 - 라우터 = 서로 다른 네트워크 연결, 스위치 = 같은 네트워크 내 연결로 기억하세요
- 가정용 공유기는 라우터 + 스위치 + 무선 AP가 합쳐진 복합 장비입니다
4. 통신 매체와 메시지 개념
김개발 씨가 책상 아래 엉킨 케이블들을 정리하다가 궁금해졌습니다. "이 케이블들이 다 똑같아 보이는데, 혹시 다른 건가요?" 박시니어 씨가 케이블 하나를 집어 들며 말했습니다.
"겉보기엔 비슷해도 종류에 따라 속도와 용도가 달라요. 데이터가 이동하는 도로라고 생각하면 돼요."
통신 매체는 데이터가 이동하는 물리적 또는 논리적 경로입니다. 유선 매체로는 UTP 케이블, 광케이블이 있고, 무선 매체로는 Wi-Fi, Bluetooth가 있습니다.
메시지는 이 통신 매체를 통해 전송되는 실제 데이터로, 네트워크에서는 패킷이라는 단위로 쪼개져 전송됩니다.
다음 코드를 살펴봅시다.
# 통신 매체와 메시지 전송 시뮬레이션
class TransmissionMedia:
MEDIA_SPECS = {
"utp_cat6": {"speed": "1Gbps", "distance": "100m", "type": "유선"},
"fiber_optic": {"speed": "100Gbps", "distance": "수십km", "type": "유선"},
"wifi_6": {"speed": "9.6Gbps", "distance": "50m", "type": "무선"}
}
def __init__(self, media_type):
self.media_type = media_type
self.specs = self.MEDIA_SPECS.get(media_type, {})
class Message:
def __init__(self, data, source, destination):
self.data = data
self.source = source
self.destination = destination
# 큰 데이터는 패킷으로 분할
self.packets = self._create_packets(data)
def _create_packets(self, data, packet_size=100):
# 데이터를 패킷 단위로 분할
return [data[i:i+packet_size] for i in range(0, len(data), packet_size)]
# 메시지 생성 및 패킷 분할 확인
msg = Message("Hello Network World!", "192.168.1.1", "10.0.0.1")
print(f"원본 데이터: {msg.data}")
print(f"패킷 수: {len(msg.packets)}")
김개발 씨가 책상 아래를 보니 케이블이 스파게티처럼 엉켜 있었습니다. 랜선, USB 케이블, 전원 케이블...
비슷해 보이지만 분명 다른 케이블들입니다. "이 케이블들 사이로 데이터가 어떻게 이동하는 걸까?" 김개발 씨의 호기심이 발동했습니다.
박시니어 씨가 케이블 하나를 집어 들었습니다. "이건 UTP 케이블, 흔히 랜선이라고 부르는 거예요.
구리선으로 전기 신호를 보내죠." 데이터는 결국 전기 신호나 빛 신호로 변환되어 케이블을 통해 이동합니다. 마치 수도관을 통해 물이 흐르듯이, 케이블을 통해 데이터가 흐르는 것입니다.
통신 매체는 크게 유선과 무선으로 나뉩니다. 유선 매체의 대표주자는 UTP 케이블과 광케이블입니다.
UTP 케이블은 우리가 흔히 보는 랜선으로, 구리선을 통해 전기 신호를 전달합니다. 가정과 사무실에서 가장 많이 사용하는 케이블입니다.
광케이블은 유리나 플라스틱 섬유를 통해 빛 신호를 전달합니다. 빛은 전기보다 훨씬 빠르고 멀리 갈 수 있습니다.
그래서 대륙 간 해저 케이블이나 데이터센터 간 연결에는 광케이블을 사용합니다. 다만 가격이 비싸고 설치가 까다롭다는 단점이 있습니다.
무선 매체는 케이블 없이 전파를 통해 데이터를 전송합니다. Wi-Fi는 가장 흔한 무선 통신 방식으로, 공유기에서 발신하는 전파를 통해 노트북이나 스마트폰이 인터넷에 연결됩니다.
Bluetooth는 짧은 거리에서 기기 간 연결에 사용됩니다. 무선 이어폰이 스마트폰과 연결되는 것이 대표적인 예입니다.
이제 메시지 개념을 살펴보겠습니다. 메시지는 통신 매체를 통해 전송되는 실제 데이터입니다.
그런데 큰 데이터를 한 번에 보내면 문제가 생깁니다. 만약 전송 중에 오류가 발생하면 처음부터 다시 보내야 합니다.
마치 100페이지짜리 팩스를 보내다가 마지막 장에서 오류가 나면 처음부터 다시 보내야 하는 것처럼요. 그래서 네트워크에서는 메시지를 작은 조각으로 쪼개서 보냅니다.
이 조각을 **패킷(Packet)**이라고 합니다. 각 패킷에는 순서 번호와 목적지 정보가 포함되어 있어서, 수신 측에서 원래 순서대로 조립할 수 있습니다.
중간에 한 패킷이 손실되더라도 그 패킷만 다시 요청하면 됩니다. 위의 코드에서 Message 클래스는 데이터를 받아 패킷으로 분할하는 과정을 보여줍니다.
_create_packets 메서드는 데이터를 지정된 크기(여기서는 100바이트)로 잘라 패킷 리스트를 만듭니다. 실제 네트워크에서는 이보다 훨씬 복잡한 과정을 거치지만, 기본 원리는 동일합니다.
김개발 씨가 고개를 끄덕였습니다. "그래서 영화를 스트리밍할 때 가끔 버퍼링이 걸리는 거군요.
패킷이 제때 도착하지 않아서?" 박시니어 씨가 맞장구쳤습니다. "정확해요.
패킷이 늦게 도착하거나 손실되면 영상이 끊기는 거예요." 통신 매체와 메시지 개념을 이해하면 네트워크 성능 문제를 진단하는 데 도움이 됩니다. 케이블 품질, 무선 신호 강도, 패킷 손실률 등을 확인하면 원인을 찾을 수 있습니다.
실전 팁
💡 - 안정성이 중요하면 유선(UTP/광케이블), 이동성이 중요하면 무선을 선택하세요
- 네트워크 속도 문제가 있다면 케이블 품질과 무선 신호 강도를 먼저 확인하세요
5. LAN 이해
김개발 씨가 회사 네트워크 구성도를 보다가 LAN이라는 단어를 발견했습니다. "LAN이 뭔가요?
랜선의 랜인가요?" 박시니어 씨가 웃으며 답했습니다. "비슷하게 들리지만 조금 다른 개념이에요.
LAN은 Local Area Network의 약자로, 좁은 지역의 네트워크를 말해요."
**LAN(Local Area Network)**은 가정, 사무실, 학교처럼 제한된 지역 내에서 구축된 네트워크입니다. 마치 동네 안에서 이웃끼리 왕래하는 것처럼, LAN은 가까운 거리에 있는 장치들이 빠르게 통신하도록 해줍니다.
LAN의 가장 큰 특징은 고속 통신과 낮은 지연 시간입니다.
다음 코드를 살펴봅시다.
# LAN 네트워크 시뮬레이션
class LAN:
def __init__(self, name, location):
self.name = name
self.location = location
self.devices = [] # 연결된 장치들
self.switch = None
def add_device(self, device_name, ip_address):
# LAN에 새 장치 연결
device = {"name": device_name, "ip": ip_address}
self.devices.append(device)
print(f"[{self.name}] {device_name}({ip_address}) 연결됨")
def internal_communication(self, from_device, to_device, data):
# LAN 내부 통신 - 빠르고 직접적
print(f"[LAN 내부 통신] {from_device} -> {to_device}")
print(f" 지연시간: 1ms 이하, 속도: 1Gbps")
return f"데이터 '{data}' 전송 완료"
# 회사 LAN 구성
office_lan = LAN("개발팀 LAN", "3층 개발실")
office_lan.add_device("김개발-PC", "192.168.1.10")
office_lan.add_device("박시니어-PC", "192.168.1.11")
office_lan.add_device("파일서버", "192.168.1.100")
office_lan.internal_communication("김개발-PC", "파일서버", "report.xlsx")
김개발 씨가 회사 IT 팀에서 받은 네트워크 구성도를 펼쳐봤습니다. 거기에는 "3층 개발팀 LAN", "4층 영업팀 LAN" 같은 용어가 적혀 있었습니다.
"LAN이 뭐지? 랜선이랑 관련 있는 건가?" 박시니어 씨가 설명을 시작했습니다.
"LAN은 Local Area Network의 약자예요. 직역하면 지역 네트워크, 쉽게 말해 좁은 범위의 네트워크라는 뜻이에요." LAN을 이해하려면 동네를 떠올려보세요.
같은 동네에 사는 이웃끼리는 왕래하기 쉽습니다. 걸어서 몇 분이면 만날 수 있고, 물건을 빌려주거나 소식을 전하기도 간편합니다.
LAN도 마찬가지입니다. 같은 건물, 같은 사무실, 같은 집 안에 있는 장치들이 쉽고 빠르게 통신할 수 있습니다.
LAN의 대표적인 예시가 바로 가정 네트워크입니다. 공유기에 연결된 노트북, 스마트폰, 스마트 TV, 프린터가 모두 하나의 LAN을 구성합니다.
이 장치들은 인터넷을 거치지 않고도 서로 직접 통신할 수 있습니다. 스마트폰으로 찍은 사진을 노트북으로 전송하거나, 노트북에서 무선 프린터로 문서를 인쇄할 때 LAN 내부 통신이 일어납니다.
회사에서는 더 복잡한 LAN이 구축됩니다. 개발팀 사무실에 있는 수십 대의 컴퓨터가 스위치에 연결되어 하나의 LAN을 형성합니다.
개발자들이 파일 서버에서 소스 코드를 가져오거나, 내부 위키에 접속할 때 모두 LAN 내부 통신입니다. LAN의 가장 큰 장점은 속도입니다.
물리적 거리가 가깝기 때문에 데이터가 이동하는 데 시간이 거의 걸리지 않습니다. 일반적인 사무실 LAN은 1Gbps 이상의 속도를 제공하며, 지연 시간(레이턴시)은 1밀리초 이하입니다.
인터넷을 통해 미국 서버에 접속하면 100밀리초 이상 걸리는 것과 비교하면 엄청난 차이입니다. 또 다른 장점은 보안입니다.
LAN은 외부 인터넷과 분리되어 있기 때문에, LAN 내부의 자원은 외부에서 직접 접근하기 어렵습니다. 회사의 중요한 파일 서버를 LAN에 두면, 외부 해커가 쉽게 접근할 수 없습니다.
위 코드에서 LAN 클래스는 네트워크 이름, 위치, 연결된 장치 목록을 관리합니다. add_device 메서드로 새 장치를 연결하고, internal_communication 메서드로 LAN 내부 통신을 시뮬레이션합니다.
실제로 LAN 내부 통신은 매우 빠르고 안정적입니다. 김개발 씨가 물었습니다.
"그러면 제가 회사에서 인터넷에 접속할 때도 LAN을 거치는 건가요?" 박시니어 씨가 답했습니다. "맞아요.
먼저 LAN을 통해 회사 라우터까지 가고, 라우터가 인터넷으로 연결해주는 거예요. LAN은 인터넷으로 나가는 관문 역할도 해요." LAN 개념을 이해하면 네트워크 설계와 문제 해결에 큰 도움이 됩니다.
같은 LAN에 있는 장치끼리 통신이 안 되면 스위치나 케이블 문제일 가능성이 높고, 인터넷만 안 되면 라우터나 외부 연결 문제일 가능성이 높습니다.
실전 팁
💡 - 가정 공유기에 연결된 모든 장치는 하나의 LAN을 구성합니다
- LAN 내부 통신은 인터넷보다 훨씬 빠르므로, 파일 서버는 LAN에 두는 것이 좋습니다
6. WAN 이해
김개발 씨가 해외 출장 중인 동료와 화상 회의를 하다가 문득 궁금해졌습니다. "한국에서 미국까지 어떻게 데이터가 전달되는 거지?" 박시니어 씨가 말했습니다.
"그게 바로 WAN의 영역이에요. Wide Area Network, 넓은 지역을 연결하는 네트워크죠."
**WAN(Wide Area Network)**은 도시, 국가, 대륙을 넘어 먼 거리에 있는 네트워크들을 연결합니다. 인터넷이 가장 대표적인 WAN입니다.
LAN이 동네라면, WAN은 전국 또는 전 세계를 연결하는 고속도로 네트워크와 같습니다. WAN은 LAN보다 속도가 느리고 비용이 높지만, 먼 거리 통신을 가능하게 합니다.
다음 코드를 살펴봅시다.
# WAN 네트워크 시뮬레이션
class WAN:
def __init__(self, name):
self.name = name
self.connected_lans = {} # 연결된 LAN들
def connect_lan(self, lan_name, location, distance_km):
# WAN에 LAN 연결
self.connected_lans[lan_name] = {
"location": location,
"distance": distance_km
}
print(f"[{self.name}] {lan_name}({location}) 연결됨")
def long_distance_communication(self, from_lan, to_lan, data):
# WAN을 통한 원거리 통신
from_info = self.connected_lans.get(from_lan, {})
to_info = self.connected_lans.get(to_lan, {})
distance = abs(from_info.get("distance", 0) - to_info.get("distance", 0))
# 거리에 따른 지연시간 계산 (빛의 속도 기준 대략적 추정)
latency = max(1, distance // 100)
print(f"[WAN 통신] {from_lan} -> {to_lan}")
print(f" 거리: {distance}km, 예상 지연시간: {latency}ms")
# 글로벌 WAN 구성
global_wan = WAN("회사 글로벌 네트워크")
global_wan.connect_lan("서울 본사", "한국", 0)
global_wan.connect_lan("도쿄 지사", "일본", 1150)
global_wan.connect_lan("뉴욕 지사", "미국", 11000)
global_wan.long_distance_communication("서울 본사", "뉴욕 지사", "분기 보고서")
김개발 씨가 화상 회의 화면을 바라보며 생각에 잠겼습니다. 화면 속 미국 동료의 얼굴이 실시간으로 보이고, 목소리도 들립니다.
한국과 미국 사이에는 태평양이 있는데, 어떻게 이런 일이 가능한 걸까요? 박시니어 씨가 설명했습니다.
"LAN이 동네라면, WAN은 전국을 연결하는 고속도로 네트워크예요. 심지어 대륙을 넘어 전 세계를 연결하죠." **WAN(Wide Area Network)**은 지리적으로 떨어진 네트워크들을 연결합니다.
서울에 있는 회사 LAN과 뉴욕에 있는 지사 LAN을 연결하는 것이 WAN입니다. 가장 거대하고 유명한 WAN은 바로 인터넷입니다.
인터넷은 전 세계의 수많은 네트워크가 서로 연결된 거대한 WAN입니다. WAN이 어떻게 먼 거리를 연결할 수 있는지 살펴보겠습니다.
핵심은 해저 광케이블입니다. 태평양, 대서양 바닥에는 수만 킬로미터의 광케이블이 깔려 있습니다.
이 케이블을 통해 아시아, 유럽, 북미 대륙이 연결됩니다. 빛의 속도로 데이터가 이동하기 때문에, 지구 반대편에도 100밀리초 내외의 지연시간으로 데이터를 보낼 수 있습니다.
물론 WAN은 LAN에 비해 제약이 있습니다. 첫째, 속도가 느립니다.
물리적 거리가 멀기 때문에 데이터가 이동하는 데 시간이 걸립니다. 서울에서 뉴욕까지는 빛의 속도로도 약 70밀리초가 걸립니다.
실제로는 라우터를 여러 번 거치기 때문에 더 오래 걸립니다. 둘째, 비용이 높습니다.
해저 케이블을 설치하고 유지하는 데 막대한 비용이 들어갑니다. 그래서 일반 사용자는 인터넷 서비스 제공업체(ISP)를 통해 WAN에 접속합니다.
ISP가 대규모 인프라를 구축하고, 사용자는 월정액을 내고 그 인프라를 사용하는 것입니다. 셋째, 보안 위험이 높습니다.
데이터가 여러 네트워크를 거쳐 이동하기 때문에, 중간에 누군가 데이터를 가로챌 위험이 있습니다. 그래서 WAN 통신에는 암호화가 필수입니다.
HTTPS, VPN 같은 기술이 WAN에서의 보안을 담당합니다. 위 코드에서 WAN 클래스는 여러 LAN을 연결하고, 원거리 통신을 시뮬레이션합니다.
long_distance_communication 메서드는 거리에 따른 지연시간을 대략적으로 계산합니다. 실제 WAN에서는 거리뿐만 아니라 네트워크 혼잡도, 라우팅 경로 등도 지연시간에 영향을 미칩니다.
김개발 씨가 물었습니다. "그러면 제가 집에서 넷플릭스 미국 서버에 접속할 때도 WAN을 통하는 거네요?" 박시니어 씨가 고개를 끄덕였습니다.
"맞아요. 정확히는 집 공유기의 LAN에서 시작해서, ISP 네트워크를 거쳐, 여러 WAN을 경유해서 넷플릭스 서버가 있는 LAN에 도착하는 거예요." WAN 개념을 이해하면 인터넷 서비스의 성능 특성을 이해할 수 있습니다.
해외 서버 게임의 핑이 높은 이유, 해외 사이트 접속이 느린 이유가 모두 WAN의 물리적 제약 때문입니다.
실전 팁
💡 - 해외 서비스 이용 시 지연시간은 물리적 거리에 비례한다는 점을 기억하세요
- 중요한 데이터를 WAN으로 전송할 때는 반드시 암호화(HTTPS, VPN)를 사용하세요
7. LAN과 WAN의 차이점
김개발 씨가 새 프로젝트의 네트워크 구성을 설계하다가 고민에 빠졌습니다. "데이터베이스 서버를 어디에 둬야 할까?
같은 사무실? 아니면 클라우드?" 박시니어 씨가 다가왔습니다.
"그 결정을 잘 하려면 LAN과 WAN의 차이를 명확히 알아야 해요."
LAN과 WAN은 여러 면에서 차이가 있습니다. 범위에서 LAN은 건물 내, WAN은 도시/국가/대륙 간입니다.
속도는 LAN이 훨씬 빠르고, 지연시간도 LAN이 훨씬 짧습니다. 비용은 WAN이 높고, 관리 주체도 다릅니다.
이 차이를 이해하면 올바른 네트워크 설계가 가능합니다.
다음 코드를 살펴봅시다.
# LAN vs WAN 특성 비교
class NetworkComparison:
def __init__(self):
self.lan_specs = {
"coverage": "건물, 캠퍼스 (수십~수백 미터)",
"speed": "1Gbps ~ 10Gbps",
"latency": "1ms 이하",
"cost": "낮음 (직접 구축)",
"security": "높음 (내부망)",
"management": "조직 내부"
}
self.wan_specs = {
"coverage": "도시, 국가, 대륙 (수천 km)",
"speed": "수 Mbps ~ 수백 Mbps",
"latency": "10ms ~ 200ms+",
"cost": "높음 (ISP 이용료)",
"security": "낮음 (암호화 필수)",
"management": "ISP 및 여러 조직"
}
def compare(self, aspect):
# 특정 측면에서 LAN과 WAN 비교
lan = self.lan_specs.get(aspect, "정보 없음")
wan = self.wan_specs.get(aspect, "정보 없음")
return f"LAN: {lan}\nWAN: {wan}"
# 비교 실행
comparison = NetworkComparison()
print("=== 속도 비교 ===")
print(comparison.compare("speed"))
print("\n=== 지연시간 비교 ===")
print(comparison.compare("latency"))
김개발 씨에게 중요한 결정의 순간이 왔습니다. 새로 개발하는 서비스의 데이터베이스 서버를 어디에 둘지 결정해야 합니다.
같은 사무실 서버실에 둘 수도 있고, AWS 같은 클라우드에 둘 수도 있습니다. 어떤 선택이 나을까요?
박시니어 씨가 차분히 설명을 시작했습니다. "이 결정을 잘 하려면 LAN과 WAN의 차이를 명확히 이해해야 해요.
둘의 특성이 완전히 다르거든요." 첫 번째 차이는 범위입니다. LAN은 같은 건물, 같은 층, 같은 사무실 정도의 범위를 다룹니다.
길어야 수백 미터입니다. 반면 WAN은 도시 간, 국가 간, 심지어 대륙 간 연결을 다룹니다.
수천 킬로미터에 달하는 거리입니다. 두 번째 차이는 속도입니다.
LAN은 일반적으로 1Gbps에서 10Gbps의 속도를 제공합니다. 최신 기술을 사용하면 100Gbps도 가능합니다.
반면 WAN은 보통 수십에서 수백 Mbps 정도입니다. 물론 전용선을 사용하면 더 빠르지만, 비용이 크게 증가합니다.
세 번째 차이는 **지연시간(레이턴시)**입니다. 이 차이가 정말 중요합니다.
LAN에서는 데이터가 1밀리초 이내에 도착합니다. 거의 즉시라고 봐도 됩니다.
하지만 WAN에서는 수십에서 수백 밀리초가 걸립니다. 서울에서 미국 서버까지 왕복하는 데 200밀리초 정도 걸릴 수 있습니다.
이 지연시간이 왜 중요할까요? 데이터베이스 쿼리를 예로 들어보겠습니다.
웹 페이지 하나를 로드하는 데 20번의 데이터베이스 쿼리가 필요하다고 가정해봅시다. LAN에서는 각 쿼리가 1ms 걸리니까 총 20ms입니다.
하지만 WAN에서 지연시간이 50ms라면, 쿼리 왕복에만 1000ms(1초)가 걸립니다. 사용자가 1초를 기다려야 하는 것입니다.
네 번째 차이는 비용입니다. LAN은 스위치, 케이블만 있으면 직접 구축할 수 있습니다.
초기 비용 외에는 유지비가 거의 들지 않습니다. 하지만 WAN은 ISP를 통해야 하고, 월정액을 계속 내야 합니다.
전용선이나 글로벌 네트워크가 필요하면 비용이 급격히 증가합니다. 다섯 번째 차이는 보안입니다.
LAN은 물리적으로 격리되어 있어서 외부 공격에 비교적 안전합니다. 하지만 WAN은 데이터가 여러 네트워크를 경유하므로 중간에 가로채질 위험이 있습니다.
따라서 WAN 통신에는 반드시 암호화가 필요합니다. 김개발 씨가 결론을 내렸습니다.
"아, 그러면 데이터베이스처럼 빈번하게 접근하는 서버는 LAN에 두고, 백업이나 재해복구용은 WAN(클라우드)에 두는 게 좋겠네요?" 박시니어 씨가 미소를 지었습니다. "정확해요.
용도에 맞게 LAN과 WAN을 적절히 활용하는 게 좋은 네트워크 설계예요." 위 코드의 NetworkComparison 클래스는 LAN과 WAN의 주요 특성을 비교합니다. 각 측면에서 두 네트워크의 차이를 한눈에 볼 수 있습니다.
실제 네트워크 설계 시 이런 비교를 통해 올바른 결정을 내릴 수 있습니다. LAN과 WAN의 차이를 이해하면 서비스 아키텍처 설계, 성능 최적화, 비용 산정 등 다양한 상황에서 현명한 결정을 내릴 수 있습니다.
실전 팁
💡 - 빈번한 데이터 접근이 필요한 서버는 LAN에, 지리적 분산이 필요한 서비스는 WAN 활용을 고려하세요
- 하이브리드 구성(LAN + 클라우드 WAN)이 현대 서비스의 일반적인 패턴입니다
이상으로 학습을 마칩니다. 위 내용을 직접 코드로 작성해보면서 익혀보세요!
댓글 (0)
함께 보면 좋은 카드 뉴스
Helm 마이크로서비스 패키징 완벽 가이드
Kubernetes 환경에서 마이크로서비스를 효율적으로 패키징하고 배포하는 Helm의 핵심 기능을 실무 중심으로 학습합니다. Chart 생성부터 릴리스 관리까지 체계적으로 다룹니다.
보안 아키텍처 구성 완벽 가이드
프로젝트의 보안을 처음부터 설계하는 방법을 배웁니다. AWS 환경에서 VPC부터 WAF, 암호화, 접근 제어까지 실무에서 바로 적용할 수 있는 보안 아키텍처를 단계별로 구성해봅니다.
AWS Organizations 완벽 가이드
여러 AWS 계정을 체계적으로 관리하고 통합 결제와 보안 정책을 적용하는 방법을 실무 스토리로 쉽게 배워봅니다. 초보 개발자도 바로 이해할 수 있는 친절한 설명과 실전 예제를 제공합니다.
AWS KMS 암호화 완벽 가이드
AWS KMS(Key Management Service)를 활용한 클라우드 데이터 암호화 방법을 초급 개발자를 위해 쉽게 설명합니다. CMK 생성부터 S3, EBS 암호화, 봉투 암호화까지 실무에 필요한 모든 내용을 담았습니다.
AWS Secrets Manager 완벽 가이드
AWS에서 데이터베이스 비밀번호, API 키 등 민감한 정보를 안전하게 관리하는 Secrets Manager의 핵심 개념과 실무 활용법을 배워봅니다. 초급 개발자도 쉽게 따라할 수 있도록 실전 예제와 함께 설명합니다.