본 콘텐츠의 이미지 및 내용은 AI로 생성되었습니다.
본 콘텐츠의 이미지 및 내용을 무단으로 복제, 배포, 수정하여 사용할 경우 저작권법에 의해 법적 제재를 받을 수 있습니다.
이미지 로딩 중...
AI Generated
2025. 12. 5. · 16 Views
무선 네트워크 완벽 가이드
전파의 기초부터 와이파이, 무선 보안까지 무선 네트워크의 핵심 개념을 초급 개발자의 눈높이에서 쉽게 설명합니다. 실무에서 네트워크 환경을 이해하고 설계하는 데 필요한 모든 지식을 담았습니다.
목차
1. 전파와 주파수 이해
김개발 씨는 회사에서 새로운 IoT 프로젝트를 맡게 되었습니다. 센서 데이터를 무선으로 전송해야 하는데, 선배가 "2.4GHz로 할까요, 5GHz로 할까요?"라고 묻자 멍해졌습니다.
주파수가 뭐길래 선택해야 하는 걸까요?
**전파(Radio Wave)**는 눈에 보이지 않는 전자기파의 일종으로, 공기 중으로 데이터를 실어 나르는 역할을 합니다. 마치 소리가 공기를 타고 전달되듯이, 전파도 특정 주파수를 타고 정보를 전달합니다.
주파수를 제대로 이해하면 왜 와이파이가 벽을 잘 통과하지 못하는지, 왜 블루투스 거리가 짧은지 알 수 있습니다.
다음 코드를 살펴봅시다.
# 주파수와 파장의 관계를 계산하는 예제
# 빛의 속도 = 주파수 × 파장
SPEED_OF_LIGHT = 3 * 10**8 # 빛의 속도 (m/s)
def calculate_wavelength(frequency_ghz):
"""주파수(GHz)를 입력받아 파장(m)을 계산합니다"""
frequency_hz = frequency_ghz * 10**9
wavelength = SPEED_OF_LIGHT / frequency_hz
return wavelength
# 2.4GHz 와이파이의 파장
wifi_24 = calculate_wavelength(2.4)
print(f"2.4GHz 파장: {wifi_24:.3f}m") # 약 0.125m
# 5GHz 와이파이의 파장
wifi_5 = calculate_wavelength(5)
print(f"5GHz 파장: {wifi_5:.3f}m") # 약 0.06m
김개발 씨는 입사 6개월 차 주니어 개발자입니다. IoT 프로젝트를 맡으면서 처음으로 무선 통신이라는 세계에 발을 들여놓게 되었습니다.
유선으로 연결하면 간단할 텐데, 센서들이 공장 이곳저곳에 흩어져 있어서 무선이 필수였습니다. 선배 개발자 박시니어 씨가 물었습니다.
"2.4GHz로 갈까요, 5GHz로 갈까요?" 김개발 씨는 고개를 갸웃했습니다. "그게 뭐가 다른 건가요?" 그렇다면 전파와 주파수란 정확히 무엇일까요?
쉽게 비유하자면, 전파는 마치 바다의 파도와 같습니다. 파도가 물결을 타고 에너지를 전달하듯이, 전파도 공간을 통해 에너지와 정보를 전달합니다.
그리고 주파수는 1초 동안 파도가 몇 번 출렁이는지를 나타냅니다. 1초에 24억 번 출렁이면 2.4GHz, 50억 번 출렁이면 5GHz입니다.
여기서 중요한 물리 법칙이 있습니다. 주파수가 높을수록 파장이 짧아집니다.
파장은 파도의 마루에서 다음 마루까지의 거리입니다. 빛의 속도는 일정하기 때문에, 1초에 더 많이 출렁이려면 각각의 파도 간격이 짧아져야 합니다.
이 법칙이 왜 중요할까요? 파장의 길이가 전파의 특성을 결정하기 때문입니다.
2.4GHz는 파장이 약 12.5cm입니다. 파장이 길면 장애물을 돌아가는 회절 현상이 잘 일어납니다.
그래서 벽이나 가구를 비교적 잘 통과합니다. 하지만 전 세계 많은 기기가 이 주파수를 사용해서 혼잡합니다.
전자레인지, 블루투스, 무선 마우스 모두 2.4GHz 대역을 씁니다. 5GHz는 파장이 약 6cm입니다.
파장이 짧으면 직진성이 강해집니다. 장애물을 만나면 반사되거나 흡수되어 버립니다.
대신 간섭이 적고, 더 넓은 대역폭을 사용할 수 있어서 속도가 빠릅니다. 위의 코드를 살펴보면, 빛의 속도를 주파수로 나누어 파장을 계산합니다.
실제로 계산해보면 2.4GHz의 파장이 5GHz보다 두 배 이상 긴 것을 확인할 수 있습니다. 실제 현업에서는 어떻게 활용할까요?
넓은 창고에 IoT 센서를 설치한다면 2.4GHz가 유리합니다. 벽과 선반을 넘어 신호가 전달되어야 하니까요.
반면 회의실에서 화상회의를 한다면 5GHz가 좋습니다. 가까운 거리에서 빠른 속도가 필요하니까요.
하지만 주의할 점도 있습니다. 2.4GHz가 멀리 간다고 무조건 좋은 것은 아닙니다.
옆 건물의 와이파이 신호가 우리 사무실까지 들어와서 간섭을 일으킬 수도 있습니다. 다시 김개발 씨 이야기로 돌아가 봅시다.
박시니어 씨의 설명을 들은 김개발 씨는 고개를 끄덕였습니다. "아, 공장이 넓으니까 2.4GHz로 가야겠네요!" 이제 주파수의 의미를 이해한 것입니다.
실전 팁
💡 - 2.4GHz는 도달 거리가 길지만 혼잡하고, 5GHz는 빠르지만 장애물에 약합니다
- 최신 공유기는 듀얼밴드를 지원하여 두 주파수를 동시에 사용할 수 있습니다
2. 와이파이란
김개발 씨가 카페에서 노트북을 펼쳤습니다. "Free WiFi"라는 네트워크가 보입니다.
매일 사용하는 와이파이인데, 문득 궁금해졌습니다. Wi-Fi라는 이름은 대체 어디서 온 걸까요?
그리고 정확히 어떤 기술일까요?
Wi-Fi는 무선으로 인터넷에 연결하는 기술의 브랜드 이름입니다. 마치 "밴드"가 일회용 반창고의 대명사가 된 것처럼, Wi-Fi는 무선 랜의 대명사가 되었습니다.
기술적으로는 IEEE 802.11 표준을 기반으로 하며, Wi-Fi Alliance라는 단체에서 인증한 제품만 Wi-Fi 로고를 붙일 수 있습니다.
다음 코드를 살펴봅시다.
# Python으로 현재 Wi-Fi 연결 정보 확인하기
import subprocess
import platform
def get_wifi_info():
"""현재 연결된 Wi-Fi 정보를 가져옵니다"""
system = platform.system()
if system == "Windows":
# Windows에서 Wi-Fi 정보 조회
cmd = "netsh wlan show interfaces"
result = subprocess.run(cmd, capture_output=True, text=True, shell=True)
return result.stdout
elif system == "Linux":
# Linux에서 Wi-Fi 정보 조회
cmd = "iwconfig 2>/dev/null | grep -E 'ESSID|Signal'"
result = subprocess.run(cmd, capture_output=True, text=True, shell=True)
return result.stdout
return "지원하지 않는 운영체제입니다"
print(get_wifi_info())
김개발 씨는 매일 와이파이를 사용합니다. 집에서, 회사에서, 카페에서.
그런데 어느 날 후배가 물었습니다. "선배, Wi-Fi랑 무선 랜이랑 같은 건가요?" 순간 김개발 씨는 말문이 막혔습니다.
분명 같은 것 같은데, 왜 이름이 두 개일까요? Wi-Fi라는 이름의 탄생 배경은 흥미롭습니다.
1999년, 무선 네트워크 장비 제조사들이 모여 Wi-Fi Alliance라는 단체를 만들었습니다. 당시 무선 랜 기술의 공식 이름은 "IEEE 802.11b Direct Sequence"였습니다.
마케팅하기에 너무 어려운 이름이었죠. 그래서 브랜드 컨설팅 회사에 의뢰해서 만든 이름이 바로 Wi-Fi입니다.
Hi-Fi(High Fidelity, 고음질)에서 착안했다고 알려져 있습니다. Wireless Fidelity의 약자라고 알려져 있지만, 사실 공식적으로 그런 의미는 아닙니다.
그냥 기억하기 쉽고 발음하기 좋은 이름을 만든 것입니다. 그렇다면 Wi-Fi와 무선 랜의 관계는 어떻게 될까요?
쉽게 비유하자면, 무선 랜은 "스마트폰"이고 Wi-Fi는 "아이폰"입니다. 무선 랜은 무선으로 구성된 근거리 통신망을 총칭하는 일반 명사이고, Wi-Fi는 그중에서 802.11 표준을 따르며 Wi-Fi Alliance 인증을 받은 특정 기술의 브랜드 이름입니다.
Wi-Fi Alliance가 하는 일은 호환성 인증입니다. A 회사의 공유기와 B 회사의 노트북이 서로 통신할 수 있도록 보장하는 것이죠.
Wi-Fi 로고가 붙은 제품은 다른 Wi-Fi 인증 제품과 반드시 호환됩니다. 위의 코드를 살펴보면, 운영체제별로 현재 연결된 Wi-Fi 정보를 조회합니다.
Windows는 netsh 명령어를, Linux는 iwconfig 명령어를 사용합니다. 이렇게 조회하면 현재 연결된 네트워크 이름, 신호 강도 등을 확인할 수 있습니다.
실제 현업에서 Wi-Fi 정보를 프로그래밍으로 다루는 경우가 많습니다. 모바일 앱에서 Wi-Fi 연결 상태에 따라 다른 동작을 하거나, IoT 기기에서 자동으로 Wi-Fi에 연결하는 기능을 구현할 때 이런 지식이 필요합니다.
최근에는 Wi-Fi 6(802.11ax), Wi-Fi 7(802.11be)처럼 숫자로 세대를 표시합니다. 예전에는 802.11ac, 802.11n처럼 알파벳으로 표기해서 일반인이 구분하기 어려웠는데, Wi-Fi Alliance에서 마케팅을 위해 간단한 숫자 체계를 도입한 것입니다.
다시 김개발 씨 이야기로 돌아가 봅시다. 후배에게 설명을 마친 김개발 씨는 뿌듯했습니다.
"Wi-Fi는 브랜드 이름이야. 802.11 표준을 따르는 무선 랜 기술이지."
실전 팁
💡 - Wi-Fi는 브랜드 이름이고, 기술 표준은 IEEE 802.11입니다
- Wi-Fi 6 = 802.11ax, Wi-Fi 5 = 802.11ac로 숫자가 클수록 최신 세대입니다
3. 802.11 무선 표준 종류
김개발 씨가 새 노트북을 사려고 스펙을 보는데, "Wi-Fi 6E (802.11ax)"라고 적혀 있습니다. 옆에는 "802.11a/b/g/n/ac/ax 호환"이라고도 쓰여 있네요.
알파벳이 왜 이렇게 많은 걸까요?
802.11은 IEEE에서 정한 무선 랜 표준의 번호입니다. 뒤에 붙는 알파벳(a, b, g, n, ac, ax)은 각 세대를 나타냅니다.
마치 자동차 모델이 연식별로 업그레이드되듯이, 802.11 표준도 시간이 지나면서 더 빠르고 효율적으로 발전해왔습니다. 최신 표준은 802.11ax(Wi-Fi 6)이며, 802.11be(Wi-Fi 7)도 등장했습니다.
다음 코드를 살펴봅시다.
# 802.11 표준별 스펙 비교
wifi_standards = {
"802.11b": {
"year": 1999,
"frequency": "2.4GHz",
"max_speed": "11 Mbps",
"wifi_name": None
},
"802.11a": {
"year": 1999,
"frequency": "5GHz",
"max_speed": "54 Mbps",
"wifi_name": None
},
"802.11g": {
"year": 2003,
"frequency": "2.4GHz",
"max_speed": "54 Mbps",
"wifi_name": None
},
"802.11n": {
"year": 2009,
"frequency": "2.4/5GHz",
"max_speed": "600 Mbps",
"wifi_name": "Wi-Fi 4"
},
"802.11ac": {
"year": 2014,
"frequency": "5GHz",
"max_speed": "6.9 Gbps",
"wifi_name": "Wi-Fi 5"
},
"802.11ax": {
"year": 2019,
"frequency": "2.4/5/6GHz",
"max_speed": "9.6 Gbps",
"wifi_name": "Wi-Fi 6/6E"
}
}
for std, spec in wifi_standards.items():
print(f"{std}: {spec['max_speed']} ({spec['frequency']})")
김개발 씨는 전자제품 매장에서 공유기를 고르고 있었습니다. 가격표에는 온갖 알파벳이 적혀 있습니다.
"802.11ax", "Wi-Fi 6", "AX3000"... 도대체 뭐가 뭔지 모르겠습니다.
매장 직원이 다가왔습니다. "어떤 걸 찾으세요?" 김개발 씨는 솔직하게 물었습니다.
"저 알파벳들이 뭔가요?" 802.11은 IEEE(전기전자공학자협회)에서 정한 무선 랜 표준의 번호입니다. 마치 건축 표준이나 안전 규격처럼, 무선 통신에도 전 세계가 따르는 표준이 있습니다.
뒤에 붙는 알파벳은 세대를 나타냅니다. 처음에는 순서대로 붙였지만, 중간에 순서가 뒤바뀌기도 했습니다.
802.11b가 1999년에 처음 대중화되었습니다. 2.4GHz 주파수를 사용하고 최대 11Mbps 속도를 냈습니다.
지금 보면 느리지만, 당시에는 혁명이었습니다. 같은 해에 802.11a도 나왔는데, 이건 5GHz를 사용해서 54Mbps까지 가능했습니다.
알파벳은 a가 앞이지만 실제로는 b가 먼저 보급되었습니다. a는 비쌌거든요.
802.11g는 2003년에 등장했습니다. 2.4GHz를 쓰면서 54Mbps를 달성했습니다.
b의 호환성과 a의 속도를 합친 것이죠. 802.11n은 2009년에 나와서 게임 체인저가 되었습니다.
MIMO(Multiple Input Multiple Output) 기술로 여러 안테나를 동시에 사용해서 600Mbps까지 속도를 높였습니다. 듀얼밴드(2.4GHz와 5GHz 동시 지원)도 도입되었습니다.
이때부터 Wi-Fi 4라는 이름이 붙었습니다. 802.11ac는 2014년에 등장한 Wi-Fi 5입니다.
5GHz 전용으로 이론상 6.9Gbps까지 가능합니다. 빔포밍 기술로 특정 기기 방향으로 신호를 집중시킬 수 있게 되었습니다.
802.11ax는 2019년의 Wi-Fi 6입니다. OFDMA(직교 주파수 분할 다중 접속) 기술로 여러 기기가 동시에 효율적으로 통신할 수 있습니다.
카페나 경기장처럼 많은 사람이 동시에 접속하는 환경에서 특히 좋습니다. 위의 코드를 보면 각 표준별 출시 연도, 주파수, 최대 속도를 정리해놓았습니다.
딕셔너리 구조로 만들어서 필요할 때 쉽게 참조할 수 있습니다. 실무에서 이런 지식이 왜 필요할까요?
시스템 요구사항을 정의할 때 "Wi-Fi 5 이상 필수"처럼 명시하거나, 성능 문제가 생겼을 때 원인을 파악하는 데 도움이 됩니다. 매장 직원의 설명을 들은 김개발 씨는 결국 Wi-Fi 6 공유기를 선택했습니다.
"집에 기기가 많으니까 동시 접속에 강한 게 좋겠네요!"
실전 팁
💡 - 802.11n(Wi-Fi 4) 이상이면 일반적인 용도로 충분합니다
- 많은 기기를 동시에 연결한다면 Wi-Fi 6(802.11ax)가 효율적입니다
4. AP의 역할
김개발 씨 회사에 새로운 층이 추가되었습니다. 네트워크 담당자가 "AP를 몇 대 더 설치해야 해요"라고 합니다.
AP가 뭐길래 설치해야 할까요? 공유기랑은 다른 건가요?
**AP(Access Point)**는 유선 네트워크와 무선 네트워크를 연결해주는 다리 역할을 합니다. 마치 공항의 게이트처럼, 무선 기기들이 유선 네트워크로 들어가는 관문입니다.
가정용 공유기는 AP, 라우터, 스위치 기능이 합쳐진 것이고, 기업용 AP는 순수하게 무선 접속 기능만 담당합니다.
다음 코드를 살펴봅시다.
# AP 연결 시뮬레이션 - 클라이언트가 AP에 접속하는 과정
class AccessPoint:
def __init__(self, ssid, channel):
self.ssid = ssid
self.channel = channel
self.connected_clients = []
self.max_clients = 50
def broadcast_beacon(self):
"""비콘 프레임을 주기적으로 전송합니다"""
return f"SSID: {self.ssid}, Channel: {self.channel}"
def authenticate(self, client_mac, password):
"""클라이언트 인증을 처리합니다"""
if len(self.connected_clients) >= self.max_clients:
return False, "AP 용량 초과"
# 실제로는 WPA 인증 과정이 진행됩니다
return True, "인증 성공"
def associate(self, client_mac):
"""연결을 수립합니다"""
self.connected_clients.append(client_mac)
return f"{client_mac} 연결 완료"
# AP 생성 및 클라이언트 연결
office_ap = AccessPoint("Office_5F", 36)
print(office_ap.broadcast_beacon())
print(office_ap.associate("AA:BB:CC:DD:EE:FF"))
김개발 씨 회사 5층에서 와이파이가 잘 안 터진다는 민원이 들어왔습니다. 네트워크 담당 이기술 씨가 장비를 들고 왔습니다.
"여기 AP 하나만 더 설치하면 돼요." 김개발 씨가 물었습니다. "AP요?
공유기를 말하는 건가요?" 이기술 씨가 웃으며 대답했습니다. "비슷하지만 달라요.
설명해 드릴게요." **AP(Access Point)**는 직역하면 "접속 지점"입니다. 무선 기기들이 네트워크에 접속하는 지점이라는 뜻이죠.
쉽게 비유하자면, AP는 마치 통역사와 같습니다. 유선 네트워크는 한국어를 쓰고, 무선 기기들은 영어를 씁니다.
AP는 이 둘 사이에서 통역을 해주어 서로 소통할 수 있게 만들어줍니다. 그렇다면 가정용 공유기와 AP는 뭐가 다를까요?
가정용 **공유기(Router)**는 여러 기능이 합쳐진 복합 장비입니다. 라우팅(인터넷 연결), 스위칭(여러 기기 연결), NAT(IP 주소 변환), 그리고 AP(무선 접속) 기능이 모두 들어 있습니다.
반면 기업용 AP는 순수하게 무선 접속 기능만 합니다. 라우터는 따로 있고, AP는 그 라우터에 연결되어 무선 확장만 담당합니다.
이렇게 분리하면 관리가 쉽고, 필요한 곳에 AP만 추가하면 되니까 확장성이 좋습니다. AP는 어떻게 동작할까요?
먼저 AP는 비콘(Beacon) 프레임을 주기적으로 뿌립니다. "나 여기 있어요, 내 이름은 OOO이에요"라고 광고하는 것입니다.
스마트폰에서 와이파이 목록에 뜨는 이름들이 바로 이 비콘을 통해 알게 된 것입니다. 기기가 접속하려면 **인증(Authentication)**과 연결(Association) 과정을 거칩니다.
비밀번호를 확인하고, 서로 통신 규격을 맞추는 과정입니다. 위의 코드를 보면 AP 클래스를 만들어서 이 과정을 시뮬레이션했습니다.
broadcast_beacon 메서드로 비콘을 보내고, authenticate로 인증하고, associate로 연결을 완료합니다. 실제 기업 환경에서는 컨트롤러 기반 AP를 많이 씁니다.
중앙의 컨트롤러가 여러 AP를 일괄 관리합니다. 설정 변경, 펌웨어 업데이트, 로밍 처리 등을 중앙에서 제어할 수 있어서 편리합니다.
이기술 씨가 새 AP를 천장에 설치했습니다. 김개발 씨가 스마트폰으로 확인하니 신호가 빵빵합니다.
"와, 이제 잘 터지네요!"
실전 팁
💡 - 가정용 공유기는 라우터+스위치+AP의 복합체이고, 기업용 AP는 무선 접속 전용입니다
- AP 설치 위치는 천장 중앙이 가장 효과적입니다 (전파가 아래로 퍼지므로)
5. 서비스 셋 SSID BSS ESS
김개발 씨가 회사 와이파이에 접속하려는데 "Company_Office"라는 이름이 보입니다. 1층에서도, 5층에서도 같은 이름입니다.
그런데 AP는 층마다 다르다고 했는데, 어떻게 같은 이름으로 보이는 걸까요?
**SSID(Service Set Identifier)**는 무선 네트워크의 이름입니다. **BSS(Basic Service Set)**는 하나의 AP와 그에 연결된 기기들의 집합이고, **ESS(Extended Service Set)**는 여러 BSS가 모여 하나의 큰 네트워크를 형성한 것입니다.
ESS 덕분에 여러 AP가 같은 SSID를 공유하며, 사용자는 이동하면서도 끊김 없이 접속할 수 있습니다.
다음 코드를 살펴봅시다.
# 서비스 셋 구조 시뮬레이션
class BSS:
"""Basic Service Set - 하나의 AP 영역"""
def __init__(self, bssid, ssid, location):
self.bssid = bssid # AP의 MAC 주소
self.ssid = ssid # 네트워크 이름
self.location = location
self.clients = []
class ESS:
"""Extended Service Set - 여러 BSS의 집합"""
def __init__(self, ssid):
self.ssid = ssid
self.bss_list = []
def add_bss(self, bss):
if bss.ssid == self.ssid:
self.bss_list.append(bss)
def roam(self, client, from_bss, to_bss):
"""로밍: 클라이언트가 다른 BSS로 이동"""
from_bss.clients.remove(client)
to_bss.clients.append(client)
return f"{client}이 {from_bss.location}에서 {to_bss.location}으로 로밍"
# ESS 구성
company_network = ESS("Company_Office")
bss_1f = BSS("AA:AA:AA:AA:AA:01", "Company_Office", "1층")
bss_5f = BSS("AA:AA:AA:AA:AA:05", "Company_Office", "5층")
company_network.add_bss(bss_1f)
company_network.add_bss(bss_5f)
김개발 씨는 노트북을 들고 1층 로비에서 5층 사무실로 올라왔습니다. 그런데 신기한 일이 벌어졌습니다.
와이파이 연결이 끊기지 않고 계속 유지됩니다. AP는 층마다 다른데 어떻게 된 걸까요?
박시니어 씨가 설명해주었습니다. "그건 ESS 덕분이야." 무선 네트워크의 구조를 이해하려면 세 가지 용어를 알아야 합니다.
SSID, BSS, ESS. **SSID(Service Set Identifier)**는 가장 익숙한 개념입니다.
바로 와이파이 이름입니다. 스마트폰에서 와이파이 목록을 볼 때 보이는 "Starbucks_WiFi", "KT_GiGA_5G" 같은 이름들이 SSID입니다.
**BSS(Basic Service Set)**는 하나의 AP가 커버하는 영역입니다. 쉽게 말해 하나의 AP와 그 AP에 연결된 모든 기기들의 집합입니다.
각 BSS는 고유한 BSSID를 가지는데, 이것은 AP의 MAC 주소입니다. 쉽게 비유하자면, BSS는 마치 교실 하나와 같습니다.
선생님(AP)이 있고, 학생들(기기)이 있습니다. 각 교실마다 다른 선생님이 있지만, 같은 학교(네트워크)에 속해 있습니다.
**ESS(Extended Service Set)**는 여러 BSS가 모여 하나의 큰 네트워크를 형성한 것입니다. 학교 전체라고 생각하면 됩니다.
학생이 1반에서 2반으로 이동해도 여전히 같은 학교 소속이듯이, 기기가 1층 AP에서 5층 AP로 이동해도 같은 네트워크에 연결되어 있습니다. ESS에 속한 모든 BSS는 같은 SSID를 공유합니다.
그래서 "Company_Office"라는 이름이 1층에서도, 5층에서도 보이는 것입니다. 여기서 **로밍(Roaming)**이라는 개념이 등장합니다.
사용자가 이동하면서 하나의 BSS에서 다른 BSS로 전환하는 것을 로밍이라고 합니다. 좋은 ESS 환경에서는 이 로밍이 매끄럽게 이루어져서 사용자가 전환을 느끼지 못합니다.
위의 코드를 보면 BSS와 ESS 클래스를 정의했습니다. ESS는 같은 SSID를 가진 BSS만 추가할 수 있고, roam 메서드로 클라이언트가 BSS 간에 이동하는 것을 시뮬레이션합니다.
실무에서 네트워크를 설계할 때 ESS 개념이 중요합니다. 넓은 사무실이나 창고에서는 여러 AP를 ESS로 구성해야 사용자가 이동하면서도 끊김 없이 작업할 수 있습니다.
주의할 점도 있습니다. 같은 SSID라고 무조건 같은 ESS는 아닙니다.
옆 건물에서 같은 이름의 SSID를 쓰고 있을 수도 있습니다. 이런 경우 혼란이 생길 수 있으니, 기업 환경에서는 고유한 SSID를 사용하는 것이 좋습니다.
김개발 씨는 고개를 끄덕였습니다. "아, 그래서 이동해도 안 끊기는 거군요!"
실전 팁
💡 - SSID는 최대 32바이트까지 가능하며, 특수문자도 사용할 수 있습니다
- 로밍 품질을 높이려면 AP 간 신호 중첩 영역이 20-30% 정도 있어야 합니다
6. 무선 보안 WPA2 WPA3
김개발 씨가 카페에서 "Free_WiFi"에 접속했습니다. 그런데 갑자기 불안해졌습니다.
내 인터넷 뱅킹 정보를 누가 훔쳐볼 수 있는 건 아닐까요? 무선 네트워크는 전파로 데이터가 날아다니니까요.
무선 보안은 전파로 전송되는 데이터를 보호하는 기술입니다. WEP에서 시작해 WPA, WPA2를 거쳐 현재는 WPA3가 최신 표준입니다.
WPA2는 AES 암호화를 사용하고, WPA3는 SAE 인증으로 더 강력한 보안을 제공합니다. 공개 와이파이에서도 개별 암호화가 가능해져서 안전성이 크게 향상되었습니다.
다음 코드를 살펴봅시다.
# 무선 보안 프로토콜 비교
security_protocols = {
"WEP": {
"year": 1997,
"encryption": "RC4",
"key_length": "64/128 bit",
"status": "취약 - 사용 금지",
"crack_time": "수 분"
},
"WPA": {
"year": 2003,
"encryption": "TKIP/RC4",
"key_length": "256 bit",
"status": "취약 - 사용 비권장",
"crack_time": "수 시간"
},
"WPA2": {
"year": 2004,
"encryption": "AES-CCMP",
"key_length": "128/256 bit",
"status": "안전 - 널리 사용",
"crack_time": "강력한 비밀번호 시 수년"
},
"WPA3": {
"year": 2018,
"encryption": "AES-GCMP",
"key_length": "192/256 bit",
"status": "가장 안전 - 권장",
"crack_time": "사실상 불가능"
}
}
for protocol, info in security_protocols.items():
print(f"{protocol} ({info['year']}): {info['status']}")
print(f" 암호화: {info['encryption']}")
김개발 씨는 카페에서 노트북으로 업무를 보고 있었습니다. 급하게 인터넷 뱅킹을 해야 하는데, 문득 걱정이 됩니다.
"와이파이로 접속하면 누가 내 정보를 볼 수 있는 거 아닌가?" 유선 네트워크는 케이블 안으로 데이터가 흐릅니다. 물리적으로 케이블을 끊지 않는 한 중간에서 엿보기 어렵습니다.
하지만 무선은 다릅니다. 전파는 공기 중을 날아다닙니다.
이론적으로는 누구나 잡아낼 수 있습니다. 그래서 무선 보안이 필수입니다.
데이터를 암호화해서 잡아내더라도 내용을 알 수 없게 만드는 것입니다. 무선 보안의 역사는 실패의 역사이기도 합니다.
**WEP(Wired Equivalent Privacy)**는 1997년에 등장한 최초의 무선 보안 프로토콜입니다. "유선과 동등한 프라이버시"라는 이름이었지만, 치명적인 결함이 있었습니다.
RC4 암호화의 초기화 벡터(IV) 관리가 허술해서, 충분한 패킷을 모으면 수 분 만에 비밀번호를 알아낼 수 있습니다. 절대 사용하면 안 됩니다.
**WPA(Wi-Fi Protected Access)**는 2003년에 WEP의 긴급 패치로 나왔습니다. TKIP라는 방식으로 RC4의 문제를 보완했지만, 근본적인 해결책은 아니었습니다.
지금은 역시 사용이 권장되지 않습니다. WPA2는 2004년에 등장해서 현재까지 가장 널리 사용되고 있습니다.
AES 암호화를 사용하고, CCMP 프로토콜로 데이터 무결성을 보장합니다. 강력한 비밀번호를 사용하면 현실적으로 뚫기 어렵습니다.
하지만 WPA2도 약점이 있습니다. 2017년에 발견된 KRACK 공격이 대표적입니다.
또한 공개 와이파이에서는 같은 비밀번호를 아는 사람끼리는 서로의 트래픽을 볼 수 있다는 문제가 있습니다. WPA3는 2018년에 발표된 최신 표준입니다.
**SAE(Simultaneous Authentication of Equals)**라는 새로운 인증 방식을 사용합니다. 이 방식은 오프라인 사전 공격을 막아줍니다.
비밀번호가 간단해도 무차별 대입 공격이 어렵습니다. WPA3의 또 다른 장점은 개별 데이터 암호화입니다.
공개 와이파이에서도 각 사용자의 데이터가 개별적으로 암호화됩니다. 같은 카페에 있는 사람이 내 트래픽을 볼 수 없습니다.
위의 코드를 보면 각 프로토콜의 출시 연도, 암호화 방식, 현재 상태를 정리했습니다. 시스템 요구사항을 정의하거나 보안 감사를 할 때 참고할 수 있습니다.
실무에서 주의할 점은 WPA2-Enterprise와 WPA2-Personal의 차이입니다. Personal은 공유 비밀번호(PSK)를 사용하고, Enterprise는 개별 인증(RADIUS 서버)을 사용합니다.
기업 환경에서는 Enterprise를 권장합니다. 김개발 씨는 카페 와이파이 설정을 확인했습니다.
WPA2로 되어 있네요. "그래도 중요한 건 나중에 하자." 그리고 VPN을 켰습니다.
실전 팁
💡 - 공개 와이파이에서는 반드시 VPN을 사용하세요
- 기업 환경에서는 WPA2/WPA3-Enterprise와 RADIUS 인증을 권장합니다
- 비밀번호는 최소 12자 이상, 영문+숫자+특수문자 조합이 좋습니다
7. 무선 네트워크 설계 고려사항
김개발 씨의 회사가 새 건물로 이사합니다. IT팀 회의에서 "무선 네트워크를 어떻게 설계할까요?"라는 질문이 나왔습니다.
AP를 어디에, 몇 대 설치해야 할까요? 채널은 어떻게 설정해야 할까요?
무선 네트워크 설계는 커버리지(도달 범위), 용량(동시 접속), 간섭 방지, 보안을 종합적으로 고려해야 합니다. AP 위치 선정, 채널 계획, 전송 출력 조절, 밀도 설계 등이 핵심 요소입니다.
제대로 설계하면 끊김 없는 연결과 일관된 속도를 제공할 수 있습니다.
다음 코드를 살펴봅시다.
# 무선 네트워크 설계 시뮬레이션
class WirelessNetworkDesign:
def __init__(self, area_sqm, user_count):
self.area = area_sqm
self.users = user_count
def calculate_ap_count_by_coverage(self, ap_range=20):
"""커버리지 기반 AP 개수 계산 (실내 기준)"""
coverage_per_ap = 3.14 * (ap_range ** 2) # 원형 커버리지
return max(1, int(self.area / coverage_per_ap) + 1)
def calculate_ap_count_by_capacity(self, users_per_ap=25):
"""용량 기반 AP 개수 계산"""
return max(1, int(self.users / users_per_ap) + 1)
def recommend_channels_24ghz(self, ap_count):
"""2.4GHz 채널 계획 (비중첩 채널: 1, 6, 11)"""
non_overlapping = [1, 6, 11]
return [non_overlapping[i % 3] for i in range(ap_count)]
def design_summary(self):
"""설계 요약"""
by_coverage = self.calculate_ap_count_by_coverage()
by_capacity = self.calculate_ap_count_by_capacity()
recommended = max(by_coverage, by_capacity)
return {
"면적": f"{self.area}㎡",
"예상 사용자": self.users,
"권장 AP 수": recommended,
"채널 배치": self.recommend_channels_24ghz(recommended)
}
# 500㎡ 사무실, 100명 사용
office = WirelessNetworkDesign(500, 100)
print(office.design_summary())
김개발 씨 회사의 새 건물은 500제곱미터 규모에 직원이 100명입니다. IT팀장 이기술 씨가 화이트보드에 평면도를 그리며 설명을 시작했습니다.
"무선 네트워크 설계는 크게 네 가지를 고려해야 해요." 첫 번째는 **커버리지(Coverage)**입니다. 모든 공간에서 신호가 잡혀야 합니다.
AP 하나가 커버하는 범위는 환경에 따라 다릅니다. 개활지에서는 100미터까지도 가능하지만, 벽이 많은 사무실에서는 15-20미터 정도입니다.
중요한 것은 AP 간에 20-30%의 중첩 영역이 있어야 로밍이 원활하다는 점입니다. 두 번째는 **용량(Capacity)**입니다.
아무리 신호가 잘 잡혀도 동시 접속자가 너무 많으면 느려집니다. 일반적으로 AP 하나당 25-50명 정도를 권장합니다.
화상회의나 대용량 파일 전송이 많다면 더 적게 잡아야 합니다. "우리 회사는 커버리지로는 AP 4대면 되는데, 용량으로는 5대가 필요해요.
그러면 5대를 설치해야죠." 세 번째는 채널 계획입니다. 2.4GHz 대역에서 채널은 1번부터 13번까지 있지만, 서로 겹치지 않는 채널은 1, 6, 11 세 개뿐입니다.
나머지 채널은 인접 채널과 겹쳐서 간섭을 일으킵니다. 쉽게 비유하자면, 채널은 마치 라디오 주파수와 같습니다.
옆 사람이 비슷한 주파수로 방송하면 잡음이 들리듯이, 인접 AP가 겹치는 채널을 쓰면 성능이 떨어집니다. 5GHz 대역은 사정이 나아서 비중첩 채널이 많습니다.
36, 40, 44, 48, 149, 153, 157, 161 등 여러 채널을 자유롭게 쓸 수 있습니다. 네 번째는 전송 출력 조절입니다.
무조건 세게 쏘면 좋을 것 같지만, 그렇지 않습니다. 출력이 너무 높으면 멀리 있는 AP와 간섭이 생깁니다.
또한 AP는 기기에게 강하게 신호를 보내도, 기기의 안테나는 약해서 되돌아오는 신호가 약할 수 있습니다. 양방향 밸런스가 맞아야 합니다.
위의 코드를 보면 면적 기반 계산과 용량 기반 계산을 모두 수행하고, 둘 중 큰 값을 권장합니다. 채널 배치도 비중첩 채널을 교대로 할당합니다.
실무에서는 **사이트 서베이(Site Survey)**라는 과정을 거칩니다. 실제로 AP를 들고 다니면서 신호 강도를 측정하고, 간섭 요소를 파악합니다.
건물 구조, 벽 재질, 가구 배치에 따라 결과가 달라지기 때문입니다. 주의할 점도 있습니다.
**숨겨진 노드 문제(Hidden Node Problem)**라는 것이 있습니다. A와 C가 B를 볼 수 있지만, A와 C는 서로를 볼 수 없는 상황입니다.
이때 A와 C가 동시에 B에게 전송하면 충돌이 발생합니다. RTS/CTS 같은 프로토콜로 해결하지만, 설계 단계에서 이런 상황을 최소화하는 것이 좋습니다.
이기술 씨가 마무리했습니다. "일단 5대로 설계하고, 사이트 서베이 결과 보고 조정하죠." 김개발 씨가 물었습니다.
"생각보다 복잡하네요. 그냥 AP 많이 설치하면 안 되나요?" "오히려 더 안 좋아질 수 있어요.
간섭이 심해지거든요. 적절한 위치에 적절한 수량이 핵심이에요."
실전 팁
💡 - 2.4GHz는 1, 6, 11 채널만 사용하고, 5GHz는 DFS 채널 지원 여부를 확인하세요
- 고밀도 환경에서는 AP 출력을 낮추고 개수를 늘리는 전략이 효과적입니다
- 전문적인 설계가 필요하면 Wi-Fi 분석 도구(Ekahau, NetSpot 등)를 활용하세요
이상으로 학습을 마칩니다. 위 내용을 직접 코드로 작성해보면서 익혀보세요!
댓글 (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의 핵심 개념과 실무 활용법을 배워봅니다. 초급 개발자도 쉽게 따라할 수 있도록 실전 예제와 함께 설명합니다.