프론트엔드 개발자에게 서비스를 최적화하는 건 중요한 과제로 여겨집니다. 하지만 사용자의 인터넷 환경이 불안정하다면, 최선을 다 한 최적화 서비스도 긴 대기 시간을 야기합니다.
이에 관련한 문제가 있을 때, 가끔 사용자의 환경을 이해해야 하는 경우도 있습니다. 사용자의 환경, 특히 인터넷 환경에 대해 더 알기 위해 이 글을 작성합니다.
목차
1️⃣ 서론
2️⃣ Network interface
3️⃣ Wi-Fi와 LAN
4️⃣ 마무리
사용자의 PC를 사용하기 위해 가장 먼저 인터넷 환경이 필요합니다. 우리는 어떻게 인터넷에 연결할까요?
인터넷 네트워크 구조를 이해하기 위해서, TCP/IP 4계층 모델을 살펴보려 합니다. TCP/IP 4계층 모델에서 L1, L2는 각각 Link (또는 Network Interface) Layer와 Internet Layer를 가리킵니다. 즉, 우리가 인터넷에 연결하기 위해서는 네트워크 인터페이스를 통해 물리적·논리적으로 네트워크에 접속해야 합니다.
그렇다면 Network Interface는 어떻게 확인할 수 있을까요?
또한, 어떤 종류와 특징을 가지는지 알아보고자 합니다.
PC(운영체제별로 Windows, macOS, Linux 등)에서는 물리/가상 네트워크 어댑터(인터페이스)가 여러 개 존재할 수 있습니다. 예를 들어,
유선 랜 카드(Ethernet)
무선 랜 카드(Wi-Fi)
가상 네트워크 어댑터(VPN, Docker, Hyper-V 등)
Bluetooth PAN 어댑터
가 있습니다.
해당 설명을 보고는 도저히 와닿지 않습니다.. 직접 두 눈으로 확인하고자 합니다.
Mac OS 기준으로 ifconfig -a 명령어로 모든 인터페이스를 확인해 볼 수 있습니다. 기껏해야 와이파이 정보만 있으리라 기대했지만, 그보다 더 많은 정보가 표시됩니다. 각각의 인터페이스는 다음과 같은 특징을 가집니다.
en{0~6} :: en0가 메인 Wi-Fi 혹은 이더넷 인터페이스로 쓰인다. 만약 인터넷이 연결되어 있다면, status 정보가 active로 표시되었을 것. 나머지에는 추가적인 이더넷 포트, USB 이더넷, 가상 어댑터 등이 될 수 있다. (동글이 같은 제품을 가리키는 건가 싶습니다.)
lo0 :: Loopback Interface. localhost를 사용하는 인터페이스.
gif0 :: Generic Tunnel Interface. IP 프로토콜을 다른 IP 프로토콜 위에 캡슐화 하는 가상 인터페이스. 대부분의 사용자는 직접 쓰지 않는다.
stf0 :: Six To Four. IPv6 접속을 가능하게 하기 위해 IPv6 → IPv4 변환을 지원한다. 최근에는 잘 쓰이지 않는다.
anpi{0~2} :: Apple Network Private Interface. Apple 내부적으로 사용되는 시스템 인터페이스.
bridge0 :: 다른 네트워크 포트를 스위치처럼 동작하게 해주는 가상 인터페이스.
ap1 :: 맥 환경에서의 무선 접공 공유, 내부 핫스팟 등으로 생긴다.
awdl0 :: Apple Wireless Direct Link. AirDrop, AirPlay, Apple Watch 해제, Sidecar 등 Apple 기기간 직접 통신을 위한 P2P 무선 링크다
llw0 :: Local-Link Wireless. 근거리 무선 통신에 사용. iPhone 핫스팟, Handoff, Continuity 등에서 간헐적으로 사용된다.
utun{0~4} :: User Tunnel Interface. VPN(SSL, PIsec, WireGuard 등)을 구현할 때 사용한다. 또는 가상 IPv4도 붙을 수 있다.
이 많은 것 중에서 어떤 것을 확인해야 하나요?
최상단의 en{n} 인터페이스가 우리가 살펴보고자 한 인터페이스입니다. 가장 흔히 사용하는 이더넷(LAN 선)이나 Wi-Fi 환경이 해당 인터페이스로 연결되는 것입니다.
이제는 Wi-Fi와 이더넷 신호에 대해 간략하게 살펴보고자 합니다.
두 가지의 네트워크 연결 방식 모두 IP 네트워크를 위한 연결 방식으로, TCP/IP 프로토콜을 통해 데이터를 송수신합니다. 하지만 신호의 형태나 성질 자체가 다르기 때문에, 같은 기준으로 두 신호를 비교할 수는 없습니다.
1. Wi-Fi
MZ인 우리가 잘 아는 영역입니다. 2.4GHz/5GHz 대역의 전파를 이용해 통신하는 무선(Wireless) 연결 방식입니다.
Wi-Fi 5, 6, 6E 등 표준에 따라 최대 속도가 크게 차이가 납니다. 이는 무선 통신이기 때문에, 환경에 따라서도 속도 및 안정성에 크게 영향을 받습니다. 집 구조상 벽때문에 ‘와이파이가 안터진다’거나, 사용자 수가 많아 ‘와이파이가 느리다’ 등의 상황이 있습니다.
Wi-Fi에는 신호 전파 감도를 나타내는 RSSI 라는 정보가 있습니다. 해당 정보는 dBm의 단위로, 음수로 측정되기 때문에, 절댓값이 클수록 신호가 약한 것으로 평가합니다. 해당 RSSI를 0~100 범위로 환산해 Quality 로 표시하기도 합니다. 혹은 SNR(Signal-to-Noise Ratio) 잡음 비율을 볼 수도 있습니다.
2. LAN(Ethernet)
케이블을 통한 유선 연결 방식입니다. 집에 있는 인터넷 포트와 선을 이용해, LAN 선을 데스크탑에 연결하여 사용합니다.
별도의 전파 감도를 측정하지는 않지만, Link Speed와 같은 정보를 측정합니다. 이는 두 연결 방식 공통적인 기준으로 존재합니다. 그것은 데이터를 얼마나 빨리/많이 보낼 수 있냐는 것입니다. 흔히 🔗 fast.com 사이트에서 측정하는 방식입니다. 신호의 speed를 통해 어떤 환경에서 인터넷을 사용하는지 평가해 볼 수 있습니다.
카페에 가서 와이파이를 연결하고, 데스크탑에 LAN선을 연결하면 인터넷이 되는 현상에 대해 조금이나마 이해도가 생겼습니다. 서비스에 해당 정보들을 통해 연결된 인터넷 환경을 파악해 디버깅 하는 데에 도움을 받을 수도 있으리라 기대가 됩니다.
해당 인터페이스들을 조회할 수 있는 가장 익숙한 라이브러리로는 🔗 systeminformation 이 있습니다. 해당 라이브러리는 node 환경에서 동작합니다. 터미널에서의 명령어를 함수화하여 제공하고, 우리는 쉽게 내 PC의 네트워크와 인터넷 환경들을 확인해볼 수 있습니다.
여기서 Web 환경에서는 우리의 네트워크 정보들을 알 수는 없을까 하는 작은 의문이 드는데요. 이는 보안상의 이유로 제공되지 않는 기능입니다. PC의 인터페이스 정보를 알기에는 인터넷 환경을 조작하는 중요한 정보이기 때문이죠. 하지만 조금씩 고도화 되면서 🔗 Network Information (MDN) 과 같은 연결된 정보정도는 알 수 있게끔 제공하려는 움직임이 보입니다. 많은 기능들을 안전하게 사용하기 위해 표준화 작업이 적극적으로 되었으면 합니다.
감사합니다.